%3C%3Fphp%0A/%2A%2A%0A%20%2A%20ODAC%20Sales%20-%20Lead%20%26%20Activity%20Journal%20System%0A%20%2A%20Pure%20PHP%20%2B%20SQLite%0A%20%2A/%0A%0Asession_start%28%29%3B%0A%0Adefine%28%27DB_PATH%27%2C%20__DIR__%20.%20%27/sales.sqlite%27%29%3B%0Adefine%28%27BASE_URL%27%2C%20%27/%27%29%3B%0A%0A//%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20DB%20INIT%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0Afunction%20getDB%28%29%20%7B%0A%20%20%20%20static%20%24db%20%3D%20null%3B%0A%20%20%20%20if%20%28%24db%20%3D%3D%3D%20null%29%20%7B%0A%20%20%20%20%20%20%20%20%24db%20%3D%20new%20PDO%28%27sqlite%3A%27%20.%20DB_PATH%29%3B%0A%20%20%20%20%20%20%20%20%24db-%3EsetAttribute%28PDO%3A%3AATTR_ERRMODE%2C%20PDO%3A%3AERRMODE_EXCEPTION%29%3B%0A%20%20%20%20%20%20%20%20initDB%28%24db%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20return%20%24db%3B%0A%7D%0A%0Afunction%20initDB%28%24db%29%20%7B%0A%20%20%20%20%24db-%3Eexec%28%22%0A%20%20%20%20CREATE%20TABLE%20IF%20NOT%20EXISTS%20agents%20%28%0A%20%20%20%20%20%20%20%20id%20INTEGER%20PRIMARY%20KEY%20AUTOINCREMENT%2C%0A%20%20%20%20%20%20%20%20name%20TEXT%20NOT%20NULL%2C%0A%20%20%20%20%20%20%20%20pin%20TEXT%20NOT%20NULL%2C%0A%20%20%20%20%20%20%20%20role%20TEXT%20DEFAULT%20%27sales%27%2C%0A%20%20%20%20%20%20%20%20team%20TEXT%20DEFAULT%20%27%27%2C%0A%20%20%20%20%20%20%20%20created_at%20DATETIME%20DEFAULT%20CURRENT_TIMESTAMP%0A%20%20%20%20%29%3B%0A%0A%20%20%20%20CREATE%20TABLE%20IF%20NOT%20EXISTS%20tags%20%28%0A%20%20%20%20%20%20%20%20id%20INTEGER%20PRIMARY%20KEY%20AUTOINCREMENT%2C%0A%20%20%20%20%20%20%20%20name%20TEXT%20NOT%20NULL%20UNIQUE%2C%0A%20%20%20%20%20%20%20%20created_at%20DATETIME%20DEFAULT%20CURRENT_TIMESTAMP%0A%20%20%20%20%29%3B%0A%0A%20%20%20%20CREATE%20TABLE%20IF%20NOT%20EXISTS%20pipeline_stages%20%28%0A%20%20%20%20%20%20%20%20id%20INTEGER%20PRIMARY%20KEY%20AUTOINCREMENT%2C%0A%20%20%20%20%20%20%20%20name%20TEXT%20NOT%20NULL%2C%0A%20%20%20%20%20%20%20%20sort_order%20INTEGER%20DEFAULT%200%2C%0A%20%20%20%20%20%20%20%20created_at%20DATETIME%20DEFAULT%20CURRENT_TIMESTAMP%0A%20%20%20%20%29%3B%0A%0A%20%20%20%20CREATE%20TABLE%20IF%20NOT%20EXISTS%20service_types%20%28%0A%20%20%20%20%20%20%20%20id%20INTEGER%20PRIMARY%20KEY%20AUTOINCREMENT%2C%0A%20%20%20%20%20%20%20%20name%20TEXT%20NOT%20NULL%20UNIQUE%2C%0A%20%20%20%20%20%20%20%20created_at%20DATETIME%20DEFAULT%20CURRENT_TIMESTAMP%0A%20%20%20%20%29%3B%0A%0A%20%20%20%20CREATE%20TABLE%20IF%20NOT%20EXISTS%20leads%20%28%0A%20%20%20%20%20%20%20%20id%20INTEGER%20PRIMARY%20KEY%20AUTOINCREMENT%2C%0A%20%20%20%20%20%20%20%20name%20TEXT%20NOT%20NULL%2C%0A%20%20%20%20%20%20%20%20contact%20TEXT%20DEFAULT%20%27%27%2C%0A%20%20%20%20%20%20%20%20crm_url%20TEXT%20DEFAULT%20%27%27%2C%0A%20%20%20%20%20%20%20%20source%20TEXT%20DEFAULT%20%27%27%2C%0A%20%20%20%20%20%20%20%20agent_id%20INTEGER%2C%0A%20%20%20%20%20%20%20%20pipeline_stage_id%20INTEGER%2C%0A%20%20%20%20%20%20%20%20order_value%20INTEGER%20DEFAULT%200%2C%0A%20%20%20%20%20%20%20%20service_type_id%20INTEGER%2C%0A%20%20%20%20%20%20%20%20notes%20TEXT%20DEFAULT%20%27%27%2C%0A%20%20%20%20%20%20%20%20created_at%20DATETIME%20DEFAULT%20CURRENT_TIMESTAMP%2C%0A%20%20%20%20%20%20%20%20updated_at%20DATETIME%20DEFAULT%20CURRENT_TIMESTAMP%2C%0A%20%20%20%20%20%20%20%20FOREIGN%20KEY%20%28agent_id%29%20REFERENCES%20agents%28id%29%2C%0A%20%20%20%20%20%20%20%20FOREIGN%20KEY%20%28pipeline_stage_id%29%20REFERENCES%20pipeline_stages%28id%29%2C%0A%20%20%20%20%20%20%20%20FOREIGN%20KEY%20%28service_type_id%29%20REFERENCES%20service_types%28id%29%0A%20%20%20%20%29%3B%0A%0A%20%20%20%20CREATE%20TABLE%20IF%20NOT%20EXISTS%20lead_tags%20%28%0A%20%20%20%20%20%20%20%20lead_id%20INTEGER%2C%0A%20%20%20%20%20%20%20%20tag_id%20INTEGER%2C%0A%20%20%20%20%20%20%20%20PRIMARY%20KEY%20%28lead_id%2C%20tag_id%29%0A%20%20%20%20%29%3B%0A%0A%20%20%20%20CREATE%20TABLE%20IF%20NOT%20EXISTS%20activities%20%28%0A%20%20%20%20%20%20%20%20id%20INTEGER%20PRIMARY%20KEY%20AUTOINCREMENT%2C%0A%20%20%20%20%20%20%20%20agent_id%20INTEGER%2C%0A%20%20%20%20%20%20%20%20lead_id%20INTEGER%2C%0A%20%20%20%20%20%20%20%20date%20TEXT%20NOT%20NULL%2C%0A%20%20%20%20%20%20%20%20type%20TEXT%20NOT%20NULL%2C%0A%20%20%20%20%20%20%20%20notes%20TEXT%20DEFAULT%20%27%27%2C%0A%20%20%20%20%20%20%20%20created_at%20DATETIME%20DEFAULT%20CURRENT_TIMESTAMP%2C%0A%20%20%20%20%20%20%20%20FOREIGN%20KEY%20%28agent_id%29%20REFERENCES%20agents%28id%29%2C%0A%20%20%20%20%20%20%20%20FOREIGN%20KEY%20%28lead_id%29%20REFERENCES%20leads%28id%29%0A%20%20%20%20%29%3B%0A%20%20%20%20%22%29%3B%0A%0A%20%20%20%20//%20Seed%20default%20data%20if%20empty%0A%20%20%20%20%24cnt%20%3D%20%24db-%3Equery%28%22SELECT%20COUNT%28%2A%29%20FROM%20agents%22%29-%3EfetchColumn%28%29%3B%0A%20%20%20%20if%20%28%24cnt%20%3D%3D%200%29%20%7B%0A%20%20%20%20%20%20%20%20%24db-%3Eexec%28%22INSERT%20INTO%20agents%20%28name%2C%20pin%2C%20role%2C%20team%29%20VALUES%20%28%27Superadmin%27%2C%20%270000%27%2C%20%27superadmin%27%2C%20%27Admin%27%29%22%29%3B%0A%20%20%20%20%20%20%20%20%24db-%3Eexec%28%22INSERT%20INTO%20agents%20%28name%2C%20pin%2C%20role%2C%20team%29%20VALUES%20%28%27Andi%27%2C%20%271111%27%2C%20%27sales%27%2C%20%27Team%20A%27%29%22%29%3B%0A%20%20%20%20%20%20%20%20%24db-%3Eexec%28%22INSERT%20INTO%20agents%20%28name%2C%20pin%2C%20role%2C%20team%29%20VALUES%20%28%27Budi%27%2C%20%272222%27%2C%20%27sales%27%2C%20%27Team%20A%27%29%22%29%3B%0A%20%20%20%20%20%20%20%20%24db-%3Eexec%28%22INSERT%20INTO%20agents%20%28name%2C%20pin%2C%20role%2C%20team%29%20VALUES%20%28%27Citra%27%2C%20%273333%27%2C%20%27sales%27%2C%20%27Team%20B%27%29%22%29%3B%0A%0A%20%20%20%20%20%20%20%20%24db-%3Eexec%28%22INSERT%20INTO%20pipeline_stages%20%28name%2C%20sort_order%29%20VALUES%20%28%27Baru%27%2C%201%29%22%29%3B%0A%20%20%20%20%20%20%20%20%24db-%3Eexec%28%22INSERT%20INTO%20pipeline_stages%20%28name%2C%20sort_order%29%20VALUES%20%28%27Diproses%27%2C%202%29%22%29%3B%0A%20%20%20%20%20%20%20%20%24db-%3Eexec%28%22INSERT%20INTO%20pipeline_stages%20%28name%2C%20sort_order%29%20VALUES%20%28%27Quotasi%27%2C%203%29%22%29%3B%0A%20%20%20%20%20%20%20%20%24db-%3Eexec%28%22INSERT%20INTO%20pipeline_stages%20%28name%2C%20sort_order%29%20VALUES%20%28%27Closing%27%2C%204%29%22%29%3B%0A%20%20%20%20%20%20%20%20%24db-%3Eexec%28%22INSERT%20INTO%20pipeline_stages%20%28name%2C%20sort_order%29%20VALUES%20%28%27Lost%27%2C%205%29%22%29%3B%0A%0A%20%20%20%20%20%20%20%20%24db-%3Eexec%28%22INSERT%20INTO%20service_types%20%28name%29%20VALUES%20%28%27Konsultasi%27%29%22%29%3B%0A%20%20%20%20%20%20%20%20%24db-%3Eexec%28%22INSERT%20INTO%20service_types%20%28name%29%20VALUES%20%28%27Product%20A%27%29%22%29%3B%0A%20%20%20%20%20%20%20%20%24db-%3Eexec%28%22INSERT%20INTO%20service_types%20%28name%29%20VALUES%20%28%27Product%20B%27%29%22%29%3B%0A%0A%20%20%20%20%20%20%20%20%24db-%3Eexec%28%22INSERT%20INTO%20tags%20%28name%29%20VALUES%20%28%27Hot%27%29%22%29%3B%0A%20%20%20%20%20%20%20%20%24db-%3Eexec%28%22INSERT%20INTO%20tags%20%28name%29%20VALUES%20%28%27Warm%27%29%22%29%3B%0A%20%20%20%20%20%20%20%20%24db-%3Eexec%28%22INSERT%20INTO%20tags%20%28name%29%20VALUES%20%28%27Cold%27%29%22%29%3B%0A%20%20%20%20%7D%0A%7D%0A%0A//%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20HELPERS%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0Afunction%20isLoggedIn%28%29%20%7B%20return%20isset%28%24_SESSION%5B%27agent_id%27%5D%29%3B%20%7D%0Afunction%20currentAgent%28%29%20%7B%20return%20isset%28%24_SESSION%5B%27agent_id%27%5D%29%20%3F%20%24_SESSION%20%3A%20null%3B%20%7D%0Afunction%20isSuperadmin%28%29%20%7B%20return%20isset%28%24_SESSION%5B%27role%27%5D%29%20%26%26%20%24_SESSION%5B%27role%27%5D%20%3D%3D%3D%20%27superadmin%27%3B%20%7D%0A%0Afunction%20requireLogin%28%29%20%7B%0A%20%20%20%20if%20%28%21isLoggedIn%28%29%29%20%7B%20header%28%27Location%3A%20/%3Fpage%3Dlogin%27%29%3B%20exit%3B%20%7D%0A%7D%0A%0Afunction%20formatRupiah%28%24num%29%20%7B%0A%20%20%20%20return%20%27Rp%20%27%20.%20number_format%28%28int%29%24num%2C%200%2C%20%27%2C%27%2C%20%27.%27%29%3B%0A%7D%0A%0Afunction%20daterange_filter%28%24from%2C%20%24to%29%20%7B%0A%20%20%20%20%24wheres%20%3D%20%5B%5D%3B%0A%20%20%20%20%24params%20%3D%20%5B%5D%3B%0A%20%20%20%20if%20%28%24from%29%20%7B%20%24wheres%5B%5D%20%3D%20%22date%20%3E%3D%20%3F%22%3B%20%24params%5B%5D%20%3D%20%24from%3B%20%7D%0A%20%20%20%20if%20%28%24to%29%20%7B%20%24wheres%5B%5D%20%3D%20%22date%20%3C%3D%20%3F%22%3B%20%24params%5B%5D%20%3D%20%24to%3B%20%7D%0A%20%20%20%20return%20%5B%27sql%27%20%3D%3E%20%24wheres%20%3F%20%27%20AND%20%27%20.%20implode%28%27%20AND%20%27%2C%20%24wheres%29%20%3A%20%27%27%2C%20%27params%27%20%3D%3E%20%24params%5D%3B%0A%7D%0A%0A//%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20ROUTES%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%24page%20%3D%20isset%28%24_GET%5B%27page%27%5D%29%20%3F%20%24_GET%5B%27page%27%5D%20%3A%20%27dashboard%27%3B%0A%24db%20%3D%20getDB%28%29%3B%0A%0A//%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20LOGIN%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0Aif%20%28%24page%20%3D%3D%3D%20%27login%27%20%26%26%20%24_SERVER%5B%27REQUEST_METHOD%27%5D%20%3D%3D%3D%20%27POST%27%29%20%7B%0A%20%20%20%20%24pin%20%3D%20trim%28%24_POST%5B%27pin%27%5D%20%3F%3F%20%27%27%29%3B%0A%20%20%20%20%24stmt%20%3D%20%24db-%3Eprepare%28%22SELECT%20%2A%20FROM%20agents%20WHERE%20pin%20%3D%20%3F%22%29%3B%0A%20%20%20%20%24stmt-%3Eexecute%28%5B%24pin%5D%29%3B%0A%20%20%20%20%24agent%20%3D%20%24stmt-%3Efetch%28PDO%3A%3AFETCH_ASSOC%29%3B%0A%20%20%20%20if%20%28%24agent%29%20%7B%0A%20%20%20%20%20%20%20%20%24_SESSION%5B%27agent_id%27%5D%20%3D%20%24agent%5B%27id%27%5D%3B%0A%20%20%20%20%20%20%20%20%24_SESSION%5B%27agent_name%27%5D%20%3D%20%24agent%5B%27name%27%5D%3B%0A%20%20%20%20%20%20%20%20%24_SESSION%5B%27role%27%5D%20%3D%20%24agent%5B%27role%27%5D%3B%0A%20%20%20%20%20%20%20%20%24_SESSION%5B%27team%27%5D%20%3D%20%24agent%5B%27team%27%5D%3B%0A%20%20%20%20%20%20%20%20header%28%27Location%3A%20/%27%29%3B%0A%20%20%20%20%20%20%20%20exit%3B%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%24loginError%20%3D%20%27PIN%20salah%27%3B%0A%20%20%20%20%7D%0A%7D%0A%0Aif%20%28%24page%20%3D%3D%3D%20%27logout%27%29%20%7B%0A%20%20%20%20session_destroy%28%29%3B%0A%20%20%20%20header%28%27Location%3A%20/%27%29%3B%0A%20%20%20%20exit%3B%0A%7D%0A%0A//%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20DASHBOARD%20DATA%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0Aif%20%28%24page%20%3D%3D%3D%20%27dashboard%27%20%7C%7C%20%24page%20%3D%3D%3D%20%27leads%27%20%7C%7C%20%24page%20%3D%3D%3D%20%27activities%27%20%7C%7C%20%24page%20%3D%3D%3D%20%27settings%27%20%7C%7C%20%24page%20%3D%3D%3D%20%27export%27%29%20%7B%0A%20%20%20%20requireLogin%28%29%3B%0A%20%20%20%20%24agent%20%3D%20currentAgent%28%29%3B%0A%7D%0A%0A//%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20INCLUDE%20VIEWS%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%24views_path%20%3D%20__DIR__%20.%20%27/views/%27%3B%0A%24inc%20%3D%20null%3B%0A%0Aob_start%28%29%3B%0A%0Aif%20%28%24page%20%3D%3D%3D%20%27dashboard%27%29%20%7B%0A%20%20%20%20%24inc%20%3D%20%24views_path%20.%20%27dashboard.php%27%3B%0A%7D%20elseif%20%28%24page%20%3D%3D%3D%20%27leads%27%29%20%7B%0A%20%20%20%20%24inc%20%3D%20%24views_path%20.%20%27leads.php%27%3B%0A%7D%20elseif%20%28%24page%20%3D%3D%3D%20%27activities%27%29%20%7B%0A%20%20%20%20%24inc%20%3D%20%24views_path%20.%20%27activities.php%27%3B%0A%7D%20elseif%20%28%24page%20%3D%3D%3D%20%27settings%27%29%20%7B%0A%20%20%20%20requireLogin%28%29%3B%0A%20%20%20%20if%20%28%21isSuperadmin%28%29%29%20%7B%20header%28%27Location%3A%20/%27%29%3B%20exit%3B%20%7D%0A%20%20%20%20%24inc%20%3D%20%24views_path%20.%20%27settings.php%27%3B%0A%7D%20elseif%20%28%24page%20%3D%3D%3D%20%27export%27%20%26%26%20isLoggedIn%28%29%29%20%7B%0A%20%20%20%20requireLogin%28%29%3B%0A%20%20%20%20%24inc%20%3D%20%24views_path%20.%20%27export.php%27%3B%0A%7D%20else%20%7B%0A%20%20%20%20%24inc%20%3D%20%24views_path%20.%20%27login.php%27%3B%0A%7D%0A%0Aif%20%28%24inc%20%26%26%20file_exists%28%24inc%29%29%20%7B%0A%20%20%20%20include%20%24inc%3B%0A%7D%20else%20%7B%0A%20%20%20%20echo%20%22Page%20not%20found%22%3B%0A%7D%0A%0A%24content%20%3D%20ob_get_clean%28%29%3B%0Ainclude%20__DIR__%20.%20%27/views/layout.php%27%3B%0A