Advertisement
anne-hasan

Untitled

May 25th, 2022
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 254.09 KB | None | 0 0
  1. <?php if (!defined('BASEPATH')) exit('No direct script access allowed');
  2.  
  3. use PhpOffice\PhpSpreadsheet\IOFactory;
  4. use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
  5. use PhpOffice\PhpSpreadsheet\Shared\Date as PSSDDate;
  6. ini_set('max_execution_time', 0);
  7. ini_set('memory_limit', '-1');
  8. ini_set('sqlsrv.ClientBufferMaxKBSize','524288');
  9. ini_set('pdo_sqlsrv.client_buffer_max_kb_size','524288');
  10.  
  11. class Home extends CI_Controller
  12. {
  13.  
  14. function __construct() {
  15. parent::__construct();
  16. $this->layout = 'none';
  17. $this->load->library('asec_giz_api_library');
  18. $this->load->model('ProjectReviewWithdraw');
  19. $this->load->model('ProjectReviewIntervention');
  20. $this->load->model('ProjectReviewHold');
  21. $this->load->model('ProjectTr');
  22. $this->load->model("ProjectTracking");
  23. $this->load->model('Direct2db_model');
  24. }
  25.  
  26. function index() {
  27. $post = $this->input->post();
  28. if ($post) {
  29. // 1 = new project; 2 = reffered_proposal; 7 = terminated_proposal
  30. $data = projectStatusDashboard($post['type']);
  31. $ret = ($data) ? $data : '0';
  32. echo json_encode($ret);exit;
  33. }
  34. $data['hidden_grid'] = (isGroup("DO")) ? 'hidden' : '';
  35. $data['hidden_grid_secdiv'] = (isGroup("SECDIV")) ? 'hidden' : '';
  36. $data['new_project'] = '-';
  37. $data['reffered_proposal'] = '-';
  38. $data['terminated_proposal'] = '-';
  39. $data['withdrawed_proposal'] = '-';
  40. render('home/home', $data, 'main-layout');
  41. }
  42.  
  43. function statusProject($id)
  44. {
  45. $data = getSingleDataApi('project_tr', array(
  46. 'project_tr_id' => $id
  47. ));
  48.  
  49. if ($data['id_auth_user_refer'] || $data['id_auth_user_assign']) {
  50. $type = $data['id_auth_user_assign'] ? 'assign' : 'refer';
  51. $dataUser = getSingleDataApi('auth_user', array(
  52. 'id_auth_user' => $data["id_auth_user_$type"]
  53. ));
  54. }
  55. if ($dataUser) {
  56. $data['status'] = "<b>Referred to:</b> $dataUser[username] ($dataUser[email])";
  57.  
  58. if ($data['id_ref_status_approval'] && $data['is_complete'] != 1)
  59. {
  60. $status = getSingleDataApi('ref_status_approval', array(
  61. 'id' => $data['id_ref_status_approval']
  62. ));
  63. if ($data['id_auth_user_recommend'])
  64. {
  65. $userRecommend = getSingleDataApi('auth_user', array(
  66. 'id_auth_user' => $data['id_auth_user_recommend']
  67. ));
  68. $recommend = "and recommend this project to user $userRecommend[username] ($userRecommend[email])";
  69. }
  70. else
  71. {
  72. // $recommend = $data['note_refer'] ? "<br>Note : $data[approval_note]" : '';
  73. }
  74. $data['status'] = "User $dataUser[username] ($dataUser[email]) $status[name] $recommend";
  75. }
  76. else if ($data['id_auth_user_assign'])
  77. {
  78. $data['status'] = "<b>Assign to user:</b> $dataUser[username] ($dataUser[email])";
  79. }
  80.  
  81. if ($data['is_complete'] == 1)
  82. {
  83. $data['status'] = 'Completed';
  84. }
  85. }
  86. return $data['status'];
  87. }
  88.  
  89. public function process($value = '')
  90. {
  91. $post = $this->input->post();
  92. if ($post)
  93. {
  94. $data['value'] = $post['status'];
  95. $where['name'] = 'using_login_form';
  96. $this->db->update('config', $data, $where);
  97. redirect('home');
  98. }
  99. }
  100.  
  101. function imagemanager()
  102. {
  103. $post = purify($this->input->post());
  104. $file = $_FILES;
  105. if ($file)
  106. {
  107. $file = $_FILES['img'];
  108. $fname = $file['name'];
  109. $maxFileSize = MAX_UPLOAD_SIZE * 1024 * 1024;
  110. if (!is_writable(UPLOAD_DIR))
  111. { //kalo ga bisa upload
  112. $ret['error'] = 1;
  113. $ret['message'] = "Directory is readonly";
  114. }
  115. else if ($file['size'] >= $maxFileSize)
  116. {
  117. $ret['error'] = 1;
  118. $ret['message'] = "Max File size is " . MAX_UPLOAD_SIZE . "MB";
  119. }
  120. else if ($fname)
  121. {
  122. if (!file_exists(isset($folder)))
  123. { //kalo blm ada foldernya, bikin dulu
  124. @mkdir($folder);
  125. }
  126. $upload = upload_file('img', 'temp');
  127. $ret['filename'] = URL_UPLOAD_CONTENT . "images/article/temp/" . $upload['file_name'];
  128. $ret['file'] = $upload['file_name'];
  129. $ret['size'] = $upload['file_size'];
  130. $ret['width'] = $upload['image_width'];
  131. $ret['height'] = $upload['image_height'];
  132. $ret['message'] = 'success';
  133. }
  134. echo json_encode($ret);exit;
  135. }
  136.  
  137. $searchPicture = isset($post['searchPicture']) ? $post['searchPicture'] : '';
  138. $gets['id_name'] = 'id';
  139. $gets['is_single_table'] = 1;
  140. $gets['table_name'] = 'file_manager';
  141. $gets['where'] = "(user_id_create = " . id_user() . " or is_public = 1) and name LIKE '%" .
  142. $searchPicture . "%'";
  143. $gets['is_num_rows'] = 1;
  144. $total_records = $this->asec_giz_api_library->call('master_data/get_data', $gets);
  145. if (is_array($total_records))
  146. {
  147. $total_records = 0;
  148. }
  149. $per_page = 12;
  150. $data['pages'] = round($total_records / $per_page);
  151. $data['load'] = base_url() . 'home/imagemanager';
  152. // $data['search'] = base_url().'home/search';
  153. //sanitize post value
  154. if (isset($post['page']))
  155. {
  156. $page_number = filter_var($post["page"], FILTER_SANITIZE_NUMBER_INT, FILTER_FLAG_STRIP_HIGH);
  157. if (!is_numeric($page_number))
  158. {
  159. die('Invalid page number!');
  160. } //incase of invalid page number
  161.  
  162. }
  163. else
  164. {
  165. $page_number = 1;
  166. }
  167. //get current starting point of records
  168. $offset = (($page_number - 1) * $per_page);
  169.  
  170. $gets2['id_name'] = 'id';
  171. $gets2['is_single_table'] = 1;
  172. $gets2['table_name'] = 'file_manager';
  173. $gets2['where'] = "(user_id_create = " . id_user() . " or is_public = 1) and name LIKE '%" . $searchPicture . "%'";
  174. $gets2['limit'] = $per_page;
  175. $gets2['offset'] = $offset;
  176. $data['list_data'] = $this->asec_giz_api_library->call('master_data/get_data', $gets2);
  177. if ($data['list_data']['message'])
  178. {
  179. $data['list_data'] = [];
  180. }
  181. render('apps/filemanager', $data, 'blank');
  182. }
  183.  
  184. function imagemanager_save()
  185. {
  186. $post = $this->input->post();
  187. $tmp = URL_UPLOAD_CONTENT . 'external/' . $post['tmp'];
  188. $thumbs = UPLOAD_DIR . 'small/' . $post['name'];
  189. $ori_tmp = UPLOAD_DIR . 'temp/' . $post['name'];
  190. $ori = UPLOAD_DIR . 'large/' . $post['name'];
  191. copy($tmp, $thumbs);
  192. copy($ori_tmp, $ori);
  193. unset($post['tmp']);
  194. $post['user_id_create'] = id_user();
  195. insertApi('file_manager', $post);
  196. }
  197.  
  198. function del_file()
  199. {
  200. $id = $this->input->post('id');
  201. $x = deleteData($id, array(
  202. 'table_name' => 'file_manager',
  203. 'id_name' => 'id'
  204. ));
  205. echo "success";exit;
  206. }
  207.  
  208. function notif($return = '')
  209. {
  210. $isDo = isGroup("DO");
  211. $isPCPMD = isGroup("PCPMD");
  212. $isSecDiv = isGroup("SECDIV");
  213. $id_user = id_user();
  214. $id_struc_org = id_user('id_struc_org');
  215. $steps_review = ['pam', 'pac', 'sb', 'cpr', 'dp'];
  216. $my_task = 0;
  217. $notif = [];
  218. if ($isSecDiv)
  219. {
  220. # TASK. PCPMD refer proposal to SECDIV
  221. $where = 'is_complete = 0 AND (id_ref_status_approval IS NULL OR id_ref_status_approval = 0) AND (id_auth_user_assign is NULL OR id_auth_user_assign = 0) AND id_auth_user_refer = ' . $id_user;
  222. $data = $this->ProjectTr->fetchAll($where);
  223. foreach ($data as $key => $value)
  224. {
  225. $notif[strtotime($value['modify_date']) ]['task'] = ['title' => $value['project_tr_title'], 'desc' => 'PCPMD Refer Proposal to you', 'url' => "pre_proposals/view/$value[project_tr_id]", 'time' => $value['modify_date'], 'unread' => 'unread'];
  226. $my_task++;
  227. }
  228. }
  229.  
  230. if ($isPCPMD)
  231. {
  232. # TASK. SECDIV respond Refer
  233. $where = 'is_complete = 0 AND (id_ref_status_approval IS NOT NULL) AND (id_auth_user_assign is NULL OR id_auth_user_assign = 0)';
  234. $data = $this->ProjectTr->fetchAll($where);
  235. if ($data)
  236. {
  237. foreach ($data as $key => $value)
  238. {
  239. $notif[strtotime($value['modify_date']) ]['task'] = ['title' => '<b>Proposal</b>: ' . $value[project_tr_title] . '<br>
  240. <b>Status</b>: ' . $value['status_approval'], 'desc' => 'SECDIV respond proposal', 'url' => "pre_proposals/view/$value[project_tr_id]", 'time' => $value['modify_date'], 'unread' => ''];
  241. $my_task++;
  242. }
  243. }
  244.  
  245. # UPDATE. New proposal from PCPMD
  246. $data = $this->ProjectTr->fetchAll("id_auth_user_assign IS NULL");
  247. if ($data)
  248. {
  249. foreach ($data as $key => $value)
  250. {
  251. $username = $value['user_id_create'] == $id_user ? 'You' : $value['created_by'];
  252. $notif[strtotime($value['create_date']) ]['update'] = ['title' => $value['project_tr_title'], 'desc' => "New Proposal from $username", 'url' => "pre_proposals/view/$value[project_tr_id]", 'time' => $value['create_date'], 'unread' => ''];
  253. }
  254. }
  255.  
  256. # UPDATE. PCPMD refer proposal to SECDIV
  257. $data = get_proposal_logs(['user_id_create' => $id_user, 'active_role' => 'PCPMD'], 'refer');
  258. if ($data)
  259. {
  260. foreach ($data as $key => $value)
  261. {
  262. $project_tr_ids[] = $value['project_tr_id'];
  263. $username = $value['user_id_create'] == $id_user ? 'You' : getUser($value['user_id_create']);
  264. $secdiv_username = getUser($value['id_auth_user_refer']);
  265. $notif[strtotime($value['create_date']) ]['update'] = ['title' => $value['project_tr_title'], 'desc' => "$username refer proposal to $secdiv_username", 'url' => "pre_proposals/view/$value[project_tr_id]", 'time' => $value['create_date'], 'unread' => ''];
  266. }
  267. $ids = implode($project_tr_ids, ',');
  268. # UPDATE. SECDIV respond refer proposal (reject)
  269. $data = get_proposal_logs("project_tr_id IN ($ids) AND active_role = 'SECDIV'", 'reject');
  270. if ($data)
  271. {
  272. foreach ($data as $key => $value)
  273. {
  274. $secdiv_username = getUser($value['id_auth_user_refer']);
  275. $notif[strtotime($value['create_date']) + 1]['update'] = ['title' => $value['project_tr_title'], 'desc' => "$secdiv_username reject proposal that you are referred", 'url' => "pre_proposals/view/$value[project_tr_id]", 'time' => $value['create_date'], 'unread' => ''];
  276. }
  277. }
  278. # UPDATE. SECDIV respond refer proposal (approve)
  279. $data = get_proposal_logs("project_tr_id IN ($ids) AND active_role = 'SECDIV'", 'approve');
  280. if ($data)
  281. {
  282. foreach ($data as $key => $value)
  283. {
  284. $secdiv_username = getUser($value['id_auth_user_refer']);
  285. $notif[strtotime($value['create_date']) + 1]['update'] = ['title' => $value['project_tr_title'], 'desc' => "$secdiv_username approve proposal that you are referred", 'url' => "pre_proposals/view/$value[project_tr_id]", 'time' => $value['create_date'], 'unread' => ''];
  286. }
  287. }
  288. }
  289.  
  290. # UPDATE. PCPMD update proposal
  291. $data = get_proposal_logs(['user_id_create' => $id_user, 'active_role' => 'PCPMD'], 'edit');
  292. if ($data)
  293. {
  294. foreach ($data as $key => $value)
  295. {
  296. $username = $value['user_id_create'] == $id_user ? 'You' : getUser($value['user_id_create']);
  297. $notif[strtotime($value['create_date']) ]['update'] = ['title' => $value['project_tr_title'], 'desc' => "$username update proposal", 'url' => "pre_proposals/view/$value[project_tr_id]", 'time' => $value['create_date'], 'unread' => ''];
  298. }
  299. }
  300.  
  301. # UPDATE. PCPMD delete proposal
  302. $data = get_proposal_logs(['user_id_create' => $id_user, 'active_role' => 'PCPMD'], 'delete');
  303. if ($data)
  304. {
  305. foreach ($data as $key => $value)
  306. {
  307. $username = $value['user_id_create'] == $id_user ? 'You' : getUser($value['user_id_create']);
  308. $notif[strtotime($value['create_date']) + 1]['update'] = ['title' => $value['project_tr_title'], 'desc' => "$username delete proposal", 'url' => "#", 'time' => $value['create_date'], 'unread' => ''];
  309. }
  310. }
  311.  
  312. # UPDATE. PCPMD assign/confirm proposal to DO
  313. $data = get_proposal_logs(['user_id_create' => $id_user, 'active_role' => 'PCPMD'], 'assign');
  314. if ($data)
  315. {
  316. foreach ($data as $key => $value)
  317. {
  318. $username = $value['user_id_create'] == $id_user ? 'You' : getUser($value['user_id_create']);
  319. $do_username = getUser($value['id_auth_user_assign']);
  320. $notif[strtotime($value['create_date']) + 1]['update'] = ['title' => $value['project_tr_title'], 'desc' => "$username assign proposal to $do_username", 'url' => "project_proposal/view/$value[project_tr_id]", 'time' => $value['create_date'], 'unread' => ''];
  321. }
  322. }
  323.  
  324. /** HOLD */
  325. # UPDATE. PCPMD request to hold
  326. $data = get_proposal_logs("(a.user_id_create='$id_user' OR b.user_id_create='$id_user') AND active_role = 'PCPMD'", 'request hold', 1);
  327. if ($data)
  328. {
  329. foreach ($data as $key => $value)
  330. {
  331. $notif[strtotime($value['create_date']) + 1]['update'] = ['title' => $value['project_tr_title'],
  332. // 'desc' => "$do_username Request to Hold",
  333. 'desc' => "You Request to Hold", 'url' => "project_proposal/view/$value[project_tr_id]", 'time' => $value['create_date'], 'unread' => ''];
  334. }
  335. }
  336. # UPDATE. DO request to hold
  337. $data = get_proposal_logs("(a.user_id_create='$id_user' OR b.user_id_create='$id_user') AND active_role = 'DO'", 'request hold', 1);
  338. if ($data)
  339. {
  340. foreach ($data as $key => $value)
  341. {
  342. $notif[strtotime($value['create_date']) + 1]['update'] = ['title' => $value['project_tr_title'],
  343. // 'desc' => "$do_username Request to Hold",
  344. 'desc' => "DO Request to Hold", 'url' => "project_proposal/view/$value[project_tr_id]", 'time' => $value['create_date'], 'unread' => ''];
  345. }
  346. }
  347. # UPDATE. PCPMD approve hold
  348. $data = get_proposal_logs("(a.user_id_create='$id_user' OR b.user_id_create='$id_user') AND active_role = 'PCPMD'", 'approve hold', 1);
  349. if ($data)
  350. {
  351. foreach ($data as $key => $value)
  352. {
  353. $notif[strtotime($value['create_date']) + 1]['update'] = ['title' => $value['project_tr_title'], 'desc' => "You Approve Hold", 'url' => "project_proposal/view/$value[project_tr_id]", 'time' => $value['create_date'], 'unread' => ''];
  354. }
  355. }
  356. # UPDATE. PCPMD reject hold
  357. $data = get_proposal_logs("(a.user_id_create='$id_user' OR b.user_id_create='$id_user') AND active_role = 'PCPMD'", 'reject hold', 1);
  358. if ($data)
  359. {
  360. foreach ($data as $key => $value)
  361. {
  362. $notif[strtotime($value['create_date']) + 1]['update'] = ['title' => $value['project_tr_title'], 'desc' => "You Reject Hold", 'url' => "project_proposal/view/$value[project_tr_id]", 'time' => $value['create_date'], 'unread' => ''];
  363. }
  364. }
  365. # TASK. DO request to hold
  366. $data = $this->ProjectReviewHold->fetchAll("id_auth_user_approve is NULL AND a.project_tr_id is NOT NULL");
  367. foreach ($data as $key => $value)
  368. {
  369. $time = $value['modify_date'] ? $value['modify_date'] : $value['create_date'];
  370. $notif[strtotime($time) + 1]['task'] = ['title' => $value['project_tr_title'], 'desc' => "DO Request to Hold", 'url' => "project_proposal/view/$value[project_tr_id]", 'time' => $time, 'unread' => ''];
  371. $my_task++;
  372. }
  373. /** HOLD */
  374.  
  375. /** RESUME */
  376. # UPDATE. PCPMD request to resume
  377. $data = get_proposal_logs("(a.user_id_create='$id_user' OR b.user_id_create='$id_user') AND active_role = 'PCPMD'", 'request resume', 1);
  378. if ($data)
  379. {
  380. foreach ($data as $key => $value)
  381. {
  382. // $do_username = $value['id_auth_user_assign']==$id_user?'You':getUser($value['id_auth_user_assign']);
  383. $notif[strtotime($value['create_date']) + 1]['update'] = ['title' => $value['project_tr_title'],
  384. // 'desc' => "$do_username Request to Hold",
  385. 'desc' => "You Request to Resume", 'url' => "project_proposal/view/$value[project_tr_id]", 'time' => $value['create_date'], 'unread' => ''];
  386. }
  387. }
  388. # UPDATE. PCPMD approve resume
  389. $data = get_proposal_logs("(a.user_id_create='$id_user' OR b.user_id_create='$id_user') AND active_role = 'PCPMD'", 'approve resume', 1);
  390. if ($data)
  391. {
  392. foreach ($data as $key => $value)
  393. {
  394. $notif[strtotime($value['create_date']) + 1]['update'] = ['title' => $value['project_tr_title'], 'desc' => "You Approve Resume", 'url' => "project_proposal/view/$value[project_tr_id]", 'time' => $value['create_date'], 'unread' => ''];
  395. }
  396. }
  397. # UPDATE. PCPMD reject resume
  398. $data = get_proposal_logs("(a.user_id_create='$id_user' OR b.user_id_create='$id_user') AND active_role = 'PCPMD'", 'reject resume', 1);
  399. if ($data)
  400. {
  401. foreach ($data as $key => $value)
  402. {
  403. $notif[strtotime($value['create_date']) + 1]['update'] = ['title' => $value['project_tr_title'], 'desc' => "You Reject Resume", 'url' => "project_proposal/view/$value[project_tr_id]", 'time' => $value['create_date'], 'unread' => ''];
  404. }
  405. }
  406. # TASK. DO Request Resume to PCPMD
  407. $data = $this->ProjectReviewHold->fetchAll("status = 5");
  408. foreach ($data as $key => $value)
  409. {
  410. $time = $value['modify_date'] ? $value['modify_date'] : $value['create_date'];
  411. $notif[strtotime($time) ]['task'] = ['title' => $value['project_tr_title'], 'desc' => 'DO Request to Resume', 'url' => "project_proposal/view/$value[project_tr_id]", 'time' => $time, 'unread' => ''];
  412. $my_task++;
  413. }
  414. /** RESUME */
  415.  
  416. /** WITHDRAW */
  417. # UPDATE. PCPMD request to withdraw
  418. $data = get_proposal_logs("(a.user_id_create='$id_user' OR b.user_id_create='$id_user') AND active_role = 'PCPMD'", 'request withdraw', 1);
  419. if ($data)
  420. {
  421. foreach ($data as $key => $value)
  422. {
  423. $notif[strtotime($value['create_date']) + 1]['update'] = ['title' => $value['project_tr_title'], 'desc' => "You Request to Withdraw", 'url' => "project_proposal/view/$value[project_tr_id]", 'time' => $value['create_date'], 'unread' => ''];
  424. }
  425. }
  426. # UPDATE. PCPMD approve withdraw
  427. $data = get_proposal_logs("(a.user_id_create='$id_user' OR b.user_id_create='$id_user') AND active_role = 'PCPMD'", 'approve withdraw', 1);
  428. if ($data)
  429. {
  430. foreach ($data as $key => $value)
  431. {
  432. $notif[strtotime($value['create_date']) + 1]['update'] = ['title' => $value['project_tr_title'], 'desc' => "You Approve Withdraw", 'url' => "project_proposal/view/$value[project_tr_id]", 'time' => $value['create_date'], 'unread' => ''];
  433. }
  434. }
  435. # UPDATE. PCPMD reject withdraw
  436. $data = get_proposal_logs("(a.user_id_create='$id_user' OR b.user_id_create='$id_user') AND active_role = 'PCPMD'", 'reject withdraw', 1);
  437. if ($data)
  438. {
  439. foreach ($data as $key => $value)
  440. {
  441. $notif[strtotime($value['create_date']) + 1]['update'] = ['title' => $value['project_tr_title'], 'desc' => "You Reject Withdraw", 'url' => "project_proposal/view/$value[project_tr_id]", 'time' => $value['create_date'], 'unread' => ''];
  442. }
  443. }
  444. # TASK. DO Request to Withdraw
  445. $where = "id_auth_user_approve is NULL";
  446. $data = $this
  447. ->ProjectReviewWithdraw
  448. ->fetchAll($where);
  449. foreach ($data as $key => $value)
  450. {
  451. $time = $value['modify_date'] ? $value['modify_date'] : $value['create_date'];
  452. $notif[strtotime($time) ]['task'] = ['title' => $value['project_tr_title'], 'desc' => 'DO Request to Withdraw', 'url' => "project_proposal/view/$value[project_tr_id]", 'time' => $time, 'unread' => ''];
  453. $my_task++;
  454. }
  455. /** WITHDRAW */
  456.  
  457. /** REVISION */
  458. # UPDATE. PCPMD request revision to PCPMD
  459. foreach ($steps_review as $k1 => $v1)
  460. {
  461. $data = get_proposal_logs("(a.user_id_create='$id_user' OR b.user_id_create='$id_user') AND active_role = 'PCPMD'", 'request revision ' . $v1, 1);
  462. if ($data)
  463. {
  464. foreach ($data as $key => $value)
  465. {
  466. $do_username = $value['id_auth_user_assign'] == $id_user ? 'You' : getUser($value['id_auth_user_assign']);
  467. $notif[strtotime($value['create_date']) + 1]['update'] = ['title' => $value['project_tr_title'], 'desc' => "$do_username request to revision in " . strtoupper($v1) . " Step", 'url' => "project_proposal/view/$value[project_tr_id]", 'time' => $value['create_date'], 'unread' => ''];
  468. }
  469. }
  470. }
  471. # UPDATE. PCPMD approve revision
  472. foreach ($steps_review as $k1 => $v1)
  473. {
  474. $data = get_proposal_logs("(a.user_id_create='$id_user' OR b.user_id_create='$id_user') AND active_role = 'PCPMD'", 'approve revision ' . $v1, 1);
  475. if ($data)
  476. {
  477. foreach ($data as $key => $value)
  478. {
  479. $notif[strtotime($value['create_date']) + 1]['update'] = ['title' => $value['project_tr_title'], 'desc' => "You Approve Revision in " . strtoupper($v1) . " Step", 'url' => "project_proposal/view/$value[project_tr_id]", 'time' => $value['create_date'], 'unread' => ''];
  480. }
  481. }
  482. }
  483. # UPDATE. PCPMD approve complete revision
  484. foreach ($steps_review as $k1 => $v1)
  485. {
  486. $data = get_proposal_logs("(a.user_id_create='$id_user' OR b.user_id_create='$id_user') AND active_role = 'PCPMD'", 'complete to revise ' . $v1, 1);
  487. if ($data)
  488. {
  489. foreach ($data as $key => $value)
  490. {
  491. $notif[strtotime($value['create_date']) + 1]['update'] = ['title' => $value['project_tr_title'], 'desc' => "You Approve Complete Revision in " . strtoupper($v1) . " Step", 'url' => "project_proposal/view/$value[project_tr_id]", 'time' => $value['create_date'], 'unread' => ''];
  492. }
  493. }
  494. }
  495. # UPDATE. PCPMD reject complete revision
  496. foreach ($steps_review as $k1 => $v1)
  497. {
  498. $data = get_proposal_logs("(a.user_id_create='$id_user' OR b.user_id_create='$id_user') AND active_role = 'PCPMD'", 'reject revision ' . $v1, 1);
  499. if ($data)
  500. {
  501. foreach ($data as $key => $value)
  502. {
  503. $notif[strtotime($value['create_date']) + 1]['update'] = ['title' => $value['project_tr_title'], 'desc' => "You Reject Revision in " . strtoupper($v1) . " Step", 'url' => "project_proposal/view/$value[project_tr_id]", 'time' => $value['create_date'], 'unread' => ''];
  504. }
  505. }
  506. }
  507. # TASK. DO request to revision
  508. $where = "(a.user_id_create='$id_user' OR f.struc_org_id='$id_struc_org') AND ref_project_status_code = 'RREV'";
  509. $data = $this->ProjectTr->fetchAll($where);
  510. if ($data)
  511. {
  512. foreach ($data as $key => $value)
  513. {
  514. $notif[strtotime($value['modify_date']) + 1]['task'] = ['title' => $value['project_tr_title'], 'desc' => "DO Request to Revise", 'url' => "project_proposal/view/$value[project_tr_id]", 'time' => $value['modify_date'], 'unread' => ''];
  515. $my_task++;
  516. }
  517. }
  518. # TASK. DO request to finish revision
  519. $where = "(a.user_id_create='$id_user' OR f.struc_org_id='$id_struc_org') AND ref_project_status_code = 'RCR'";
  520. $data = $this->ProjectTr->fetchAll($where);
  521. if ($data)
  522. {
  523. foreach ($data as $key => $value)
  524. {
  525. $notif[strtotime($value['modify_date']) + 1]['task'] = ['title' => $value['project_tr_title'], 'desc' => "DO Request to Complete Revision", 'url' => "project_proposal/view/$value[project_tr_id]", 'time' => $value['modify_date'], 'unread' => ''];
  526. $my_task++;
  527. }
  528. }
  529. /** REVISION */
  530.  
  531. /** INTERVENTION */
  532. # UPDATE. PCPMD request to intervention
  533. $data = get_proposal_logs("(a.user_id_create='$id_user' OR b.user_id_create='$id_user') AND active_role = 'PCPMD'", 'request intervention', 1);
  534. if ($data)
  535. {
  536. foreach ($data as $key => $value)
  537. {
  538. $notif[strtotime($value['create_date']) + 1]['update'] = ['title' => $value['project_tr_title'],
  539. // 'desc' => "$do_username Request to Hold",
  540. 'desc' => "You Request to Intervention", 'url' => "project_proposal/view/$value[project_tr_id]", 'time' => $value['create_date'], 'unread' => ''];
  541. }
  542. }
  543. # UPDATE. PCPMD approve intervention
  544. $data = get_proposal_logs("(a.user_id_create='$id_user' OR b.user_id_create='$id_user') AND active_role = 'PCPMD'", 'approve intervention', 1);
  545. if ($data)
  546. {
  547. foreach ($data as $key => $value)
  548. {
  549. $notif[strtotime($value['create_date']) + 1]['update'] = ['title' => $value['project_tr_title'], 'desc' => "You Approve Intervention", 'url' => "project_proposal/view/$value[project_tr_id]", 'time' => $value['create_date'], 'unread' => ''];
  550. }
  551. }
  552. # UPDATE. PCPMD reject intervention
  553. $data = get_proposal_logs("(a.user_id_create='$id_user' OR b.user_id_create='$id_user') AND active_role = 'PCPMD'", 'reject intervention', 1);
  554. if ($data)
  555. {
  556. foreach ($data as $key => $value)
  557. {
  558. $notif[strtotime($value['create_date']) + 1]['update'] = ['title' => $value['project_tr_title'], 'desc' => "You Reject Intervention", 'url' => "project_proposal/view/$value[project_tr_id]", 'time' => $value['create_date'], 'unread' => ''];
  559. }
  560. }
  561. /** INTERVENTION */
  562.  
  563. /** FINISH */
  564. # UPDATE. DO || PCPMD Finish Step
  565. foreach ($steps_review as $k1 => $v1)
  566. {
  567. $data = get_proposal_logs("(a.user_id_create='$id_user' OR b.user_id_create='$id_user') AND (active_role = 'DO' OR active_role = 'PCPMD')", 'finish ' . $v1, 1);
  568. if ($data)
  569. {
  570. foreach ($data as $key => $value)
  571. {
  572. $do_username = $value['id_auth_user_assign'] == $id_user ? 'You' : getUser($value['id_auth_user_assign']);
  573. $do_username = $value['user_id_create'] == $id_user ? 'You' : getUser($value['user_id_create']);
  574. $notif[strtotime($value['create_date']) + 1]['update'] = ['title' => $value['project_tr_title'], 'desc' => "$do_username Finish Step " . strtoupper($v1) , 'url' => "project_proposal/view/$value[project_tr_id]", 'time' => $value['create_date'], 'unread' => ''];
  575. }
  576. }
  577. }
  578. /** FINISH */
  579.  
  580. # UPDATE. Reject Proposal
  581. $data = $this->ProjectTr->fetchAll('is_complete = 2');
  582. foreach ($data as $key => $value)
  583. {
  584. $username = getUser($value['id_auth_user_reject']);
  585. $notif[strtotime($value['modify_date']) ]['update'] = ['title' => $value['project_tr_title'], 'desc' => "User $username Reject Proposal", 'url' => "pre_proposals/view/$value[project_tr_id]", 'time' => $value['modify_date'], 'unread' => ''];
  586. }
  587. }
  588.  
  589. if ($isDo)
  590. {
  591. # UPDATE. PCPMD assign proposal to DO
  592. $data = get_proposal_logs("(id_auth_user_assign='$id_user' OR struc_org_id_assign='$id_struc_org') AND active_role = 'PCPMD'", 'assign');
  593. if ($data)
  594. {
  595. foreach ($data as $key => $value)
  596. {
  597. $username = getUser($value['user_id_create']);
  598. $do_username = $value['id_auth_user_assign'] == $id_user ? 'You' : getUser($value['id_auth_user_assign']);
  599. $notif[strtotime($value['create_date']) + 1]['update'] = ['title' => $value['project_tr_title'], 'desc' => "$username assign proposal to $do_username", 'url' => "project_proposal/view/$value[project_tr_id]", 'time' => $value['create_date'], 'unread' => ''];
  600. }
  601. }
  602.  
  603. /** HOLD */
  604. # UPDATE. DO request hold to PCPMD
  605. $data = get_proposal_logs("(id_auth_user_assign='$id_user' OR struc_org_id_assign='$id_struc_org') AND active_role = 'DO'", 'request hold');
  606. if ($data)
  607. {
  608. foreach ($data as $key => $value)
  609. {
  610. $do_username = $value['id_auth_user_assign'] == $id_user ? 'You' : getUser($value['id_auth_user_assign']);
  611. $notif[strtotime($value['create_date']) + 1]['update'] = ['title' => $value['project_tr_title'], 'desc' => "$do_username request to hold", 'url' => "project_proposal/view/$value[project_tr_id]", 'time' => $value['create_date'], 'unread' => ''];
  612. }
  613. }
  614. # UPDATE. PCPMD approve hold
  615. $data = get_proposal_logs("(id_auth_user_assign='$id_user' OR struc_org_id_assign='$id_struc_org') AND active_role = 'PCPMD'", 'approve hold');
  616. if ($data)
  617. {
  618. foreach ($data as $key => $value)
  619. {
  620. $notif[strtotime($value['create_date']) + 1]['update'] = ['title' => $value['project_tr_title'], 'desc' => "PCPMD approve your request to hold", 'url' => "project_proposal/view/$value[project_tr_id]", 'time' => $value['create_date'], 'unread' => ''];
  621. }
  622. }
  623. # UPDATE. PCPMD reject hold
  624. $data = get_proposal_logs("(id_auth_user_assign='$id_user' OR struc_org_id_assign='$id_struc_org') AND active_role = 'PCPMD'", 'reject hold');
  625. if ($data)
  626. {
  627. foreach ($data as $key => $value)
  628. {
  629. $notif[strtotime($value['create_date']) + 1]['update'] = ['title' => $value['project_tr_title'], 'desc' => "PCPMD reject your request to hold", 'url' => "project_proposal/view/$value[project_tr_id]", 'time' => $value['create_date'], 'unread' => ''];
  630. }
  631. }
  632. /** HOLD */
  633.  
  634. /** RESUME */
  635. # UPDATE. DO request to resume
  636. $data = get_proposal_logs("(id_auth_user_assign='$id_user' OR struc_org_id_assign='$id_struc_org') AND active_role = 'DO'", 'request resume');
  637. if ($data)
  638. {
  639. foreach ($data as $key => $value)
  640. {
  641. $do_username = $value['id_auth_user_assign'] == $id_user ? 'You' : getUser($value['id_auth_user_assign']);
  642. $notif[strtotime($value['create_date']) + 1]['update'] = ['title' => $value['project_tr_title'], 'desc' => "$do_username Request to resume", 'url' => "project_proposal/view/$value[project_tr_id]", 'time' => $value['create_date'], 'unread' => ''];
  643. }
  644. }
  645. # UPDATE. PCPMD approve resume
  646. $data = get_proposal_logs("(id_auth_user_assign='$id_user' OR struc_org_id_assign='$id_struc_org') AND active_role = 'PCPMD'", 'approve resume');
  647. if ($data)
  648. {
  649. foreach ($data as $key => $value)
  650. {
  651. $notif[strtotime($value['create_date']) + 1]['update'] = ['title' => $value['project_tr_title'], 'desc' => "PCPMD approve your request to resume", 'url' => "project_proposal/view/$value[project_tr_id]", 'time' => $value['create_date'], 'unread' => ''];
  652. }
  653. }
  654. # UPDATE. PCPMD reject resume
  655. $data = get_proposal_logs("(id_auth_user_assign='$id_user' OR struc_org_id_assign='$id_struc_org') AND active_role = 'PCPMD'", 'reject resume');
  656. if ($data)
  657. {
  658. foreach ($data as $key => $value)
  659. {
  660. $notif[strtotime($value['create_date']) + 1]['update'] = ['title' => $value['project_tr_title'], 'desc' => "PCPMD reject your request to resume", 'url' => "project_proposal/view/$value[project_tr_id]", 'time' => $value['create_date'], 'unread' => ''];
  661. }
  662. }
  663. /** RESUME */
  664.  
  665. /** WITHDRAW */
  666. # UPDATE. DO request to withdraw
  667. $data = get_proposal_logs("(id_auth_user_assign='$id_user' OR struc_org_id_assign='$id_struc_org') AND active_role = 'DO'", 'request withdraw');
  668. if ($data)
  669. {
  670. foreach ($data as $key => $value)
  671. {
  672. $do_username = $value['id_auth_user_assign'] == $id_user ? 'You' : getUser($value['id_auth_user_assign']);
  673. $notif[strtotime($value['create_date']) + 1]['update'] = ['title' => $value['project_tr_title'], 'desc' => "$do_username Request to Withdraw", 'url' => "project_proposal/view/$value[project_tr_id]", 'time' => $value['create_date'], 'unread' => ''];
  674. }
  675. }
  676. # UPDATE. PCPMD approve withdraw
  677. $data = get_proposal_logs("(id_auth_user_assign='$id_user' OR struc_org_id_assign='$id_struc_org') AND active_role = 'PCPMD'", 'approve withdraw');
  678. if ($data)
  679. {
  680. foreach ($data as $key => $value)
  681. {
  682. $notif[strtotime($value['create_date']) + 1]['update'] = ['title' => $value['project_tr_title'], 'desc' => "PCPMD approve your request to withdraw", 'url' => "project_proposal/view/$value[project_tr_id]", 'time' => $value['create_date'], 'unread' => ''];
  683. }
  684. }
  685. # UPDATE. PCPMD reject withdraw
  686. $data = get_proposal_logs("(id_auth_user_assign='$id_user' OR struc_org_id_assign='$id_struc_org') AND active_role = 'PCPMD'", 'reject withdraw');
  687. if ($data)
  688. {
  689. foreach ($data as $key => $value)
  690. {
  691. $notif[strtotime($value['create_date']) + 1]['update'] = ['title' => $value['project_tr_title'], 'desc' => "PCPMD reject your request to withdraw", 'url' => "project_proposal/view/$value[project_tr_id]", 'time' => $value['create_date'], 'unread' => ''];
  692. }
  693. }
  694. /** WITHDRAW */
  695.  
  696. /** REVISION */
  697. # UPDATE. DO request to revision
  698. foreach ($steps_review as $k1 => $v1)
  699. {
  700. $data = get_proposal_logs("(id_auth_user_assign='$id_user' OR struc_org_id_assign='$id_struc_org') AND active_role = 'DO'", 'request revision ' . $v1);
  701. if ($data)
  702. {
  703. foreach ($data as $key => $value)
  704. {
  705. $do_username = $value['id_auth_user_assign'] == $id_user ? 'You' : getUser($value['id_auth_user_assign']);
  706. $notif[strtotime($value['create_date']) + 1]['update'] = ['title' => $value['project_tr_title'], 'desc' => "$do_username Request to Revise in " . strtoupper($v1) . " Step", 'url' => "project_proposal/view/$value[project_tr_id]", 'time' => $value['create_date'], 'unread' => ''];
  707. }
  708. }
  709. }
  710. # UPDATE. DO request to complete revision
  711. foreach ($steps_review as $k1 => $v1)
  712. {
  713. $data = get_proposal_logs("(id_auth_user_assign='$id_user' OR struc_org_id_assign='$id_struc_org') AND active_role = 'DO'", 'request complete revision ' . $v1);
  714. if ($data)
  715. {
  716. foreach ($data as $key => $value)
  717. {
  718. $do_username = $value['id_auth_user_assign'] == $id_user ? 'You' : getUser($value['id_auth_user_assign']);
  719. $notif[strtotime($value['create_date']) + 1]['update'] = ['title' => $value['project_tr_title'], 'desc' => "$do_username Request to Complete Revision in " . strtoupper($v1) . " Step", 'url' => "project_proposal/view/$value[project_tr_id]", 'time' => $value['create_date'], 'unread' => ''];
  720. }
  721. }
  722. }
  723. # UPDATE. PCPMD approve to complete revision
  724. foreach ($steps_review as $k1 => $v1)
  725. {
  726. $data = get_proposal_logs("(a.id_auth_user_assign='$id_user' OR a.struc_org_id_assign='$id_struc_org') AND active_role = 'PCPMD'", 'approve revision ' . $v1);
  727. if ($data)
  728. {
  729. foreach ($data as $key => $value)
  730. {
  731. $do_username = $value['id_auth_user_assign'] == $id_user ? 'You' : getUser($value['id_auth_user_assign']);
  732. $notif[strtotime($value['create_date']) + 1]['update'] = ['title' => $value['project_tr_title'], 'desc' => "PCPMD approve your request to revise in " . strtoupper($v1) . " step", 'url' => "project_proposal/view/$value[project_tr_id]", 'time' => $value['create_date'], 'unread' => ''];
  733. }
  734. }
  735. }
  736. # UPDATE. PCPMD approve complete revision
  737. foreach ($steps_review as $k1 => $v1)
  738. {
  739. $data = get_proposal_logs("(a.id_auth_user_assign='$id_user' OR a.struc_org_id_assign='$id_struc_org') AND active_role = 'PCPMD'", 'complete to revise ' . $v1, 1);
  740. if ($data)
  741. {
  742. foreach ($data as $key => $value)
  743. {
  744. $notif[strtotime($value['create_date']) + 1]['update'] = ['title' => $value['project_tr_title'], 'desc' => "PCPMD Approve Complete Revision in " . strtoupper($v1) . " Step", 'url' => "project_proposal/view/$value[project_tr_id]", 'time' => $value['create_date'], 'unread' => ''];
  745. }
  746. }
  747. }
  748.  
  749. // # UPDATE. PCPMD approve withdraw
  750. // $data = get_proposal_logs("(id_auth_user_assign='$id_user' OR struc_org_id_assign='$id_struc_org') AND active_role = 'PCPMD'",'approve withdraw');
  751. // if($data){
  752. // foreach ($data as $key => $value) {
  753. // $notif[strtotime($value['create_date'])+1]['update'] = [
  754. // 'title' => $value['project_tr_title'],
  755. // 'desc' => "PCPMD approve your withdraw request",
  756. // 'url' => "project_proposal/view/$value[project_tr_id]",
  757. // 'time' => $value['create_date'],
  758. // 'unread' => ''
  759. // ];
  760. // }
  761. // }
  762. // # UPDATE. PCPMD reject withdraw
  763. // $data = get_proposal_logs("(id_auth_user_assign='$id_user' OR struc_org_id_assign='$id_struc_org') AND active_role = 'PCPMD'",'reject withdraw');
  764. // if($data){
  765. // foreach ($data as $key => $value) {
  766. // $notif[strtotime($value['create_date'])+1]['update'] = [
  767. // 'title' => $value['project_tr_title'],
  768. // 'desc' => "PCPMD reject your withdraw request",
  769. // 'url' => "project_proposal/view/$value[project_tr_id]",
  770. // 'time' => $value['create_date'],
  771. // 'unread' => ''
  772. // ];
  773. // }
  774. // }
  775.  
  776. /** REVISION */
  777.  
  778. /** INTERVENTION */
  779. # UPDATE. DO request intervention to PCPMD
  780. $data = get_proposal_logs("(id_auth_user_assign='$id_user' OR struc_org_id_assign='$id_struc_org') AND active_role = 'DO'", 'request intervention');
  781. if ($data)
  782. {
  783. foreach ($data as $key => $value)
  784. {
  785. $do_username = $value['id_auth_user_assign'] == $id_user ? 'You' : getUser($value['id_auth_user_assign']);
  786. $notif[strtotime($value['create_date']) + 1]['update'] = ['title' => $value['project_tr_title'], 'desc' => "$do_username request to intervention", 'url' => "project_proposal/view/$value[project_tr_id]", 'time' => $value['create_date'], 'unread' => ''];
  787. }
  788. }
  789. # UPDATE. PCPMD approve intervention
  790. $data = get_proposal_logs("(id_auth_user_assign='$id_user' OR struc_org_id_assign='$id_struc_org') AND active_role = 'PCPMD'", 'approve intervention');
  791. if ($data)
  792. {
  793. foreach ($data as $key => $value)
  794. {
  795. $notif[strtotime($value['create_date']) + 1]['update'] = ['title' => $value['project_tr_title'], 'desc' => "PCPMD approve your request to intervention", 'url' => "project_proposal/view/$value[project_tr_id]", 'time' => $value['create_date'], 'unread' => ''];
  796. }
  797. }
  798. # UPDATE. PCPMD reject intervention
  799. $data = get_proposal_logs("(id_auth_user_assign='$id_user' OR struc_org_id_assign='$id_struc_org') AND active_role = 'PCPMD'", 'reject intervention');
  800. if ($data)
  801. {
  802. foreach ($data as $key => $value)
  803. {
  804. $notif[strtotime($value['create_date']) + 1]['update'] = ['title' => $value['project_tr_title'], 'desc' => "PCPMD reject your request to intervention", 'url' => "project_proposal/view/$value[project_tr_id]", 'time' => $value['create_date'], 'unread' => ''];
  805. }
  806. }
  807. /** INTERVENTION */
  808.  
  809. /** FINISH */
  810. # UPDATE. DO || PCPMD Finish Step
  811. foreach ($steps_review as $k1 => $v1)
  812. {
  813. $data = get_proposal_logs("(id_auth_user_assign='$id_user' OR struc_org_id_assign='$id_struc_org') AND (active_role = 'DO' OR active_role = 'PCPMD')", 'finish ' . $v1);
  814. if ($data)
  815. {
  816. foreach ($data as $key => $value)
  817. {
  818. $do_username = $value['id_auth_user_assign'] == $id_user ? 'You' : getUser($value['id_auth_user_assign']);
  819. $do_username = $value['user_id_create'] == $id_user ? 'You' : getUser($value['user_id_create']);
  820. $notif[strtotime($value['create_date']) + 1]['update'] = ['title' => $value['project_tr_title'], 'desc' => "$do_username Finish Step " . strtoupper($v1) , 'url' => "project_proposal/view/$value[project_tr_id]", 'time' => $value['create_date'], 'unread' => ''];
  821. }
  822. }
  823. }
  824. /** FINISH */
  825.  
  826. #3. Withdraw UPDATE(DO)
  827. # UPDATE. PCPMD update status to Withdraw
  828. $where = "ref_status_approval_id IN(1,2) and a.is_read_do is NULL";
  829. $data = $this
  830. ->ProjectReviewWithdraw
  831. ->fetchAll($where);
  832. foreach ($data as $key => $value)
  833. {
  834. $time = $value['modify_date'] ? $value['modify_date'] : $value['create_date'];
  835. $notif[strtotime($time) ]['update'] = ['title' => $value['project_tr_title'], 'desc' => "PCPMD $value[status] Withdraw", 'url' => "project_proposal/view/$value[project_tr_id]", 'time' => $time, 'unread' => ''];
  836. }
  837.  
  838. #6. PCPMD approve / reject : hold : notif update to DO
  839. $where = "ref_status_approval_id IN(1,2) and a.is_read_do is NULL AND id_auth_user_assign = $id_user";
  840. $data = $this->ProjectReviewHold->fetchAll($where);
  841. foreach ($data as $key => $value)
  842. {
  843. $time = $value['modify_date'] ? $value['modify_date'] : $value['create_date'];
  844. $notif[strtotime($time) ]['update'] = ['title' => $value['project_tr_title'], 'desc' => "PCPMD $value[status] Hold", 'url' => "project_proposal/view/$value[project_tr_id]", 'time' => $time, 'unread' => ''];
  845. }
  846.  
  847. // #12. PCPMD Reject Resume : notif update to DO
  848. // $data = $this->ProjectReviewHold->fetchAll("status = 2 and a.is_read_do = -1");
  849. // foreach ($data as $key => $value){
  850. // $time = $value['modify_date'] ? $value['modify_date'] : $value['create_date'];
  851. // $notif[strtotime($time)]['update'] = [
  852. // 'title' => $value['project_tr_title'],
  853. // 'desc' => "PCPMD Reject Request Resume",
  854. // 'url' => "project_proposal/view/$value[project_tr_id]",
  855. // 'time' => $time,
  856. // 'unread' => ''
  857. // ];
  858. // }
  859. #13. PCPMD Approve Resume : notif update to DO
  860. $data = $this->ProjectReviewHold->fetchAll("status = 6 and a.is_read_do = 0");
  861. foreach ($data as $key => $value)
  862. {
  863. $time = $value['modify_date'] ? $value['modify_date'] : $value['create_date'];
  864. $time = $value['modify_date'] ? $value['modify_date'] : $value['create_date'];
  865. $notif[strtotime($time) ]['update'] = ['title' => $value['project_tr_title'], 'desc' => "PCPMD Approve Request Resume", 'url' => "project_proposal/view/$value[project_tr_id]", 'time' => $time, 'unread' => ''];
  866. }
  867. }
  868.  
  869. if ($isPCPMD || $isDo)
  870. {
  871. #4. Intervention UPDATE(DO) & TASK(PCPMD)
  872. $where = $isPCPMD ? "id_auth_user_approve is NULL" : "ref_status_approval_id IN(1,2) and a.is_read_do is NULL";
  873. $data = $this->ProjectReviewIntervention->fetchAll($where);
  874. foreach ($data as $key => $value)
  875. {
  876. $title = $value['project_tr_title'];
  877. $desc = $isPCPMD ? "DO Request to Intervention" : "PCPMD $value[status] Intervention";
  878. $url = "project_proposal/view/$value[project_tr_id]";
  879. $type = $isDo ? 'update' : 'task'; //update utk DO (jika request di setujui / di tolak) / task utk PCPMD utk follow up request
  880. if ($type == 'task')
  881. {
  882. $my_task++;
  883. }
  884. $time = $value['modify_date'] ? $value['modify_date'] : $value['create_date'];
  885. if ($isDo || $isPCPMD)
  886. {
  887. $notif[strtotime($time) ][$type] = array(
  888. 'title' => $title,
  889. 'desc' => $desc,
  890. 'url' => $url,
  891. 'time' => $time,
  892. 'unread' => ''
  893. );
  894. }
  895. }
  896.  
  897. #10. Review Project
  898. $this->load->model('ProjectReviewTrans');
  899. $where = '';
  900. if ($isDo)
  901. {
  902. $where = "AND id_auth_user_assign = $id_user";
  903. }
  904. $data = $this->ProjectReviewTrans->fetchAll("project_review_trans_status_id = 1 $where");
  905. foreach ($data as $key => $value)
  906. {
  907. $code = $value['review_position'];
  908. if ((($code == 'PAM' || $code == 'SB') && $isPCPMD) || (($code == 'PAC' || $code == 'CPR' || $code == 'DP') && $isDo))
  909. {
  910. $type = 'update';
  911. }
  912. else if (($code == 'PAM' || $code == 'SB') && $isDo || (($code == 'PAC' || $code == 'CPR' || $code == 'DP') && $isPCPMD))
  913. {
  914. $type = 'task';
  915. }
  916. if ($type == 'task')
  917. {
  918. $my_task++;
  919. }
  920. $title = $value['project_tr_title'];
  921. $desc = "Proposal Review : $code";
  922. $url = 'project_proposal/view/'.$value['project_tr_id'];
  923. $time = $value['modify_date'] ? $value['modify_date'] : $value['create_date'];
  924. $notif[strtotime($time) ][$type] = array(
  925. 'title' => $title,
  926. 'desc' => $desc,
  927. 'url' => $url,
  928. 'time' => $time,
  929. 'unread' => ''
  930. );
  931. }
  932. }
  933.  
  934. //create html
  935. $htmla = '<div class="all-notif-content notif-cnt">';
  936. $htmlu = '<div class="update-notif-content notif-cnt hide">';
  937. $htmlt = '<div class="task-notif-content notif-cnt hide">';
  938.  
  939. $totalUpdate = $totalTask = $totalAll = $totalNotif = 0;
  940. krsort($notif); //sort by newest
  941. if ($return)
  942. {
  943. return $notif;
  944. }
  945.  
  946. foreach ($notif as $key => $value)
  947. {
  948. if ($totalUpdate < 20 || $totalTask < 20)
  949. {
  950. $val = isset($value['update']) ? $value['update'] : $value['task'];
  951. $bg = isset($value['update']) ? 'blue' : 'orange';
  952. ++$totalAll;
  953. $htmla .= $this->notif_html($val['title'], $val['desc'], $val['url'], $totalAll, $bg, $val['time'], $val['unread']);
  954. if ($bg == 'blue')
  955. { // update
  956. ++$totalUpdate; //total yg dihitung hanya task aja
  957. $htmlu .= $this->notif_html($val['title'], $val['desc'], $val['url'], $totalUpdate, $bg, $val['time'], $val['unread']);
  958. }
  959. if ($bg == 'orange')
  960. { //task
  961. ++$totalTask;
  962. $htmlt .= $this->notif_html($val['title'], $val['desc'], $val['url'], $totalTask, $bg, $val['time'], $val['unread']);
  963. }
  964. }
  965. }
  966.  
  967. $htmla .= '</div>';
  968. $htmlu .= '</div>';
  969. $htmlt .= '</div>';
  970. //end pcpmd hold
  971. //do finish review
  972. //pcpmd finish review
  973. $seeAll = '<div id="see-more-notif"><a href="' . $this->data['base_url'] . 'home/notifications">See All Notifications</a></div>';
  974.  
  975. $html = $htmla . $htmlu . $htmlt . $seeAll;
  976. //total notif seharusnya nanti dibuang kalo format lama udah di ubah ke format baru
  977. $ret['totalAll'] = $totalAll + $totalNotif;
  978. //total notif seharusnya nanti dibuang kalo format lama udah di ubah ke format baru
  979. $ret['totalTask'] = $my_task == 0 ? '' : $my_task;
  980. $ret['totalUpdate'] = $totalUpdate;
  981. $ret['html'] = $html;
  982. echo json_encode($ret);
  983. exit;
  984. }
  985.  
  986. function notif_html($title = '', $desc = '', $url = '', $n = '', $bg = 'orange', $time = '', $unread = '')
  987. {
  988. return "<div class='media $unread'>" . "<a href='" . $this->data['base_url'] . $url . "'>" . "<div class='media-left'><i class='fa media-object bg-$bg'>" . $n . "</i></div>" . "<div class='media-body'>" . "<h6 class='media-heading'>$desc</h6>" . "<div class='shorcut-text' title='$title'>$title</div>" . "<small>" . time_elapsed_string($time) . "</small>" . "</div>" . "</a>" . "</div>";
  989. }
  990.  
  991. function notifications()
  992. {
  993. $post = $this->input->post();
  994. $notif = $this->notif(1);
  995. $htmla = $htmlu = $htmlt = '';
  996. if ($notif)
  997. {
  998. foreach ($notif as $key => $value)
  999. {
  1000. $val = $value['update'] ? $value['update'] : $value['task'];
  1001. $bg = $value['update'] ? 'blue' : 'orange';
  1002. ++$totalAll;
  1003. $htmla .= $this->notif_html($val['title'], $val['desc'], $val['url'], $totalAll, $bg, $val['time'], $val['unread']);
  1004. if ($bg == 'blue')
  1005. { // update
  1006. ++$totalUpdate; //total yg dihitung hanya task aja
  1007. $htmlu .= $this->notif_html($val['title'], $val['desc'], $val['url'], $totalUpdate, $bg, $val['time'], $val['unread']);
  1008. }
  1009. if ($bg == 'orange')
  1010. { //task
  1011. ++$totalTask;
  1012. $htmlt .= $this->notif_html($val['title'], $val['desc'], $val['url'], $totalTask, $bg, $val['time'], $val['unread']);
  1013. }
  1014. }
  1015. }
  1016. $data['notification'] = $htmla . $htmlu . $htmlt;
  1017. $data['page_title'] = "Your Notifications";
  1018. render('home/notifications', $data, 'main-layout');
  1019. }
  1020.  
  1021. function detail_project($project_tr_id, $tab)
  1022. {
  1023. if ($tab == 'log')
  1024. {
  1025. $this->load->model('ProjectTrLog');
  1026. $data['is_pcpmd'] = isGroup('PCPMD') ? '' : 'hide';
  1027. $data['log_project'] = $this->ProjectTrLog->fetchAll(['project_tr_id' => $project_tr_id]);
  1028. $data['project_tr_id'] = $project_tr_id;
  1029. }
  1030. else if ($tab == 'classifications')
  1031. {
  1032. $data = getSingleDataApi('project_tr', array(
  1033. 'project_tr_id' => $project_tr_id
  1034. ));
  1035.  
  1036. ###### START SINGLE/CROSS SECTOR ######
  1037. $data['singleChecked'] = ($data['is_cross_sector'] == 1) ? '' : 'Single Sector';
  1038. $data['crossChecked'] = ($data['is_cross_sector'] == 1) ? 'Cross Sector' : '';
  1039. ###### END SINGLE/CROSS SECTOR ######
  1040.  
  1041.  
  1042. ###### START RECURRING PROJECT ######
  1043. $data['recurring'] = $data['is_recurring_project'] == 1 ? 'This proposal is recurring to project with <b>Project ID: ' . $data["project_id"] . '</b>' : 'This proposal is new project.';
  1044. ###### END RECURRING PROJECT ######
  1045.  
  1046.  
  1047. ###### START SECTORAL BODY ######
  1048. $get_data = getSingleDataApi('sectoral_body_tr', array(
  1049. 'project_trx_id' => $project_tr_id,
  1050. 'is_main_sectoral_body' => 1
  1051. ));
  1052. $sectoral_body = getSingleDataApi('sectoral_body_mst', array(
  1053. 'sectoral_body_id' => $get_data['sectoral_body_id']
  1054. ));
  1055. $data['sectoral_body_data'] = (empty($sectoral_body)) ? 'Data empty' : $sectoral_body['sectoral_body_title'];
  1056. ###### END SECTORAL BODY ######
  1057.  
  1058.  
  1059. ###### START SECTORAL BODY WORKING GROUP ######
  1060. $get_data = getSingleDataApi('sectoral_body_wg_mst', array(
  1061. 'sectoral_body_wg_id' => $data['project_supporting_sectoral_body_id']
  1062. ));
  1063. $data['sectoral_body_working_group'] = (empty($get_data)) ? 'Data empty' : $get_data['sectoral_body_wg_title'];
  1064. ###### END SECTORAL BODY WORKING GROUP ######
  1065.  
  1066.  
  1067. ###### START SUPPORT SECTORAL ######
  1068. $get_data = getDataApi('sectoral_body_tr', array(
  1069. 'project_trx_id' => $project_tr_id,
  1070. 'is_main_sectoral_body' => 0
  1071. ));
  1072. $data['sectoral_supporting_list'] = [];
  1073. if (!empty($get_data))
  1074. { // data does
  1075. foreach ($get_data as $key => $value)
  1076. {
  1077. $list_sectoral_body = getSingleDataApi('sectoral_body_mst', array(
  1078. 'sectoral_body_id' => $value['sectoral_body_id']
  1079. ));
  1080. $sectoral_body_title = isset($list_sectoral_body['sectoral_body_title'])?$list_sectoral_body['sectoral_body_title']:'';
  1081. $data['sectoral_supporting_list'][$key]['list_sectoral_template'] = '<tr><td>' . $sectoral_body_title . '</td></tr></div>';
  1082. }
  1083. }
  1084.  
  1085.  
  1086. ###### START PILLAR ######
  1087. $get_pillar = array(
  1088. 'sort_field' => 'is_main_pillar',
  1089. 'sort_type' => 'desc',
  1090. 'is_single_table_pillar_relation' => 1,
  1091. 'table_name' => 'pillar_tr'
  1092. );
  1093. $get_pillar['where'] = ['project_trx_id' => $project_tr_id];
  1094. $get_data = $this->asec_giz_api_library->call('master_data/get_data', $get_pillar);
  1095. $main_pillar = $other_pillar = [];
  1096. if (!isset($get_data['message'])) { // pillar does
  1097. foreach ($get_data as $key => $value) {
  1098. if ($value['is_main_pillar'] == 1) {
  1099. array_push($main_pillar,$value);
  1100. } else {
  1101. array_push($other_pillar,$value);
  1102. }
  1103. }
  1104. }
  1105. $data['main_pillar'] = $main_pillar;
  1106. $data['other_pillar'] = $other_pillar;
  1107. ###### END PILLAR ######
  1108.  
  1109.  
  1110. ###### START INTERVENTION ######
  1111. $get_data = getSingleDataApi('type_intervention_mst', array(
  1112. 'type_intervention_id' => $data['type_intervention_id']
  1113. ));
  1114. $data['list_interventions'] = isset($get_data['type_intervention_title'])?$get_data['type_intervention_title']:'';
  1115. ###### END INTERVENTION ######
  1116.  
  1117.  
  1118. ###### START NATURE CORPORATION ######
  1119. $get_data = getSingleDataApi('type_nature_corporation_mst', array(
  1120. 'type_nature_corporation_id' => $data['type_nature_corporation_id']
  1121. ));
  1122. $data['list_nature_corporate'] = isset($get_data['type_nature_corporation_title'])?$get_data['type_nature_corporation_title']:'';
  1123. ###### END NATURE CORPORATION ######
  1124. }
  1125. else if ($tab == 'durations')
  1126. {
  1127. $data = getSingleDataApi('project_tr', array(
  1128. 'project_tr_id' => $project_tr_id
  1129. ));
  1130.  
  1131. $data['project_completion_date'] = date("Y-m-d", strtotime($data['project_completion_date']));
  1132. $data['project_commancement_date'] = date("Y-m-d", strtotime($data['project_commancement_date']));
  1133.  
  1134. $get_data = getSingleDataApi('type_project_durations_mst', [
  1135. 'type_project_durations_id' => $data['type_project_durations_id']
  1136. ]);
  1137. $data['project_duration'] = $get_data['type_project_durations_title'];
  1138. }
  1139. else if ($tab == 'participating')
  1140. {
  1141. $data = getSingleDataApi('project_tr', ['project_tr_id' => $project_tr_id]);
  1142.  
  1143. $data['reason_if_none_project_participating'] = '';
  1144. $data['country'] = [];
  1145.  
  1146. ###### START PROJECT PARTICIPATING ######
  1147. if ($data['project_participating'] == 11)
  1148. { // OTHERS
  1149. $data['country_name'] = 'Others';
  1150. $data['reason_if_none_project_participating'] = $data['reason_if_none_project_participating'];
  1151. }
  1152. if ($data['project_participating'] == 10)
  1153. { // CLMV
  1154. $data['country_name'] = 'CLMV';
  1155. }
  1156. if ($data['project_participating'] == 9)
  1157. { // ASEAN PLUS THREE
  1158. $data['country_name'] = 'ASEAN Plus Three';
  1159. }
  1160. if ($data['project_participating'] == 7)
  1161. { // SINGLE
  1162. $data['country_name'] = 'Single Country';
  1163. }
  1164. if ($data['project_participating'] == 6)
  1165. { // ASEAN
  1166. $data['country_name'] = 'ASEAN';
  1167. }
  1168.  
  1169. $params['where'] = ['project_trx_id' => $project_tr_id];
  1170. $params['table_name'] = 'affiliation_tr';
  1171. $params['is_single_table'] = 1;
  1172. $countries = $this->asec_giz_api_library->call('project_transaction/get_data_affiliation_trx', $params);
  1173. if (!isset($countries['status'])) {
  1174. $name = '';
  1175. foreach ($countries as $key => $value) {
  1176. // $name .= ;
  1177. $country[] = $value['country_name'];
  1178. }
  1179. $data['additional_country'] = $country;
  1180. }
  1181.  
  1182. $extraAff['select'] = "a.*, b.country_name as country_name";
  1183. $extraAff['table_join'] = ['country_mst b'];
  1184. $extraAff['type_join'] = ['left'];
  1185. $extraAff['where_join'] = ['a.country_id = b.country_id AND b.is_delete = 0'];
  1186. $countries = getDataApi('affiliation_tr', ['project_trx_id' => $project_tr_id], $extraAff);
  1187.  
  1188. $country = '';
  1189. if ($countries) {
  1190. $countries = getDataApi('affiliation_tr', ['project_trx_id' => $project_tr_id]);
  1191. foreach ($countries as $key => $value)
  1192. {
  1193. if (isset($value['country_name'])) {
  1194. $country .= ',' . $value['country_name'];
  1195. }
  1196. }
  1197. }
  1198.  
  1199. // $params = array(
  1200. // 'table' => 'affiliation_mst',
  1201. // 'id' => 'affiliation_id',
  1202. // 'name' => 'affiliation_name',
  1203. // "title" => "Select Affiliation",
  1204. // 'selected' => $data['project_participating'],
  1205. // 'where' => 'is_delete=0',
  1206. // 'order' => 'create_date'
  1207. // );
  1208. // $data['list_affiliation'] = selectlistApi($params);
  1209. }
  1210. else if ($tab == 'proponent-org')
  1211. {
  1212. ###### PROPONENT AND CONTACT ORGANIZATION ######
  1213. $get_data = getDataApi('proponent_org_tr', array(
  1214. 'project_trx_id' => $project_tr_id,
  1215. 'is_agency' => 0,
  1216. 'is_proponent' => 1
  1217. ));
  1218. $dataProp[] = default_variabel($tab);
  1219.  
  1220. if (!empty($get_data))
  1221. {
  1222. $n = 1;
  1223. foreach ($get_data as $key => $value)
  1224. {
  1225. $params = array(
  1226. 'table_name' => 'proponent_org_mst',
  1227. 'proponent_org_id' => $value['proponent_org_id'],
  1228. 'is_single_table' => 1
  1229. );
  1230. // $params['debug_query'] = 1;
  1231. // debug_api();
  1232. $proponent_org = $this->asec_giz_api_library->call('project_transaction/get_data_proponent_org', $params);
  1233. if (!isset($proponent_org['message'])) {
  1234. $country_name = getSingleDataApi('country_mst', ['country_id' => $proponent_org['country_id']]);
  1235. $dataProp[$key] = [
  1236. 'no' => $n,
  1237. 'proponent_org_title' => $proponent_org['proponent_org_title'],
  1238. 'proponent_org_email' => $proponent_org['proponent_org_email'],
  1239. 'proponent_org_email_alt' => $proponent_org['proponent_org_email_alt'],
  1240. 'proponent_org_address' => $proponent_org['proponent_org_address'],
  1241. 'proponent_name' => $proponent_org['proponent_name'],
  1242. 'proponent_email' => $proponent_org['proponent_email'],
  1243. 'proponent_address' => $proponent_org['proponent_address'],
  1244. 'proponent_person_note' => $proponent_org['proponent_person_note'],
  1245. 'country_name' => $country_name['country_name']
  1246. ];
  1247. $n++;
  1248. }
  1249. }
  1250. }
  1251. $data['proponent_data'] = $dataProp;
  1252. }
  1253. else if ($tab == 'agency')
  1254. {
  1255. ###### PROPONENT AGENCY AND CONTACT ORGANIZATION ######
  1256. $get_data = getDataApi('proponent_org_tr', array(
  1257. 'project_trx_id' => $project_tr_id,
  1258. 'is_agency' => 1,
  1259. 'is_proponent' => 0
  1260. ));
  1261. $dataAgency[] = default_variabel($tab);
  1262. if (!empty($get_data))
  1263. {
  1264. $n = 1;
  1265. foreach ($get_data as $key => $value)
  1266. {
  1267. $params = array(
  1268. 'table_name' => 'proponent_org_mst',
  1269. 'proponent_org_id' => $value['proponent_org_id'],
  1270. 'is_single_table' => 1
  1271. );
  1272. $proponent_agency = $this->asec_giz_api_library->call('project_transaction/get_data_proponent_org', $params);
  1273.  
  1274. if (!isset($proponent_agency['message'])) {
  1275. $country_name = getSingleDataApi('country_mst', ['country_id' => $proponent_agency['country_id']]);
  1276. $dataAgency[$key] = [
  1277. 'no' => $n,
  1278. 'proponent_agency_title' => $proponent_agency['proponent_org_title'],
  1279. 'proponent_agency_email' => $proponent_agency['proponent_org_email'],
  1280. 'proponent_agency_email_alt' => $proponent_agency['proponent_org_email_alt'],
  1281. 'proponent_agency_address' => $proponent_agency['proponent_org_address'],
  1282. 'proponent_agency_contact_name' => $proponent_agency['proponent_name'],
  1283. 'proponent_agency_contact_email' => $proponent_agency['proponent_email'],
  1284. 'proponent_agency_contact_address' => $proponent_agency['proponent_address'],
  1285. 'proponent_agency_contact_person_note' => $proponent_agency['proponent_person_note'],
  1286. 'proponent_agency_contact_country_name' => $country_name['country_name'],
  1287. ];
  1288. $n++;
  1289. }
  1290. }
  1291. }
  1292. $data['agency_data'] = $dataAgency;
  1293. }
  1294. else if ($tab == 'attachments')
  1295. {
  1296. $data = [];
  1297. ###### FILE UPLOAD ######
  1298. $params['is_single_table'] = 1;
  1299. $params['where'] = ['project_trx_id' => $project_tr_id];
  1300. $params['table_name'] = 'proposal_file_upload_tr';
  1301. $get_data = $this->asec_giz_api_library->call('project_transaction/get_data_files_tr', $params);
  1302. if (!isset($get_data['message']))
  1303. {
  1304. $data = getSingleDataApi('project_tr', ['project_tr_id' => $project_tr_id]);
  1305. foreach ($get_data as $key => $value)
  1306. {
  1307. $data['upload'][$key]['file_name'] = $value['file_name'];
  1308. $data['upload'][$key]['category_name'] = $value['file_category_name'];
  1309. $data['upload'][$key]['url_download'] = 'proposal-id/' . $data["proposal_temp_id"] . "/" . $value['file_name'];
  1310. }
  1311. }
  1312.  
  1313. ## new feature, lampiran2
  1314. # Added 27 August 2021
  1315.  
  1316. // revised
  1317. $extra["table_join"] = ["project_review_trans_finish b","ref_project_review c"];
  1318. $extra["where_join"] = ["b.project_review_trans_id = a.id","a.ref_project_review_id = c.id"];
  1319. $extra["select"] = "a.*, b.files as files, c.name as step_review";
  1320. $data_file_revised = getDataApi("project_review_trans", "project_tr_id = '$project_tr_id' AND project_review_trans_status_id = 4", $extra);
  1321. $files = [];
  1322. if (isset($data_file_revised) && !empty($data_file_revised)) {
  1323. foreach ($data_file_revised as $key => $value) {
  1324. $dataLampiran = [];
  1325. if (!empty($value['files'])) {
  1326. $lampiran = json_decode($value['files'],1);
  1327. foreach ($lampiran as $keyLampiran => $valueLampiran) {
  1328. $category = getSingleDataApi("files_category_mst", "files_category_mst_id = $valueLampiran[category]");
  1329. $dataLampiran[] = [
  1330. 'file_name' => $valueLampiran['name'],
  1331. 'category_name' => isset($category['files_category_name'])?$category['files_category_name']:'',
  1332. 'url_download' => 'review/'.$project_tr_id.'/'.$value['step_review'].'/'.$valueLampiran['name']
  1333. ];
  1334. }
  1335. }
  1336. $files[$value['step_review']] = $dataLampiran;
  1337. }
  1338. $data["revised_file_pcpmd"] = $files;
  1339. }
  1340.  
  1341. // hold
  1342. $data_file_hold = getSingleDataApi("project_tr_review_hold", "project_tr_id = $project_tr_id");
  1343. $files = [];
  1344. if (isset($data_file_hold["files"]) && !empty($data_file_hold['files'])) {
  1345. $files = json_decode($data_file_hold["files"], true);
  1346. foreach ($files as $key => $value) {
  1347. $category = getSingleDataApi("files_category_mst", "files_category_mst_id = $value[category]");
  1348. $files[$key]["file_name"] = $value["name"];
  1349. $files[$key]["category_name"] = $category["files_category_name"];
  1350. $files[$key]["url_download"] = 'review/'.$project_tr_id."/HOLD/PCPMD/".$value["name"];
  1351. // $files[$key]["url_download"] = 'https://project.asean.org/proposal-doc/migrasi/review/'.$project_tr_id."/HOLD/PCPMD/".$value["name"];
  1352. }
  1353. $data["hold_file_pcpmd"] = $files;
  1354. }
  1355. $files = [];
  1356. if (isset($data_file_hold["files_do"]) && !empty($data_file_hold['files_do'])) {
  1357. $files = json_decode($data_file_hold["files_do"], true);
  1358. foreach ($files as $key => $value) {
  1359. $category = getSingleDataApi("files_category_mst", "files_category_mst_id = $value[category]");
  1360. $files[$key]["file_name"] = $value["name"];
  1361. $files[$key]["category_name"] = $category["files_category_name"];
  1362. $files[$key]["url_download"] = 'review/'.$project_tr_id."/HOLD/DO/".$value["name"];
  1363. // $files[$key]["url_download"] = 'https://project.asean.org/proposal-doc/migrasi/review/'.$project_tr_id."/HOLD/DO/".$value["name"];
  1364. }
  1365. $data["hold_file_do"] = $files;
  1366. }
  1367.  
  1368. // withdraw
  1369. $data_withdraw_file = getSingleDataApi("project_review_withdraw", "project_tr_id = $project_tr_id");
  1370. $files = [];
  1371. if (isset($data_withdraw_file["files"]) && !empty($data_withdraw_file['files'])) {
  1372. $files = json_decode($data_withdraw_file["files"], true);
  1373. foreach ($files as $key => $value) {
  1374. $category = getSingleDataApi("files_category_mst", "files_category_mst_id = $value[category]");
  1375. $files[$key]["file_name"] = $value["name"];
  1376. $files[$key]["category_name"] = $category["files_category_name"];
  1377. $files[$key]["url_download"] = 'review/'.$project_tr_id."/WITHDRAW/PCPMD/".$value["name"];
  1378. // $files[$key]["url_download"] = 'https://project.asean.org/proposal-doc/migrasi/review/'.$project_tr_id."/WITHDRAW/PCPMD/".$value["name"];
  1379. }
  1380. $data["withdraw_file_pcpmd"] = $files;
  1381. }
  1382. $files = [];
  1383. if (isset($data_withdraw_file["files_do"]) && !empty($data_withdraw_file['files_do'])) {
  1384. $files = json_decode($data_withdraw_file["files_do"], true);
  1385. foreach ($files as $key => $value) {
  1386. $category = getSingleDataApi("files_category_mst", "files_category_mst_id = $value[category]");
  1387. $files[$key]["file_name"] = $value["name"];
  1388. $files[$key]["category_name"] = $category["files_category_name"];
  1389. $files[$key]["url_download"] = 'review/'.$project_tr_id."/WITHDRAW/DO/".$value["name"];
  1390. // $files[$key]["url_download"] = 'https://project.asean.org/proposal-doc/migrasi/review/'.$project_tr_id."/WITHDRAW/DO/".$value["name"];
  1391. }
  1392. $data["withdraw_file_do"] = $files;
  1393. }
  1394.  
  1395. // intervention
  1396. $data_intervention_file = getSingleDataApi("project_review_intervention", "project_tr_id = $project_tr_id");
  1397. $files = [];
  1398. if (isset($data_intervention_file["files"]) && !empty($data_intervention_file['files'])) {
  1399. $files = json_decode($data_intervention_file["files"], true);
  1400. foreach ($files as $key => $value) {
  1401. $category = getSingleDataApi("files_category_mst", "files_category_mst_id = $value[category]");
  1402. $files[$key]["file_name"] = $value["name"];
  1403. $files[$key]["category_name"] = $category["files_category_name"];
  1404. $files[$key]["url_download"] = 'review/'.$project_tr_id."/INTERVENTION/PCPMD/".$value["name"];
  1405. // $files[$key]["url_download"] = 'https://project.asean.org/proposal-doc/migrasi/review/'.$project_tr_id."/INTERVENTION/PCPMD/".$value["name"];
  1406. }
  1407. $data["intervention_file_pcpmd"] = $files;
  1408. }
  1409. $files = [];
  1410. if (isset($data_intervention_file["files_do"]) && !empty($data_intervention_file['files_do'])) {
  1411. $files = json_decode($data_intervention_file["files_do"], true);
  1412. foreach ($files as $key => $value) {
  1413. $category = getSingleDataApi("files_category_mst", "files_category_mst_id = $value[category]");
  1414. $files[$key]["file_name"] = $value["name"];
  1415. $files[$key]["category_name"] = $category["files_category_name"];
  1416. $files[$key]["url_download"] = 'review/'.$project_tr_id."/INTERVENTION/DO/".$value["name"];
  1417. // $files[$key]["url_download"] = 'https://project.asean.org/proposal-doc/migrasi/review/'.$project_tr_id."/INTERVENTION/DO/".$value["name"];
  1418. }
  1419. $data["intervention_file_do"] = $files;
  1420. }
  1421. }
  1422. else if ($tab == 'objectives-result')
  1423. {
  1424. ###### PROJECT OBJECTIVES ######
  1425. $get_data = getDataApi('project_objectives_trx', ['project_trx_id' => $project_tr_id]);
  1426. $dataObj[] = default_variabel('objectives');
  1427. if (!empty($get_data))
  1428. { // data does
  1429. $n = 1;
  1430. foreach ($get_data as $key => $value)
  1431. {
  1432. $dataObj[$key]['no'] = $n;
  1433. $dataObj[$key]['objectives'] = $value['project_objectives_trx_name'];
  1434. $n++;
  1435. }
  1436. }
  1437. $data['data_objectives'] = $dataObj;
  1438.  
  1439. ###### PROJECT RESULT ######
  1440. $get_data = getDataApi('project_result_trx', ['project_trx_id' => $project_tr_id]);
  1441. $dataResult[] = default_variabel('result');
  1442. if (!empty($get_data))
  1443. { // data does
  1444. $n = 1;
  1445. foreach ($get_data as $key => $value)
  1446. {
  1447. $dataResult[$key]['no'] = $n;
  1448. $dataResult[$key]['result'] = $value['project_result_trx_name'];
  1449. $n++;
  1450. }
  1451. }
  1452. $data['data_result'] = $dataResult;
  1453. }
  1454. else if ($tab == 'funding-source')
  1455. {
  1456. ###### FUNDING SOURCE ######
  1457. $data = getSingleDataApi('project_tr', ['project_tr_id' => $project_tr_id]);
  1458. setlocale(LC_MONETARY, 'en_US');
  1459. $propose_total_funding = $data['propose_total_funding'];
  1460. $data['propose_total_funding'] = money_format_custom('%.2n', $data['propose_total_funding']);
  1461. $get_fs['is_single_table'] = 1;
  1462. $get_fs['where'] = ['project_trx_id' => $project_tr_id];
  1463. $get_fs['where_join'] = ['a.funding_source_id = c.funding_source_id'];
  1464. $get_fs['select'] = ('a.*, c.*');
  1465. $get_fs['table_name'] = 'project_funding_source_tr';
  1466. $get_fs['table_join'] = ['funding_source_mst c'];
  1467. $get_data = $this->asec_giz_api_library->call('master_data/get_data', $get_fs);
  1468. $dataFs[] = default_variabel($tab);
  1469. if (!isset($get_data['message']))
  1470. { // data does
  1471. $n = 1;
  1472. foreach ($get_data as $key => $value)
  1473. {
  1474. $dataFs[$key]['no'] = $n;
  1475. $dataFs[$key]['name'] = $value['funding_source_name'];
  1476. $dataFs[$key]['budget'] = money_format_custom('%.2n', $value['proposal_budget_project']);
  1477. $n++;
  1478. }
  1479. }
  1480. $data['funding'] = $dataFs;
  1481. //////////////////////////////////////////////////////////////////////////////////////////
  1482. }
  1483. render2("apps/detail_project/$tab", $data, 'blank');
  1484. }
  1485.  
  1486. function historyrevisiondetail2($id1, $id2 = '', $dataOnly = '')
  1487. {
  1488. $this->load->model('ProjectFundingSourceTrLogModel', 'modFundingSorceLog');
  1489. $this->load->model('SectoralBodyTrLogModel', 'modSectoralBodyLog');
  1490. $this->load->model('PillarTrLogModel', 'modPillarTrLog');
  1491. $this->load->model('OrganizationLogModel', 'modOrganizationTrLog');
  1492. $this->load->model('AttachmentsLogModel', 'modAttachmentsTrLog');
  1493. $this->load->model('ObjectivesTrModel', 'modObjectivesTrLog');
  1494. $this->load->model('ResultTrModel', 'modResultTrLog');
  1495. $compare1 = getProjectData($id1, 1);
  1496. $compare1['project_commancement_date'] = date('Y-m-d', strtotime($compare1['project_commancement_date']));
  1497. $compare1['project_completion_date'] = date('Y-m-d', strtotime($compare1['project_completion_date']));
  1498. if (!$id2)
  1499. {
  1500. $extra['sort_field'] = 'id';
  1501. $extra['sort_type'] = 'desc';
  1502. // debug_api();
  1503. $this->db->where('log_description', 'Revision');
  1504. $this->db->where('project_tr_id', $compare1['project_tr_id']);
  1505. $this->db->where('id <', $id1);
  1506. $this->db->order_by('id','desc');
  1507. $dt = $this->db->get('project_tr_log')->result_array();
  1508. // $dt = getSingleDataApi('project_tr_log', "log_description = 'Revision' AND project_tr_id = $compare1[project_tr_id] AND id = '$id1'", $extra);
  1509. $id2 = $dt ? $dt['id'] : 0;
  1510. }
  1511.  
  1512. $compare2 = $id2 ? getProjectData($id2, 1) : array();
  1513. if (!empty($compare2)) {
  1514. $compare2['project_commancement_date'] = !empty($compare2) ? date('Y-m-d', strtotime($compare2['project_commancement_date'])) : '';
  1515. $compare2['project_completion_date'] = !empty($compare2) ? date('Y-m-d', strtotime($compare2['project_completion_date'])) : '';
  1516. }
  1517.  
  1518. $data['list_log'] = getDataApi('project_tr_log', "project_tr_id = $compare1[project_tr_id]");
  1519. $data['id1'] = $id1;
  1520. $data['id2'] = $id2;
  1521. $data['compare1'] = $compare1;
  1522. $data['compare2'] = $compare2;
  1523. $data['dataOnly'] = $dataOnly;
  1524.  
  1525. ###### SECTORAL BODY / MAIN COMMITTEE ######
  1526. $sectoral_body_main = $this->modSectoralBodyLog->getSectoralBody("$id1,$id2");
  1527. foreach ($sectoral_body_main as $key => $value)
  1528. {
  1529. $sectoral_body_main1 = $this->modSectoralBodyLog->fetchRow("a.sectoral_body_id = $value[sectoral_body_id] AND project_tr_log_id = $id1 AND is_main_sectoral_body = 1");
  1530. $sectoral_body_main2 = $this->modSectoralBodyLog->fetchRow("a.sectoral_body_id = $value[sectoral_body_id] AND project_tr_log_id = $id2 AND is_main_sectoral_body = 1");
  1531. if ((!$sectoral_body_main1 || !$sectoral_body_main2) && $id2 != 0)
  1532. {
  1533. $sectoral_body_main[$key]['diff'] = 'bg-red-lighter';
  1534. } else {
  1535. $sectoral_body_main[$key]['diff'] = '';
  1536. }
  1537. $sectoral_body_main[$key]['source1'] = $sectoral_body_main1;
  1538. $sectoral_body_main[$key]['source2'] = $sectoral_body_main2;
  1539. }
  1540. $data['sectoral_body_main'] = $sectoral_body_main;
  1541.  
  1542. ###### SECTORAL BODY / Supporting COMMITTEE ######
  1543. $sectoral_body_support = $this
  1544. ->modSectoralBodyLog
  1545. ->getSectoralBody("$id1,$id2");
  1546. foreach ($sectoral_body_support as $key => $value)
  1547. {
  1548. $sectoral_body_support1 = $this->modSectoralBodyLog->fetchRow("a.sectoral_body_id = $value[sectoral_body_id] AND project_tr_log_id = $id1 AND is_main_sectoral_body != 1");
  1549. $sectoral_body_support2 = $this->modSectoralBodyLog->fetchRow("a.sectoral_body_id = $value[sectoral_body_id] AND project_tr_log_id = $id2 AND is_main_sectoral_body != 1");
  1550. if ((!$sectoral_body_support1 || !$sectoral_body_support2) && $id2 != 0)
  1551. {
  1552. $sectoral_body_support[$key]['diff'] = 'bg-red-lighter';
  1553. } else {
  1554. $sectoral_body_support[$key]['diff'] = '';
  1555. }
  1556. $sectoral_body_support[$key]['source1'] = $sectoral_body_support1;
  1557. $sectoral_body_support[$key]['source2'] = $sectoral_body_support2;
  1558. }
  1559. $data['sectoral_body_support'] = $sectoral_body_support;
  1560.  
  1561. ###### SECTORAL BODY WG / SUB COMMITTEE ######
  1562. $get_sectoral_body_wg_where = array(
  1563. 'sectoral_body_wg_id' => $compare1['project_supporting_sectoral_body_id']
  1564. );
  1565. $data['sub_committee1'] = getSingleDataApi('sectoral_body_wg_mst', $get_sectoral_body_wg_where) ['sectoral_body_wg_title'];
  1566. $get_sectoral_body_wg_where = array(
  1567. 'sectoral_body_wg_id' => isset($compare2['project_supporting_sectoral_body_id']) ? $compare2['project_supporting_sectoral_body_id'] : 0
  1568. );
  1569. $sub_committee2 = getSingleDataApi('sectoral_body_wg_mst', $get_sectoral_body_wg_where);
  1570. $data['sub_committee2'] = !empty($sub_committee2) ? $sub_committee2['sectoral_body_wg_title']:'';
  1571.  
  1572. ###### Main PILLAR ######
  1573. $type_of_main_pillars = $this->modPillarTrLog->getPillar("$id1,$id2");
  1574. foreach ($type_of_main_pillars as $key => $value)
  1575. {
  1576. $type_of_main_pillars1 = $this->modPillarTrLog->fetchRow("a.type_of_pillars_id = $value[type_of_pillars_id] AND project_tr_log_id = $id1 AND is_main_pillar = 1");
  1577. $type_of_main_pillars2 = $this->modPillarTrLog->fetchRow("a.type_of_pillars_id = $value[type_of_pillars_id] AND project_tr_log_id = $id2 AND is_main_pillar = 1");
  1578. if ((!$type_of_main_pillars1 || !$type_of_main_pillars2) && $id2 != 0)
  1579. {
  1580. $type_of_main_pillars[$key]['diff'] = 'bg-red-lighter';
  1581. } else {
  1582. $type_of_main_pillars[$key]['diff'] = '';
  1583. }
  1584.  
  1585. $type_of_main_pillars[$key]['source1'] = $type_of_main_pillars1;
  1586. $type_of_main_pillars[$key]['source2'] = $type_of_main_pillars2;
  1587. }
  1588. $data['type_of_main_pillars'] = $type_of_main_pillars;
  1589.  
  1590. ###### Other PILLAR ######
  1591. $type_of_other_pillars = $this->modPillarTrLog->getPillar("$id1,$id2");
  1592. foreach ($type_of_other_pillars as $key => $value)
  1593. {
  1594. $type_of_other_pillars1 = $this->modPillarTrLog->fetchRow("a.type_of_pillars_id = $value[type_of_pillars_id] AND project_tr_log_id = $id1 AND is_main_pillar != 1");
  1595. $type_of_other_pillars2 = $this->modPillarTrLog->fetchRow("a.type_of_pillars_id = $value[type_of_pillars_id] AND project_tr_log_id = $id2 AND is_main_pillar != 1");
  1596. if ((!$type_of_other_pillars1 || !$type_of_other_pillars2) && $id2 != 0)
  1597. {
  1598. $type_of_other_pillars[$key]['diff'] = 'bg-red-lighter';
  1599. } else {
  1600. $type_of_other_pillars[$key]['diff'] = '';
  1601. }
  1602.  
  1603. $type_of_other_pillars[$key]['source1'] = $type_of_other_pillars1;
  1604. $type_of_other_pillars[$key]['source2'] = $type_of_other_pillars2;
  1605. }
  1606. $data['type_of_other_pillars'] = $type_of_other_pillars;
  1607.  
  1608.  
  1609. ###### Type Of Intervention ######
  1610. $get_intervention_where = array(
  1611. 'type_intervention_id' => $compare1['type_intervention_id']
  1612. );
  1613. $data['intervention1'] = getSingleDataApi('type_intervention_mst', $get_intervention_where) ['type_intervention_title'];
  1614. $get_intervention_where = array(
  1615. 'type_intervention_id' => isset($compare2['type_intervention_id']) ? $compare2['type_intervention_id'] : 0
  1616. );
  1617. $intervention2 = getSingleDataApi('type_intervention_mst', $get_intervention_where);
  1618. $data['intervention2'] = !empty($intervention2) ? $intervention2['type_intervention_title'] : '';
  1619.  
  1620.  
  1621. ###### Type of Cooperation ######
  1622. $get_cooperation_where = array(
  1623. 'type_nature_corporation_id' => $compare1['type_nature_corporation_id']
  1624. );
  1625. $data['cooperation1'] = getSingleDataApi('type_nature_corporation_mst', $get_cooperation_where) ['type_nature_corporation_title'];
  1626. $get_cooperation_where = array(
  1627. 'type_nature_corporation_id' => isset($compare2['type_nature_corporation_id']) ? $compare2['type_nature_corporation_id'] : 0
  1628. );
  1629. $cooperation2 = getSingleDataApi('type_nature_corporation_mst', $get_cooperation_where);
  1630. $data['cooperation2'] = !empty($cooperation2) ? $cooperation2['type_nature_corporation_title']:'';
  1631.  
  1632. ###### Recurring ######
  1633. if ($compare1['is_recurring_project'] == 1)
  1634. {
  1635. $data['recurring1'] = 'This proposal is recurring to project with <b>Project ID: ' . $compare1["project_id"] . '</b>';
  1636. }
  1637. else
  1638. {
  1639. $data['recurring1'] = 'This proposal is new project.';
  1640. }
  1641. if (isset($compare2['is_recurring_project']) && $compare2['is_recurring_project'] == 1)
  1642. {
  1643. $data['recurring2'] = 'This proposal is recurring to project with <b>Project ID: ' . $compare2["project_id"] . '</b>';
  1644. }
  1645. else
  1646. {
  1647. $data['recurring2'] = 'This proposal is new project.';
  1648. }
  1649.  
  1650. ###### Duration ######
  1651. $get_project_duration_where = array(
  1652. 'type_project_durations_id' => $compare1['type_project_durations_id']
  1653. );
  1654. $data['project_duration1'] = getSingleDataApi('type_project_durations_mst', $get_project_duration_where) ['type_project_durations_title'];
  1655. $get_project_duration_where = array(
  1656. 'type_project_durations_id' => isset($compare2['type_project_durations_id']) ? $compare2['type_project_durations_id'] : 0
  1657. );
  1658. $project_duration2 = getSingleDataApi('type_project_durations_mst', $get_project_duration_where);
  1659. $data['project_duration2'] = !empty($project_duration2) ? $project_duration2['type_project_durations_title']:'';
  1660.  
  1661.  
  1662. ###### Proponent Organization ######
  1663. $organization = $this->modOrganizationTrLog->getOrganization("$id1,$id2");
  1664. foreach ($organization as $key => $value)
  1665. {
  1666. $organization1 = $this->modOrganizationTrLog->fetchRow("a.proponent_org_id = $value[proponent_org_id] AND project_tr_log_id = $id1 AND a.is_proponent = 1");
  1667. $organization2 = $this->modOrganizationTrLog->fetchRow("a.proponent_org_id = $value[proponent_org_id] AND project_tr_log_id = $id2 AND a.is_proponent = 1");
  1668. if ((!$organization1 || !$organization2) && $id2 != 0)
  1669. {
  1670. $organization[$key]['diff'] = 'bg-red-lighter';
  1671. }
  1672.  
  1673. $organization[$key]['source1'] = $organization1;
  1674. $organization[$key]['source2'] = $organization2;
  1675. }
  1676. $data['organization'] = $organization;
  1677.  
  1678.  
  1679. ###### Attachments ######
  1680. $attachments = $this->modAttachmentsTrLog->getAttachments("$id1,$id2");
  1681. foreach ($attachments as $key => $value)
  1682. {
  1683. $attachments1 = $this->modAttachmentsTrLog->fetchRow("a.proposal_file_upload_id = $value[proposal_file_upload_id] AND project_tr_log_id = $id1");
  1684. $attachments2 = $this->modAttachmentsTrLog->fetchRow("a.proposal_file_upload_id = $value[proposal_file_upload_id] AND project_tr_log_id = $id2");
  1685. if ((!$attachments1 || !$attachments2) && $id2 != 0)
  1686. {
  1687. $attachments[$key]['diff'] = 'bg-red-lighter';
  1688. }
  1689. else
  1690. {
  1691. $attachments[$key]['diff'] = compare(isset($attachments1['files_category_name'])?$attachments1['files_category_name']:'', isset($attachments2['files_category_name'])?$attachments1['files_category_name']:'');
  1692. }
  1693.  
  1694. $attachments[$key]['source1'] = $attachments1;
  1695. $attachments[$key]['source2'] = $attachments2;
  1696. }
  1697. $data['attachments'] = $attachments;
  1698.  
  1699. ###### Objectives & Results ######
  1700. $objectives = $this->modObjectivesTrLog->getObjectives("$id1,$id2");
  1701. foreach ($objectives as $key => $value)
  1702. {
  1703. $objectives1 = $this->modObjectivesTrLog->fetchRow("a.id = $value[id] AND project_tr_log_id = $id1");
  1704. $objectives2 = $this->modObjectivesTrLog->fetchRow("a.id = $value[id] AND project_tr_log_id = $id2");
  1705. if ((!$objectives1 || !$objectives2) && $id2 != 0)
  1706. {
  1707. $objectives[$key]['diff'] = 'bg-red-lighter';
  1708. } else {
  1709. $objectives[$key]['diff'] = '';
  1710. }
  1711. $objectives[$key]['source1'] = $objectives1;
  1712. $objectives[$key]['source2'] = $objectives2;
  1713. }
  1714. $data['objectives'] = $objectives;
  1715.  
  1716. $result = $this->modResultTrLog->getResult("$id1,$id2");
  1717. foreach ($result as $key => $value)
  1718. {
  1719. $result1 = $this->modResultTrLog->fetchRow("a.id = $value[id] AND project_tr_log_id = $id1");
  1720. $result2 = $this->modResultTrLog->fetchRow("a.id = $value[id] AND project_tr_log_id = $id2");
  1721. if ((!$result1 || !$result2) && $id2 != 0)
  1722. {
  1723. $result[$key]['diff'] = 'bg-red-lighter';
  1724. } else {
  1725. $result[$key]['diff'] = '';
  1726. }
  1727. $result[$key]['source1'] = $result1;
  1728. $result[$key]['source2'] = $result2;
  1729. }
  1730. $data['result'] = $result;
  1731.  
  1732. ###### FUNDING ######
  1733. $funding = $this
  1734. ->modFundingSorceLog
  1735. ->getFundingSource("$id1,$id2");
  1736. foreach ($funding as $key => $value)
  1737. {
  1738. $funding1 = $this->modFundingSorceLog->fetchRow("a.funding_source_id = $value[funding_source_id] AND project_tr_log_id = $id1");
  1739. $funding2 = $this->modFundingSorceLog->fetchRow("a.funding_source_id = $value[funding_source_id] AND project_tr_log_id = $id2");
  1740. if ((!$funding1 || !$funding2) && $id2 != 0)
  1741. {
  1742. $funding[$key]['diff'] = 'bg-red-lighter';
  1743. }
  1744. else
  1745. {
  1746. $funding[$key]['diff'] = compare(!empty($funding1) ? $funding1['proposal_budget_project']:'', !empty($funding2)?$funding2['proposal_budget_project']:'');
  1747. }
  1748. $funding[$key]['source1'] = $funding1;
  1749. $funding[$key]['source2'] = $funding2;
  1750. }
  1751. // debugvar($funding);
  1752. $data['funding'] = $funding;
  1753. render2('apps/project_proposal/detaillog', $data, 'blank');
  1754. }
  1755.  
  1756. function get_revision_file($id = '')
  1757. {
  1758. if ($id)
  1759. {
  1760. $this->load->model('ProjectReviewTransFinishModel', 'finishModel');
  1761. $activeReview = getReviewPosition($id);
  1762. $id_active_review = isset($activeReview['id'])?$activeReview['id']:0;
  1763. $dataFinish = $this->finishModel->fetchRow("project_review_trans_id = $id_active_review");
  1764. $files = [];
  1765. if(isset($dataFinish['files'])){
  1766. $files = json_decode($dataFinish['files'], true);
  1767. foreach ($files as $key => $value)
  1768. {
  1769. $category = getSingleDataApi("files_category_mst", "files_category_mst_id = $value[category]");
  1770. $files[$key]['categoryName'] = $category['files_category_name'];
  1771. $files[$key]['fileUrl'] = base_url() . 'proposal-doc/review/' . $activeReview['project_tr_id'] . '/' . $activeReview['review'] . '/' . $value['name'];
  1772. }
  1773. }
  1774. $data['files'] = $files;
  1775. render2('apps/detail_project/list-files', $data, 'blank');
  1776. }
  1777. }
  1778.  
  1779.  
  1780. // SCRIPT MIGRASI PROPOSAL
  1781. function get_scdc()
  1782. {
  1783. $excel_path = APPPATH.'../migration.xlsx';
  1784. $spreadsheet = IOFactory::load($excel_path);
  1785. $worksheet = $spreadsheet->getSheet(3);
  1786. $highestRow = $worksheet->getHighestRow();
  1787. $rows = [];
  1788. $data = [];
  1789. for ($row = 4; $row <= $highestRow; ++$row) {
  1790. $col = 1;
  1791. $cell = $worksheet->getCellByColumnAndRow($col, $row);
  1792. $maxCol = $col + 100;
  1793. for ( ; $col <= $maxCol; ++$col) {
  1794. $value = $worksheet->getCellByColumnAndRow($col, $row)->getValue();
  1795. $coordinates = $worksheet->getCellByColumnAndRow($col, $row)->getCoordinate();
  1796. $year = null;
  1797. switch ($col) {
  1798. case 2:
  1799. $rows[$row]['is_folder_exists'] = $value;
  1800. break;
  1801. case 3:
  1802. $rows[$row]['proposal_id'] = trim($value);
  1803. break;
  1804. case 4:
  1805. $rows[$row]['title'] = $value;
  1806. break;
  1807. case 5:
  1808. $rows[$row]['status'] = $value;
  1809. break;
  1810. case 7:
  1811. $rows[$row]['description'] = $value;
  1812. break;
  1813. case 8:
  1814. if (is_numeric($value)) {
  1815. $rows[$row]['back_date'] = date('Y-m-d', PSSDDate::excelToTimestamp($value));
  1816. } else {
  1817. $rows[$row]['back_date'] = '-';
  1818. }
  1819. break;
  1820. case 9:
  1821. $rows[$row]['is_endorsed'] = $value;
  1822. break;
  1823. case 10:
  1824. $rows[$row]['is_recurring'] = $value;
  1825. break;
  1826. case 11:
  1827. $rows[$row]['previous_project_id'] = $value;
  1828. break;
  1829. case 12:
  1830. $rows[$row]['project_classification'] = $value;
  1831. break;
  1832. case 13:
  1833. if (is_numeric($value)) {
  1834. $rows[$row]['main_committee'] = $value;
  1835. } else {
  1836. $rows[$row]['main_committee'] = '-';
  1837. }
  1838. break;
  1839. case 14:
  1840. if (is_numeric($value)) {
  1841. $rows[$row]['sub_committee'] = $value;
  1842. } else {
  1843. $rows[$row]['sub_committee'] = '-';
  1844. }
  1845. break;
  1846. case 15:
  1847. $rows[$row]['supporting_committee'] = $value;
  1848. break;
  1849. case 16:
  1850. if (is_numeric($value)) {
  1851. $rows[$row]['pillar'] = $value;
  1852. } else {
  1853. $rows[$row]['pillar'] = '-';
  1854. }
  1855. break;
  1856. case 17:
  1857. $rows[$row]['intervention_type'] = $value;
  1858. break;
  1859. case 18:
  1860. $rows[$row]['cooperation_type'] = $value;
  1861. break;
  1862. case 19:
  1863. if (is_numeric($value)) {
  1864. $rows[$row]['proposed_commencement_date'] = date('Y-m-d', PSSDDate::excelToTimestamp($value));
  1865. } else {
  1866. $rows[$row]['proposed_commencement_date'] = '-';
  1867. }
  1868. break;
  1869. case 20:
  1870. if (is_numeric($value)) {
  1871. $rows[$row]['proposed_completion_date'] = date('Y-m-d', PSSDDate::excelToTimestamp($value));
  1872. } else {
  1873. $rows[$row]['proposed_completion_date'] = '-';
  1874. }
  1875. break;
  1876. case 21:
  1877. $rows[$row]['participants'] = $value;
  1878. break;
  1879. case 22:
  1880. $rows[$row]['more_countries_of_participants'] = $value;
  1881. break;
  1882. case 23:
  1883. $rows[$row]['reason_if_not_all_asean'] = $value;
  1884. break;
  1885. case 24:
  1886. // if (is_numeric($value)) {
  1887. $rows[$row]['proponent'] = $value;
  1888. // } else {
  1889. // $rows[$row]['proponent'] = '-';
  1890. // }
  1891. break;
  1892. case 25:
  1893. if (is_numeric($value)) {
  1894. $rows[$row]['agency'] = $value;
  1895. } else {
  1896. $rows[$row]['agency'] = '-';
  1897. }
  1898. break;
  1899. case 26:
  1900. if (is_numeric($value)) {
  1901. $rows[$row]['project_objective'] = $value;
  1902. } else {
  1903. $rows[$row]['project_objective'] = '-';
  1904. }
  1905. break;
  1906. case 27:
  1907. if (is_numeric($value)) {
  1908. $rows[$row]['project_output'] = $value;
  1909. } else {
  1910. $rows[$row]['project_output'] = '-';
  1911. }
  1912. break;
  1913. case 28:
  1914. if (is_numeric($value)) {
  1915. $rows[$row]['funding_source'] = $value;
  1916. } else {
  1917. $rows[$row]['funding_source'] = '-';
  1918. }
  1919. break;
  1920. case 29:
  1921. $rows[$row]['funding_source_budget'] = $value;
  1922. break;
  1923. case 30:
  1924. $rows[$row]['file_attachment'] = $value;
  1925. break;
  1926. case 31:
  1927. if (is_numeric($value)) {
  1928. $rows[$row]['proposal_submission_date'] = date('Y-m-d', PSSDDate::excelToTimestamp($value));
  1929. } else {
  1930. $rows[$row]['proposal_submission_date'] = '-';
  1931. }
  1932. break;
  1933. case 32:
  1934. $rows[$row]['old_step_review'] = $value;
  1935. break;
  1936. case 33:
  1937. $rows[$row]['step_review_generated_by_system'] = $value;
  1938. break;
  1939. case 35:
  1940. $rows[$row]['creator'] = $value;
  1941. break;
  1942. case 36:
  1943. $rows[$row]['confirm_to'] = $value;
  1944. break;
  1945. case 37:
  1946. $rows[$row]['review_step']['pam']['score'] = $value;
  1947. break;
  1948. case 38:
  1949. $rows[$row]['review_step']['pam']['attachments'] = $value;
  1950. break;
  1951. case 65:
  1952. if (is_numeric($value)) {
  1953. $rows[$row]['review_step']['pam']['approval_date'] = date('Y-m-d', PSSDDate::excelToTimestamp($value));
  1954. } else {
  1955. $rows[$row]['review_step']['pam']['approval_date'] = '-';
  1956. }
  1957. break;
  1958. case 39:
  1959. $rows[$row]['review_step']['pac']['attachments'] = $value;
  1960. break;
  1961. case 40:
  1962. $rows[$row]['review_step']['pac']['remarks'] = $value;
  1963. break;
  1964. case 66:
  1965. if (is_numeric($value)) {
  1966. $rows[$row]['review_step']['pac']['approval_date'] = date('Y-m-d', PSSDDate::excelToTimestamp($value));
  1967. } else {
  1968. $rows[$row]['review_step']['pac']['approval_date'] = '-';
  1969. }
  1970. break;
  1971. case 41:
  1972. $rows[$row]['review_step']['sb']['is_get_endorse'] = $value;
  1973. break;
  1974. case 42:
  1975. $rows[$row]['review_step']['sb']['attachments'] = $value;
  1976. break;
  1977. case 43:
  1978. $rows[$row]['review_step']['sb']['remark'] = $value;
  1979. break;
  1980. case 67:
  1981. if (is_numeric($value)) {
  1982. $rows[$row]['review_step']['sb']['approval_date'] = date('Y-m-d', PSSDDate::excelToTimestamp($value));
  1983. } else {
  1984. $rows[$row]['review_step']['sb']['approval_date'] = '-';
  1985. }
  1986. break;
  1987. case 44:
  1988. $rows[$row]['review_step']['cpr']['is_get_endorse'] = $value;
  1989. break;
  1990. case 45:
  1991. $rows[$row]['review_step']['cpr']['attachments'] = $value;
  1992. break;
  1993. case 46:
  1994. $rows[$row]['review_step']['cpr']['remark'] = $value;
  1995. break;
  1996. case 68:
  1997. if (is_numeric($value)) {
  1998. $rows[$row]['review_step']['cpr']['approval_date'] = date('Y-m-d', PSSDDate::excelToTimestamp($value));
  1999. } else {
  2000. $rows[$row]['review_step']['cpr']['approval_date'] = '-';
  2001. }
  2002. break;
  2003. case 47:
  2004. $rows[$row]['review_step']['dp']['is_get_endorse'] = $value;
  2005. break;
  2006. case 48:
  2007. $rows[$row]['review_step']['dp']['attachments'] = $value;
  2008. break;
  2009. case 49:
  2010. $rows[$row]['review_step']['dp']['remark'] = $value;
  2011. break;
  2012. case 69:
  2013. if (is_numeric($value)) {
  2014. $rows[$row]['review_step']['dp']['approval_date'] = date('Y-m-d', PSSDDate::excelToTimestamp($value));
  2015. } else {
  2016. $rows[$row]['review_step']['dp']['approval_date'] = '-';
  2017. }
  2018. break;
  2019. case 50:
  2020. $rows[$row]['project_tracking']['funding_disbursement']['attachments'] = $value;
  2021. break;
  2022. case 51:
  2023. if (is_numeric($value)) {
  2024. $rows[$row]['project_tracking']['funding_disbursement']['update_date'] = date('Y-m-d', PSSDDate::excelToTimestamp($value));
  2025. } else {
  2026. $rows[$row]['project_tracking']['funding_disbursement']['update_date'] = '-';
  2027. }
  2028. break;
  2029. case 52:
  2030. $rows[$row]['project_tracking']['funding_disbursement']['remarks'] = $value;
  2031. break;
  2032. case 53:
  2033. $rows[$row]['project_tracking']['project_implementation']['attachments'] = $value;
  2034. break;
  2035. case 54:
  2036. if (is_numeric($value)) {
  2037. $rows[$row]['project_tracking']['project_implementation']['start_date'] = date('Y-m-d', PSSDDate::excelToTimestamp($value));
  2038. } else {
  2039. $rows[$row]['project_tracking']['project_implementation']['start_date'] = '-';
  2040. }
  2041. break;
  2042. case 55:
  2043. if (is_numeric($value)) {
  2044. $rows[$row]['project_tracking']['project_implementation']['end_date'] = date('Y-m-d', PSSDDate::excelToTimestamp($value));
  2045. } else {
  2046. $rows[$row]['project_tracking']['project_implementation']['end_date'] = '-';
  2047. }
  2048. break;
  2049. case 56:
  2050. if (is_numeric($value)) {
  2051. $rows[$row]['project_tracking']['project_implementation']['update_date'] = date('Y-m-d', PSSDDate::excelToTimestamp($value));
  2052. } else {
  2053. $rows[$row]['project_tracking']['project_implementation']['update_date'] = '-';
  2054. }
  2055. break;
  2056. case 57:
  2057. $rows[$row]['project_tracking']['project_implementation']['remarks'] = $value;
  2058. break;
  2059. case 58:
  2060. $rows[$row]['project_tracking']['completion_report_submission']['attachments'] = $value;
  2061. break;
  2062. case 59:
  2063. if (is_numeric($value)) {
  2064. $rows[$row]['project_tracking']['completion_report_submission']['update_date'] = date('Y-m-d', PSSDDate::excelToTimestamp($value));
  2065. } else {
  2066. $rows[$row]['project_tracking']['completion_report_submission']['update_date'] = '-';
  2067. }
  2068. break;
  2069. case 60:
  2070. $rows[$row]['project_tracking']['completion_report_submission']['remarks'] = $value;
  2071. break;
  2072. case 61:
  2073. $rows[$row]['project_tracking']['project_closing']['attachments'] = $value;
  2074. break;
  2075. case 62:
  2076. if (is_numeric($value)) {
  2077. $rows[$row]['project_tracking']['project_closing']['update_date'] = date('Y-m-d', PSSDDate::excelToTimestamp($value));
  2078. } else {
  2079. $rows[$row]['project_tracking']['project_closing']['update_date'] = '-';
  2080. }
  2081. break;
  2082. case 63:
  2083. $rows[$row]['project_tracking']['project_closing']['remarks'] = $value;
  2084. break;
  2085. case 75:
  2086. $rows[$row]['is_programme'] = ($value == 'Yes') ? 1 : 0;
  2087. break;
  2088. case 76:
  2089. $rows[$row]['position'] = 'BX'.$row;
  2090. $rows[$row]['status_proposal'] = $value;
  2091. break;
  2092. }
  2093. }
  2094.  
  2095. foreach ($rows as $key => $value) {
  2096. // if ($value['proposal_id'] == 'ASC/ASC/09/0011/IAI') {
  2097. $data[$key] = $value;
  2098. // }
  2099. }
  2100. }
  2101.  
  2102. return array_values($data);
  2103. }
  2104.  
  2105. function set_flag($position, $value = '') {
  2106. // $excel_path = APPPATH.'../migration.xlsx';
  2107. // $excel2 = IOFactory::load($excel_path); // Empty Sheet
  2108. // $excel2->setActiveSheetIndex(2);
  2109. // $excel2->getActiveSheet()->setCellValue($position, $value);
  2110. // $objWriter = IOFactory::createWriter($excel2, 'Xlsx');
  2111. // $objWriter->save('migration.xlsx');
  2112. }
  2113.  
  2114. function data_migration()
  2115. {
  2116. echo "<pre>";
  2117. $time_start_total = microtime(true);
  2118. $time_start = microtime(true);
  2119. $scdc = $this->get_scdc();
  2120. $time_end = microtime(true);
  2121. echo "Read excel in: ".($time_end - $time_start)."s. <br>";
  2122.  
  2123. $data = $this->db->select('project_tr_id, proposal_id, project_tr_title')->get_where('project_tr', array('is_delete' => 0))->result_array();
  2124. $project_tr_ids = [];
  2125. $project_tr = [];
  2126. echo "=======================================<br>";
  2127. echo "Total current proposal:".count($data)."<br>";
  2128. echo "Total migration target:".count($scdc)."<br>";
  2129. echo "=======================================<br>";
  2130. $duplicated_proposal_ids = array(
  2131. 'N/A',
  2132. 'n/a',
  2133. 'IND/SME/10/001/REG',
  2134. 'ASC/ASC/09/0011/IAI',
  2135. 'FIN/STU/14/001/JAF',
  2136. 'TRC/SCR/11/004/REG',
  2137. );
  2138. foreach ($data as $key => $value) {
  2139. $project_tr_ids[$value['proposal_id']] = $value['project_tr_id'];
  2140. $project_tr[$value['project_tr_id']] = $value;
  2141. }
  2142.  
  2143. $result = [];
  2144. $tracking_steps = array(
  2145. 1 => 'Funding Disbursement',
  2146. 2 => 'Project Implementation',
  2147. 3 => 'Completion Report Submission',
  2148. 4 => 'Project Closing',
  2149. );
  2150.  
  2151. $review_steps = array(
  2152. 1 => 'PAM',
  2153. 2 => 'PAC',
  2154. 3 => 'SB',
  2155. 4 => 'CPR',
  2156. 5 => 'DP',
  2157. 6 => 'Post CPR',
  2158. );
  2159.  
  2160. foreach ($scdc as $key => $value) {
  2161. $time_start = microtime(true);
  2162. $tr_id = null;
  2163. $existing_proposal = null;
  2164. if ($value['status_proposal'] == '') {
  2165. // Create Project
  2166. if (array_search($value['proposal_id'], $duplicated_proposal_ids) !== false) {
  2167. // Validasi tambahan untuk ID proposal duplikat
  2168. // cek juga judul proposalnya
  2169. $check_existing_proposal = $this->db->select('project_tr_id,project_tr_title,proposal_id')
  2170. ->order_by('project_tr_id', 'desc')
  2171. ->get_where('project_tr', array(
  2172. 'proposal_id' => $value['proposal_id'],
  2173. 'project_tr_title' => $value['title'],
  2174. 'is_delete' => 0,
  2175. ))->row_array();
  2176. if ($check_existing_proposal) {
  2177. $existing_proposal = $check_existing_proposal['project_tr_id'];
  2178. }
  2179. } else {
  2180. $existing_proposal = isset($project_tr_ids[$value['proposal_id']]) ? $project_tr_ids[$value['proposal_id']] : null;
  2181. }
  2182.  
  2183. if ($existing_proposal) {
  2184. $tr_id = $existing_proposal;
  2185. $this->update_proposal($tr_id, $value);
  2186. } else {
  2187. $tr_id = $this->create_proposal($value);
  2188. }
  2189. if ($tr_id) {
  2190. $upload_others = $this->insert_attachments($tr_id);
  2191. if ($value['status_proposal'] == '') {
  2192. // Assign proposal
  2193. $do_user_id = explode('| ', $value['confirm_to'])[0];
  2194. $this->assign($tr_id, $do_user_id);
  2195. }
  2196.  
  2197. // Generate step review
  2198. $review_step = $this->get_step_review($tr_id);
  2199. if ($review_step) {
  2200. $current_proposal_status = $value['status'];
  2201. // Proposal review
  2202. switch($current_proposal_status) {
  2203. case 'Completed':
  2204. $result[$value['proposal_id']]['id'] = $tr_id;
  2205. $result[$value['proposal_id']]['proposal_id'] = $value['proposal_id'];
  2206. $result[$value['proposal_id']]['status'] = true;
  2207. $result[$value['proposal_id']]['proposal_status'] = $current_proposal_status;
  2208. $result[$value['proposal_id']]['other_file_uploaded'] = $upload_others;
  2209. foreach ($review_step as $k_step => $step) {
  2210. $review_result = $this->finish($tr_id, $value['review_step'][strtolower($step)]['approval_date']);
  2211. $result[$value['proposal_id']]['review_steps'][$k_step]['step'] = $step;
  2212. $result[$value['proposal_id']]['review_steps'][$k_step]['file_uploaded'] = $review_result['total_files'];
  2213. }
  2214. foreach ($tracking_steps as $k_step => $step) {
  2215. $step_code = str_replace(' ', '_', strtolower($step));
  2216. $tracking_result = $this->project_tracking($tr_id, $k_step, $current_proposal_status, $value['project_tracking'][$step_code]['update_date'], $value['project_tracking'][$step_code]['remarks']);
  2217. $result[$value['proposal_id']]['tracking_steps'][$k_step]['step'] = $step;
  2218. $result[$value['proposal_id']]['tracking_steps'][$k_step]['file_uploaded'] = $tracking_result['total_files'];
  2219. }
  2220.  
  2221. $this->set_flag($value['position'], 'Berhasil');
  2222. break;
  2223. case 'Implemented':
  2224. $result[$value['proposal_id']]['id'] = $tr_id;
  2225. $result[$value['proposal_id']]['proposal_id'] = $value['proposal_id'];
  2226. $result[$value['proposal_id']]['status'] = true;
  2227. $result[$value['proposal_id']]['proposal_status'] = $current_proposal_status;
  2228. $result[$value['proposal_id']]['other_file_uploaded'] = $upload_others;
  2229. foreach ($review_step as $k_step => $step) {
  2230. $review_result = $this->finish($tr_id, $value['review_step'][strtolower($step)]['approval_date']);
  2231. $result[$value['proposal_id']]['review_steps'][$k_step]['step'] = $step;
  2232. $result[$value['proposal_id']]['review_steps'][$k_step]['file_uploaded'] = $review_result['total_files'];
  2233. }
  2234.  
  2235. foreach ($tracking_steps as $k_step => $step) {
  2236. $tracking_result = $this->project_tracking($tr_id, $k_step, $current_proposal_status);
  2237. $result[$value['proposal_id']]['tracking_steps'][$k_step]['step'] = $step;
  2238. $result[$value['proposal_id']]['tracking_steps'][$k_step]['file_uploaded'] = $tracking_result['total_files'];
  2239.  
  2240. // Hanya jalankan sampai step ke 2
  2241. if ($k_step == 2) {
  2242. break;
  2243. }
  2244. }
  2245.  
  2246. $this->set_flag($value['position'], 'Berhasil');
  2247. break;
  2248. case 'Ongoing':
  2249. $result[$value['proposal_id']]['id'] = $tr_id;
  2250. $result[$value['proposal_id']]['proposal_id'] = $value['proposal_id'];
  2251. $result[$value['proposal_id']]['status'] = true;
  2252. $result[$value['proposal_id']]['proposal_status'] = $current_proposal_status;
  2253. $result[$value['proposal_id']]['other_file_uploaded'] = $upload_others;
  2254. foreach ($review_step as $k_step => $step) {
  2255. $review_result = $this->finish($tr_id, $value['review_step'][strtolower($step)]['approval_date']);
  2256. $result[$value['proposal_id']]['review_steps'][$k_step]['step'] = $step;
  2257. $result[$value['proposal_id']]['review_steps'][$k_step]['file_uploaded'] = $review_result['total_files'];
  2258. }
  2259.  
  2260. foreach ($tracking_steps as $k_step => $step) {
  2261. $tracking_result = $this->project_tracking($tr_id, $k_step, $current_proposal_status);
  2262. $result[$value['proposal_id']]['tracking_steps'][$k_step]['step'] = $step;
  2263. $result[$value['proposal_id']]['tracking_steps'][$k_step]['file_uploaded'] = $tracking_result['total_files'];
  2264.  
  2265. // Hanya jalankan step ke 1
  2266. if ($k_step == 1) {
  2267. break;
  2268. }
  2269. }
  2270.  
  2271. $this->set_flag($value['position'], 'Berhasil');
  2272. break;
  2273. case 'Pending ASEC':
  2274. $result[$value['proposal_id']]['id'] = $tr_id;
  2275. $result[$value['proposal_id']]['proposal_id'] = $value['proposal_id'];
  2276. $result[$value['proposal_id']]['status'] = true;
  2277. $result[$value['proposal_id']]['proposal_status'] = $current_proposal_status;
  2278. $result[$value['proposal_id']]['other_file_uploaded'] = $upload_others;
  2279.  
  2280. $max_step = 5;
  2281. if (in_array('DP', $review_step)) {
  2282. $max_step = 5;
  2283. } else if (in_array('CPR', $review_step)) {
  2284. $max_step = 4;
  2285. } else if (in_array('PAC', $review_step)) {
  2286. $max_step = 2;
  2287. }
  2288. foreach ($review_step as $k_step => $step) {
  2289. if (array_search($step, $review_steps) < $max_step) {
  2290. // Jika bukan step terakhir, finish
  2291. $review_result = $this->finish($tr_id, $value['review_step'][strtolower($step)]['approval_date']);
  2292. $result[$value['proposal_id']]['review_steps'][$k_step]['step'] = $step;
  2293. $result[$value['proposal_id']]['review_steps'][$k_step]['process'] = 'finish';
  2294. $result[$value['proposal_id']]['review_steps'][$k_step]['file_uploaded'] = $review_result['total_files'];
  2295. } else {
  2296. // Stop di step PAC
  2297. $result[$value['proposal_id']]['review_steps'][$k_step]['step'] = $step;
  2298. $result[$value['proposal_id']]['review_steps'][$k_step]['process'] = '-';
  2299. $result[$value['proposal_id']]['review_steps'][$k_step]['file_uploaded'] = $review_result['total_files'];
  2300. break;
  2301. }
  2302. }
  2303.  
  2304. $this->set_flag($value['position'], 'Berhasil');
  2305. break;
  2306. case 'Pending CPR':
  2307. $result[$value['proposal_id']]['id'] = $tr_id;
  2308. $result[$value['proposal_id']]['proposal_id'] = $value['proposal_id'];
  2309. $result[$value['proposal_id']]['status'] = true;
  2310. $result[$value['proposal_id']]['proposal_status'] = $current_proposal_status;
  2311. $result[$value['proposal_id']]['other_file_uploaded'] = $upload_others;
  2312. foreach ($review_step as $k_step => $step) {
  2313. if (array_search($step, $review_steps) < 4) {
  2314. // Jika bukan step terakhir, finish
  2315. $review_result = $this->finish($tr_id, $value['review_step'][strtolower($step)]['approval_date']);
  2316. $result[$value['proposal_id']]['review_steps'][$k_step]['step'] = $step;
  2317. $result[$value['proposal_id']]['review_steps'][$k_step]['process'] = 'finish';
  2318. $result[$value['proposal_id']]['review_steps'][$k_step]['file_uploaded'] = $review_result['total_files'];
  2319. } else {
  2320. $result[$value['proposal_id']]['review_steps'][$k_step]['step'] = $step;
  2321. $result[$value['proposal_id']]['review_steps'][$k_step]['process'] = '-';
  2322. $result[$value['proposal_id']]['review_steps'][$k_step]['file_uploaded'] = 0;
  2323. break;
  2324. }
  2325. }
  2326. $this->set_flag($value['position'], 'Berhasil');
  2327. break;
  2328. case 'Pending DP':
  2329. $result[$value['proposal_id']]['id'] = $tr_id;
  2330. $result[$value['proposal_id']]['proposal_id'] = $value['proposal_id'];
  2331. $result[$value['proposal_id']]['status'] = true;
  2332. $result[$value['proposal_id']]['proposal_status'] = $current_proposal_status;
  2333. $result[$value['proposal_id']]['other_file_uploaded'] = $upload_others;
  2334. // print_r('<br>');
  2335. foreach ($review_step as $k_step => $step) {
  2336. if (array_search($step, $review_steps) < 5) {
  2337. // Jika bukan step terakhir, finish
  2338. $review_result = $this->finish($tr_id, $value['review_step'][strtolower($step)]['approval_date']);
  2339. $result[$value['proposal_id']]['review_steps'][$k_step]['step'] = $step;
  2340. $result[$value['proposal_id']]['review_steps'][$k_step]['process'] = 'finish';
  2341. $result[$value['proposal_id']]['review_steps'][$k_step]['file_uploaded'] = $review_result['total_files'];
  2342. } else {
  2343. // Stop di step DP
  2344. $result[$value['proposal_id']]['review_steps'][$k_step]['step'] = $step;
  2345. $result[$value['proposal_id']]['review_steps'][$k_step]['process'] = '-';
  2346. $result[$value['proposal_id']]['review_steps'][$k_step]['file_uploaded'] = $review_result['total_files'];
  2347. break;
  2348. }
  2349. }
  2350. $this->set_flag($value['position'], 'Berhasil');
  2351. break;
  2352. case 'Pending Sponsoring Body':
  2353. $result[$value['proposal_id']]['id'] = $tr_id;
  2354. $result[$value['proposal_id']]['proposal_id'] = $value['proposal_id'];
  2355. $result[$value['proposal_id']]['status'] = true;
  2356. $result[$value['proposal_id']]['proposal_status'] = $current_proposal_status;
  2357. $result[$value['proposal_id']]['other_file_uploaded'] = $upload_others;
  2358. foreach ($review_step as $k_step => $step) {
  2359. if (array_search($step, $review_steps) < 3) {
  2360. // Jika bukan step terakhir, finish
  2361. $review_result = $this->finish($tr_id, $value['review_step'][strtolower($step)]['approval_date']);
  2362. $result[$value['proposal_id']]['review_steps'][$k_step]['step'] = $step;
  2363. $result[$value['proposal_id']]['review_steps'][$k_step]['process'] = 'finish';
  2364. $result[$value['proposal_id']]['review_steps'][$k_step]['file_uploaded'] = $review_result['total_files'];
  2365. } else {
  2366. // Hold di step SB
  2367. $result[$value['proposal_id']]['review_steps'][$k_step]['step'] = $step;
  2368. $result[$value['proposal_id']]['review_steps'][$k_step]['process'] = '-';
  2369. $result[$value['proposal_id']]['review_steps'][$k_step]['file_uploaded'] = $review_result['total_files'];
  2370. break;
  2371. }
  2372. }
  2373.  
  2374. $this->set_flag($value['position'], 'Berhasil');
  2375. break;
  2376. }
  2377. }
  2378. }
  2379.  
  2380. } else {
  2381. $result[$value['proposal_id']]['proposal_id'] = $value['proposal_id'];
  2382. $result[$value['proposal_id']]['status'] = false;
  2383. $result[$value['proposal_id']]['description'] = 'Already migrated';
  2384.  
  2385. // if ($value['is_folder_exists'] == 'No') {
  2386. // $this->set_flag($value['position'], 'Folder does not exist');
  2387. // }
  2388. }
  2389. $time_end = microtime(true);
  2390. echo "$key - Time process for $value[proposal_id] ($tr_id) : ".($time_end - $time_start)."s. <br>";
  2391. }
  2392.  
  2393. echo "=======================================<br>";
  2394. $time_end_total = microtime(true);
  2395. echo "Migrated successfully in: ".($time_end_total - $time_start_total)."s. <br>";
  2396. echo "=======================================<br>";
  2397. echo "Details: <br>";
  2398.  
  2399. echo "<pre>";
  2400. print_r($result);exit;
  2401. }
  2402.  
  2403. function get_scdc_update()
  2404. {
  2405. $excel_path = APPPATH.'../migration.xlsx';
  2406. $spreadsheet = IOFactory::load($excel_path);
  2407. $worksheet = $spreadsheet->getSheet(0);
  2408. $highestRow = $worksheet->getHighestRow();
  2409. $rows = [];
  2410. $data = [];
  2411. for ($row = 6; $row <= $highestRow; ++$row) {
  2412. $col = 1;
  2413. $cell = $worksheet->getCellByColumnAndRow($col, $row);
  2414. $maxCol = $col + 100;
  2415. for ( ; $col <= $maxCol; ++$col) {
  2416. $value = $worksheet->getCellByColumnAndRow($col, $row)->getValue();
  2417. $coordinates = $worksheet->getCellByColumnAndRow($col, $row)->getCoordinate();
  2418. $year = null;
  2419. switch ($col) {
  2420. case 3:
  2421. $rows[$row]['proposal_id'] = trim($value);
  2422. break;
  2423. case 4:
  2424. $rows[$row]['title'] = $value;
  2425. break;
  2426. case 7:
  2427. $rows[$row]['description'] = $value;
  2428. break;
  2429. case 31:
  2430. if (is_numeric($value)) {
  2431. $rows[$row]['proposal_submission_date'] = date('Y-m-d', PSSDDate::excelToTimestamp($value));
  2432. } else {
  2433. $rows[$row]['proposal_submission_date'] = NULL;
  2434. }
  2435. break;
  2436. case 40:
  2437. $rows[$row]['remarks_pac'] = $value;
  2438. break;
  2439. case 43:
  2440. $rows[$row]['remarks_sb'] = $value;
  2441. break;
  2442. case 46:
  2443. $rows[$row]['remarks_cpr'] = $value;
  2444. break;
  2445. case 49:
  2446. $rows[$row]['remarks_dp'] = $value;
  2447. break;
  2448. case 52:
  2449. $rows[$row]['remarks_fd'] = $value;
  2450. break;
  2451. case 65:
  2452. if (is_numeric($value)) {
  2453. $rows[$row]['approve_date_pam'] = date('Y-m-d', PSSDDate::excelToTimestamp($value));
  2454. } else {
  2455. $rows[$row]['approve_date_pam'] = NULL;
  2456. }
  2457. break;
  2458. case 66:
  2459. if (is_numeric($value)) {
  2460. $rows[$row]['approve_date_pac'] = date('Y-m-d', PSSDDate::excelToTimestamp($value));
  2461. } else {
  2462. $rows[$row]['approve_date_pac'] = NULL;
  2463. }
  2464. break;
  2465. case 67:
  2466. if (is_numeric($value)) {
  2467. $rows[$row]['approve_date_sb'] = date('Y-m-d', PSSDDate::excelToTimestamp($value));
  2468. } else {
  2469. $rows[$row]['approve_date_sb'] = NULL;
  2470. }
  2471. break;
  2472. case 68:
  2473. if (is_numeric($value)) {
  2474. $rows[$row]['approve_date_cpr'] = date('Y-m-d', PSSDDate::excelToTimestamp($value));
  2475. } else {
  2476. $rows[$row]['approve_date_cpr'] = NULL;
  2477. }
  2478. break;
  2479. case 69:
  2480. if (is_numeric($value)) {
  2481. $rows[$row]['approve_date_dp'] = date('Y-m-d', PSSDDate::excelToTimestamp($value));
  2482. } else {
  2483. $rows[$row]['approve_date_dp'] = NULL;
  2484. }
  2485. break;
  2486. case 70:
  2487. if (is_numeric($value)) {
  2488. $rows[$row]['update_date_fd'] = date('Y-m-d', PSSDDate::excelToTimestamp($value));
  2489. } else {
  2490. $rows[$row]['update_date_fd'] = NULL;
  2491. }
  2492. break;
  2493. case 71:
  2494. if (is_numeric($value)) {
  2495. $rows[$row]['start_date_pi'] = date('Y-m-d', PSSDDate::excelToTimestamp($value));
  2496. } else {
  2497. $rows[$row]['start_date_pi'] = NULL;
  2498. }
  2499. break;
  2500. case 72:
  2501. if (is_numeric($value)) {
  2502. $rows[$row]['end_date_pi'] = date('Y-m-d', PSSDDate::excelToTimestamp($value));
  2503. } else {
  2504. $rows[$row]['end_date_pi'] = NULL;
  2505. }
  2506. break;
  2507. case 73:
  2508. if (is_numeric($value)) {
  2509. $rows[$row]['update_date_crs'] = date('Y-m-d', PSSDDate::excelToTimestamp($value));
  2510. } else {
  2511. $rows[$row]['update_date_crs'] = NULL;
  2512. }
  2513. break;
  2514. case 74:
  2515. if (is_numeric($value)) {
  2516. $rows[$row]['update_date_pc'] = date('Y-m-d', PSSDDate::excelToTimestamp($value));
  2517. } else {
  2518. $rows[$row]['update_date_pc'] = NULL;
  2519. }
  2520. break;
  2521. case 75:
  2522. $rows[$row]['position'] = 'BW'.$row;
  2523. $rows[$row]['status_proposal'] = $value;
  2524. break;
  2525. }
  2526. }
  2527.  
  2528. foreach ($rows as $key => $value) {
  2529. $date = date('Y-m-d', strtotime($value['proposal_submission_date']));
  2530. $filter_date = date('Y', strtotime($value['proposal_submission_date']));
  2531. if ($filter_date == '2020') { // yang status proposalnya new
  2532. // if ($value['proposal_id'] == 'SCD/HEA/18/010/REG') { // yang status proposalnya new
  2533. if ($value['status_proposal'] == '') {
  2534. $data[$key] = $value;
  2535. }
  2536. // }
  2537. }
  2538. }
  2539. }
  2540.  
  2541. return array_values($data);
  2542. }
  2543.  
  2544. function data_update($type = 'old')
  2545. {
  2546. $scdc = $this->get_scdc_update($type);
  2547. echo "<pre>";
  2548. // $data = $this->db->get('project_tr')->result_array();
  2549. // $project_tr_ids = [];
  2550. // $project_tr = [];
  2551. // foreach ($data as $key => $value) {
  2552. // $project_tr_ids[$value['project_tr_id']] = $value['proposal_id'];
  2553. // $project_tr[$value['project_tr_id']] = $value;
  2554. // }
  2555.  
  2556. $result = [];
  2557. $tracking_steps = array(
  2558. 1 => 'Funding Disbursement',
  2559. 2 => 'Project Implementation',
  2560. 3 => 'Completion Report Submission',
  2561. 4 => 'Project Closing',
  2562. );
  2563.  
  2564. $review_steps = array(
  2565. 1 => 'PAM',
  2566. 2 => 'PAC',
  2567. 3 => 'SB',
  2568. 4 => 'CPR',
  2569. 5 => 'DP',
  2570. );
  2571. foreach ($scdc as $key => $value) {
  2572. // Create Project
  2573. $extra['sort'] = "DESC";
  2574. $extra['field_name'] = "project_tr_id";
  2575. $is_exists = getSingleDataApi('project_tr', array(
  2576. 'proposal_id' => $value['proposal_id']
  2577. ), $extra);
  2578. // if ($is_exists AND $type=="new") {
  2579. if ($is_exists) {
  2580. $tr_id = $is_exists['project_tr_id'];
  2581. }
  2582. if ($tr_id) {
  2583. $result[$value['proposal_id']]['id'] = $tr_id;
  2584. $result[$value['proposal_id']]['proposal_id'] = $value['proposal_id'];
  2585. $result[$value['proposal_id']]['status'] = true;
  2586. // $review_step = $this->get_step_review($tr_id);
  2587. // foreach ($review_steps as $k_step => $step) {
  2588. // if ($step=='PAM') {
  2589. if ($value['approve_date_pam']!=NULL) {
  2590. $data_update = array(
  2591. 'ref_project_review_id' => 1,
  2592. 'approve_date' => $value['approve_date_pam']
  2593. );
  2594. $review_result = $this->update_project_tr($tr_id, $data_update);
  2595. $result[$value['proposal_id']]['review_steps'][$key]['step'] = 'PAM';
  2596. $this->set_flag($value['position'], 'Berhasil PAM');
  2597. }
  2598. // } else if ($step=='PAC') {
  2599. if ($value['approve_date_pac']!=NULL) {
  2600. $data_update = array(
  2601. 'ref_project_review_id' => 2,
  2602. 'remarks' => $value['remarks_pac'],
  2603. 'approve_date' => $value['approve_date_pac']
  2604. );
  2605. $review_result = $this->update_project_tr($tr_id, $data_update);
  2606. $result[$value['proposal_id']]['review_steps'][$key]['step'] = 'PAC';
  2607. $this->set_flag($value['position'], 'Berhasil PAC');
  2608. }
  2609. // } else if ($step=='SB') {
  2610. if ($value['approve_date_sb']!=NULL) {
  2611. $data_update = array(
  2612. 'ref_project_review_id' => 3,
  2613. 'remarks' => $value['remarks_sb'],
  2614. 'approve_date' => $value['approve_date_sb']
  2615. );
  2616. $review_result = $this->update_project_tr($tr_id, $data_update);
  2617. $result[$value['proposal_id']]['review_steps'][$key]['step'] = 'SB';
  2618. $this->set_flag($value['position'], 'Berhasil SB');
  2619. }
  2620. // } else if ($step=='CPR') {
  2621. if ($value['approve_date_cpr']!=NULL) {
  2622. $data_update = array(
  2623. 'ref_project_review_id' => 4,
  2624. 'remarks' => $value['remarks_cpr'],
  2625. 'approve_date' => $value['approve_date_cpr']
  2626. );
  2627. $review_result = $this->update_project_tr($tr_id, $data_update);
  2628. $result[$value['proposal_id']]['review_steps'][$key]['step'] = 'CPR';
  2629. $this->set_flag($value['position'], 'Berhasil CPR');
  2630. }
  2631. // } else if ($step=='DP') {
  2632. if ($value['approve_date_dp']!=NULL) {
  2633. $data_update = array(
  2634. 'ref_project_review_id' => 5,
  2635. 'remarks' => $value['remarks_dp'],
  2636. 'approve_date' => $value['approve_date_dp']
  2637. );
  2638. $review_result = $this->update_project_tr($tr_id, $data_update);
  2639. $result[$value['proposal_id']]['review_steps'][$key]['step'] = 'DP';
  2640. $this->set_flag($value['position'], 'Berhasil DP');
  2641. }
  2642. // }
  2643. // }
  2644. // foreach ($tracking_steps as $k_step => $step) {
  2645. // if ($k_step==1) {
  2646. if ($value['update_date_fd']!=NULL) {
  2647. $data_update = array(
  2648. 'ref_tracking_type_id' => 1,
  2649. 'update_date' => $value['update_date_fd']
  2650. );
  2651. $tracking_result = $this->update_tracking($tr_id, $data_update);
  2652. $result[$value['proposal_id']]['tracking_steps'][$key]['step'] = 'Fund Disbursement';
  2653. $this->set_flag($value['position'], 'Berhasil 1');
  2654. }
  2655. // } else if ($k_step==2) {
  2656. if ($value['start_date_pi']!=NULL || $value['end_date_pi']!=NULL) {
  2657. $data_update = array(
  2658. 'ref_tracking_type_id' => 2,
  2659. 'start_date' => $value['start_date_pi'],
  2660. 'end_date' => $value['end_date_pi']
  2661. );
  2662. $tracking_result = $this->update_tracking($tr_id, $data_update);
  2663. $result[$value['proposal_id']]['tracking_steps'][$key]['step'] = 'Project Implementation';
  2664. $this->set_flag($value['position'], 'Berhasil 2');
  2665. }
  2666. // } else if ($k_step==3) {
  2667. if ($value['update_date_crs']!=NULL) {
  2668. $data_update = array(
  2669. 'ref_tracking_type_id' => 3,
  2670. 'update_date' => $value['update_date_crs']
  2671. );
  2672. $tracking_result = $this->update_tracking($tr_id, $data_update);
  2673. $result[$value['proposal_id']]['tracking_steps'][$key]['step'] = 'Completion Report Submission';
  2674. $this->set_flag($value['position'], 'Berhasil 3');
  2675. }
  2676. // } else if ($k_step==4) {
  2677. if ($value['update_date_pc']!=NULL) {
  2678. $data_update = array(
  2679. 'ref_tracking_type_id' => 4,
  2680. 'update_date' => $value['update_date_pc']
  2681. );
  2682. $tracking_result = $this->update_tracking($tr_id, $data_update);
  2683. $result[$value['proposal_id']]['tracking_steps'][$key]['step'] = 'Project Closing';
  2684. $this->set_flag($value['position'], 'Berhasil 4');
  2685. }
  2686. // }
  2687. // }
  2688. }
  2689. }
  2690.  
  2691. echo "<pre>";
  2692. print_r($result);exit;
  2693. }
  2694.  
  2695. function update_project_tr($id,$data=array())
  2696. {
  2697. $project_review_trans = getSingleDataApi('project_review_trans', array(
  2698. 'project_tr_id' => $id,
  2699. 'ref_project_review_id' => $data["ref_project_review_id"]
  2700. ));
  2701.  
  2702. $save["approve_date"] = $data["approve_date"];
  2703. if (!empty($project_review_trans)) {
  2704. $save["user_id_modify"] = 11;
  2705. updateApi('project_review_trans', isset($project_review_trans['id'])?$project_review_trans['id']:'', $save);
  2706. }
  2707. }
  2708.  
  2709. function update_tracking($projectTrId,$data=array())
  2710. {
  2711. $refTrackingTypeId = $data['ref_tracking_type_id'];
  2712. $tracking = $this->ProjectTracking->fetchRow(
  2713. "a.project_tr_id = $projectTrId AND ref_tracking_type_id = $refTrackingTypeId"
  2714. );
  2715. if (!empty($tracking)) {
  2716. if ($refTrackingTypeId==1 || $refTrackingTypeId==3 || $refTrackingTypeId==4) {
  2717. $save_tracking["update_date"] = $data["update_date"];
  2718. } else if ($refTrackingTypeId==2) {
  2719. $save_tracking["start_date_implementation"] = $data["start_date"];
  2720. $save_tracking["end_date_implementation"] = $data["end_date"];
  2721. }
  2722. $save_tracking["user_id_modify"] = 11;
  2723. $id = $this->ProjectTracking->update($save_tracking, isset($tracking["id"])?$tracking["id"]:'');
  2724. // log_tracking($id);
  2725. // $project_id_final = !empty($tracking) ? $tracking['project_id_final'] : '';
  2726. // log_project($projectTrId, "Update Tracking: $project_id_final");
  2727. }
  2728. }
  2729.  
  2730. function counterDailyProposal()
  2731. {
  2732. $start_date = date('Y-m-d').' 00:00:01';
  2733. $end_date = date('Y-m-d').' 23:59:59';
  2734. $data = $this->db->get_where('project_tr', "create_date BETWEEN '$start_date' AND '$end_date'")->num_rows();
  2735. $counter = str_pad($data + 1, 3, 0, STR_PAD_LEFT);
  2736. return $counter;
  2737. }
  2738.  
  2739. function create_proposal($post) {
  2740. $time = date('H:i:s');
  2741. $y = date('Y');
  2742. $m = date('m');
  2743. $d = date('d');
  2744. $daily_counter = $this->counterDailyProposal();
  2745. $temp_id = $y . $m . $d . $daily_counter;
  2746. if ($post['main_committee'] != '-') {
  2747. $main_committee_id = $post['main_committee'];
  2748. } else {
  2749. $main_committee_id = 0;
  2750. }
  2751.  
  2752. if ($post['sub_committee'] != '-') {
  2753. $sub_committee_id = $post['sub_committee'];
  2754. } else {
  2755. $sub_committee_id = null;
  2756. }
  2757.  
  2758. if ($post['proposed_commencement_date'] != '-' && $post['proposed_completion_date'] != '-') {
  2759. $date1 = date_create($post['proposed_commencement_date']);
  2760. $date2 = date_create($post['proposed_completion_date']);
  2761. $diff = date_diff($date1, $date2);
  2762. $six_month = 30 * 6;
  2763. $twelve_month = 30 * 12;
  2764. $one_year = 366;
  2765. if ($diff->d >= $one_year) {
  2766. // duration is > 12 months
  2767. $type_project_durations_id = 1004;
  2768. } else if ($diff->d >= $six_month && $diff->d < $one_year) {
  2769. // duration is 6-12 months
  2770. $type_project_durations_id = 1003;
  2771. } else {
  2772. // duration is < 6 months
  2773. $type_project_durations_id = 1002;
  2774. }
  2775. } else {
  2776. // $type_project_durations_id = 1002;
  2777. $type_project_durations_id = null;
  2778. }
  2779.  
  2780. // Funding Project
  2781. $funding_source = explode('|', $post['funding_source']);
  2782. $funding_source_budget = explode('|', $post['funding_source_budget']);
  2783. $total_funding = 0;
  2784. foreach ($funding_source_budget as $key => $value) {
  2785. $budget = str_replace(',', '', $value);
  2786. $total_funding = $total_funding + $budget;
  2787. }
  2788.  
  2789. // -------------------- Save data transaksi proposal --------------------
  2790. $is_cross_sector = str_replace(' ', '', explode('|', $post['project_classification']))[0];
  2791. $data_transaksi = array(
  2792. 'project_tr_title' => $post['title'] != '-' ? $post['title'] : '',
  2793. 'project_tr_desc' => $post['description'] != '-' ? $post['description'] : '',
  2794. 'proposal_id' => $post['proposal_id'] != '-' ? $post['proposal_id'] : '',
  2795. 'project_id' => $post['previous_project_id'] != '-' ? $post['previous_project_id'] : '',
  2796. 'type_intervention_id' => str_replace(' ', '', explode('|', $post['intervention_type']))[0],
  2797. 'type_nature_corporation_id' => str_replace(' ', '', explode('|', $post['cooperation_type']))[0],
  2798. 'project_commancement_date' => $post['proposed_commencement_date'] != '-' ? $post['proposed_commencement_date'].' '.$time : null,
  2799. 'project_completion_date' => $post['proposed_completion_date'] != '-' ? $post['proposed_completion_date'].' '.$time : null,
  2800. 'is_recurring_project' => $post['is_recurring'] == 'Yes' ? 1 : 0,
  2801. 'is_cross_sector' => $is_cross_sector,
  2802. 'proposal_temp_id' => $temp_id,
  2803. 'project_supporting_sectoral_body_id' => $sub_committee_id,
  2804. 'type_project_durations_id' => $type_project_durations_id,
  2805. 'project_participating' => str_replace(' ', '', explode('|', $post['participants']))[0],
  2806. 'proposal_submission_date' => $post['proposal_submission_date'] != '-' ? $post['proposal_submission_date'] : null,
  2807. 'propose_total_funding' => $total_funding,
  2808. 'is_save_as_draft' => 0,
  2809. 'is_complete' => 0,
  2810. 'is_edit_proposal_temp_id' => '',
  2811. 'data_migration' => 1,
  2812. );
  2813.  
  2814. $tr_id = $this->Direct2db_model->insert($data_transaksi, 'project_tr');
  2815. $act = "Insert Data Proposal Temporary";
  2816. insert_log($act);
  2817. // -------------------- End save data transaksi proposal --------------------
  2818.  
  2819. // -------------------- Save participants --------------------
  2820. $affiliation = isset($post['participants']) ? $post['participants'] : '';
  2821. if ($affiliation)
  2822. {
  2823. $country_id = $post['more_countries_of_participants'];
  2824. if ($country_id != '-') {
  2825. $country_id = explode('|', $country_id);
  2826. foreach ($country_id as $key => $value)
  2827. {
  2828. $country_aff[$key] = array(
  2829. 'project_trx_id' => $tr_id,
  2830. 'country_id' => $value,
  2831. );
  2832. }
  2833.  
  2834. $this->Direct2db_model->insert_batch($country_aff, 'affiliation_tr');
  2835. $act = "Insert Data Country ID Transaction";
  2836. insert_log($act);
  2837. }
  2838. }
  2839. // -------------------- End save participants --------------------
  2840.  
  2841. // -------------------- Save pillars --------------------
  2842. if ($post['pillar'] != '-')
  2843. {
  2844. $pillar_id = explode('|', $post['pillar']);
  2845. foreach ($pillar_id as $key => $value)
  2846. {
  2847. if (count($pillar_id) == 1 || substr_count($value, 'main_') > 0)
  2848. {
  2849. // if pillar just one so make it as main automatically
  2850. $insert_pillar[$key] = array(
  2851. 'project_trx_id' => $tr_id,
  2852. 'type_of_pillars_id' => substr_count($value, 'main_') > 0 ? str_replace('main_', '', $value) : $value,
  2853. 'is_main_pillar' => 1,
  2854. );
  2855. }
  2856. else
  2857. {
  2858. $insert_pillar[$key] = array(
  2859. 'project_trx_id' => $tr_id,
  2860. 'type_of_pillars_id' => $value,
  2861. 'is_main_pillar' => 0,
  2862. );
  2863. }
  2864.  
  2865. }
  2866.  
  2867. $this->Direct2db_model->insert_batch($insert_pillar, 'pillar_tr');
  2868. $act = "Insert Data Pillar Transaction";
  2869. insert_log($act);
  2870. }
  2871. // -------------------- End save pillars --------------------
  2872.  
  2873. // -------------------- Save proponent organizations --------------------
  2874. if ($post['proponent'] != '-')
  2875. {
  2876. $org = explode('|', $post['proponent']);
  2877. foreach ($org as $key => $value)
  2878. {
  2879. if (is_numeric($value)) {
  2880. $proponent_org[$key] = array(
  2881. 'project_trx_id' => $tr_id,
  2882. 'proponent_org_id' => $value,
  2883. 'is_proponent' => 1,
  2884. 'is_agency' => 0,
  2885. );
  2886. } else {
  2887. $is_proponent_exists = $this->db->get_where('proponent_org_mst', "proponent_org_title LIKE '%".$value."%' AND is_delete = 0")->row_array();
  2888. if ($is_proponent_exists) {
  2889. $proponent_org[$key] = array(
  2890. 'project_trx_id' => $tr_id,
  2891. 'proponent_org_id' => $is_proponent_exists['proponent_org_id'],
  2892. 'is_proponent' => 1,
  2893. 'is_agency' => 0,
  2894. );
  2895. } else {
  2896. $this->db->insert('proponent_org_mst', array(
  2897. 'proponent_org_title' => $value,
  2898. 'proponent_org_address' => 'n/a',
  2899. 'user_id_create' => id_user(),
  2900. 'create_date' => date('Y-m-d H:i:s'),
  2901. 'is_proponent' => 1,
  2902. 'is_agency' => 0,
  2903. ));
  2904. $proponent_org_id = $this->db->insert_id();
  2905.  
  2906. $proponent_org[$key] = array(
  2907. 'project_trx_id' => $tr_id,
  2908. 'proponent_org_id' => $proponent_org_id,
  2909. 'is_proponent' => 1,
  2910. 'is_agency' => 0,
  2911. );
  2912. }
  2913. }
  2914. }
  2915.  
  2916. $this->Direct2db_model->insert_batch($proponent_org, 'proponent_org_tr');
  2917. $act = "Insert Data Proponent Organization Transaction";
  2918. insert_log($act);
  2919. }
  2920. // -------------------- End save proponent organizations --------------------
  2921.  
  2922. // -------------------- Save proponent agency --------------------
  2923. if ($post['agency'] != '-')
  2924. {
  2925. $org = explode('|', $post['agency']);
  2926. foreach ($org as $key => $value)
  2927. {
  2928. $proponent_agency[$key] = array(
  2929. 'project_trx_id' => $tr_id,
  2930. 'proponent_org_id' => $value,
  2931. 'is_proponent' => 0,
  2932. 'is_agency' => 1,
  2933. );
  2934. }
  2935.  
  2936. $this->Direct2db_model->insert_batch($proponent_agency, 'proponent_org_tr');
  2937. $act = "Insert Data Proponent Agency Transaction";
  2938. insert_log($act);
  2939. }
  2940. // -------------------- End save proponent agency --------------------
  2941.  
  2942. // -------------------- Save single or cross project --------------------
  2943. $main_data_sectoral = array(
  2944. 'project_trx_id' => $tr_id,
  2945. 'sectoral_body_id' => $main_committee_id,
  2946. 'is_main_sectoral_body' => 1,
  2947. );
  2948.  
  2949. $this->Direct2db_model->insert($main_data_sectoral, 'sectoral_body_tr');
  2950.  
  2951. // add supporting sectoral body if cross sector
  2952. if ($is_cross_sector != 0)
  2953. {
  2954. if ($post['supporting_committee'] != '-')
  2955. {
  2956. $sectoral_body = explode('|',$post['supporting_committee']);
  2957. foreach ($sectoral_body as $key => $value)
  2958. {
  2959. $support_sector[$key] = array(
  2960. 'project_trx_id' => $tr_id,
  2961. 'sectoral_body_id' => $value,
  2962. 'is_main_sectoral_body' => 0,
  2963. );
  2964. }
  2965.  
  2966. $this->Direct2db_model->insert_batch($support_sector, 'sectoral_body_tr');
  2967. $act = "Insert Data Sectoral Body Transaction";
  2968. insert_log($act);
  2969. }
  2970. }
  2971. // -------------------- End single or cross project --------------------
  2972.  
  2973. // -------------------- Save project objective --------------------
  2974. if ($post['project_objective'] != '-')
  2975. {
  2976. $objectives = explode("|", $post['project_objective']);
  2977. foreach ($objectives as $key => $value)
  2978. {
  2979. $objective_tr_data[$key] = array(
  2980. 'project_objectives_trx_name' => $value,
  2981. 'project_trx_id' => $tr_id,
  2982. );
  2983. }
  2984.  
  2985. $this->Direct2db_model->insert_batch($objective_tr_data, 'project_objectives_trx');
  2986. $act = "Insert project objectives";
  2987. insert_log($act);
  2988. }
  2989. // -------------------- End save project objective --------------------
  2990.  
  2991. // -------------------- Save project output --------------------
  2992. if ($post['project_output'] != '-')
  2993. {
  2994. $output = explode('|', $post['project_output']);
  2995. foreach ($output as $key => $value)
  2996. {
  2997. $output_tr_data[$key] = array(
  2998. 'project_result_trx_name' => $value,
  2999. 'project_trx_id' => $tr_id,
  3000. );
  3001. }
  3002. $this->Direct2db_model->insert_batch($output_tr_data, 'project_result_trx');
  3003. $act = "Insert project result";
  3004. insert_log($act);
  3005. }
  3006. // -------------------- End save project output --------------------
  3007.  
  3008. // -------------------- Save funding source --------------------
  3009. if ($post['funding_source'] != '-')
  3010. {
  3011. foreach ($funding_source_budget as $key => $value) {
  3012. $budget_project[$key] = array(
  3013. 'project_trx_id' => $tr_id,
  3014. 'proposal_budget_project' => str_replace(',', '', $value),
  3015. 'funding_source_id' => $funding_source[$key],
  3016. );
  3017. }
  3018.  
  3019. $this->Direct2db_model->insert_batch($budget_project, 'project_funding_source_tr');
  3020. $act = "Insert Data Project Funding Source Transaction";
  3021. insert_log($act);
  3022. }
  3023. // -------------------- End save funding source --------------------
  3024.  
  3025. return $tr_id;
  3026. }
  3027.  
  3028. function update_proposal($id, $post) {
  3029. $data = $this->db->select('*')->get_where('project_tr', array('project_tr_id' => $id))->row_array();
  3030. if ($data) {
  3031. $funding_source = explode('|', $post['funding_source']);
  3032. $funding_source_budget = explode('|', $post['funding_source_budget']);
  3033. $total_funding = 0;
  3034. foreach ($funding_source_budget as $key => $value) {
  3035. $budget = str_replace(',', '', $value);
  3036. $total_funding = $total_funding + $budget;
  3037. }
  3038.  
  3039. // -------------------- Save data transaksi proposal --------------------
  3040. $is_cross_sector = str_replace(' ', '', explode('|', $post['project_classification']))[0];
  3041. $data_transaksi = array(
  3042. 'project_tr_title' => $post['title'] != '-' ? $post['title'] : '',
  3043. 'proposal_id' => $post['proposal_id'] != '-' ? $post['proposal_id'] : '',
  3044. 'proposal_submission_date' => $post['proposal_submission_date'] != '-' ? $post['proposal_submission_date'] : null,
  3045. 'propose_total_funding' => $total_funding,
  3046. 'data_migration' => 1,
  3047. );
  3048.  
  3049. $this->Direct2db_model->update($data_transaksi, $id, 'project_tr', 'project_tr_id');
  3050. $act = "Update Data Proposal Temporary";
  3051. insert_log($act);
  3052. // -------------------- End save file proposal --------------------
  3053.  
  3054. // -------------------- Save pillars --------------------
  3055. if ($post['pillar'] != '-' && $post['pillar'] != '')
  3056. {
  3057. $update_pillar['is_delete'] = 1;
  3058. $this->db->update('pillar_tr', $update_pillar, "project_trx_id = $id");
  3059. $pillar_id = explode('|', $post['pillar']);
  3060. foreach ($pillar_id as $key => $value)
  3061. {
  3062. if (count($pillar_id) == 1 || substr_count($value, 'main_') > 0)
  3063. {
  3064. // if pillar just one so make it as main automatically
  3065. $insert_pillar[$key] = array(
  3066. 'project_trx_id' => $id,
  3067. 'type_of_pillars_id' => substr_count($value, 'main_') > 0 ? str_replace('main_', '', $value) : $value,
  3068. 'is_main_pillar' => 1,
  3069. 'is_delete' => 0,
  3070. );
  3071. }
  3072. else
  3073. {
  3074. $insert_pillar[$key] = array(
  3075. 'project_trx_id' => $id,
  3076. 'type_of_pillars_id' => $value,
  3077. 'is_main_pillar' => 0,
  3078. 'is_delete' => 0,
  3079. );
  3080. }
  3081.  
  3082. }
  3083.  
  3084. $this->Direct2db_model->insert_batch(array_values($insert_pillar), 'pillar_tr');
  3085. $act = "Update Data Pillar Transaction";
  3086. insert_log($act);
  3087. }
  3088. // -------------------- End save pillars --------------------
  3089.  
  3090. // -------------------- Save funding source --------------------
  3091. if ($post['funding_source'] != '-' && $post['funding_source'] != '')
  3092. {
  3093. $update_pillar['is_delete'] = 1;
  3094. $this->db->update('project_funding_source_tr', $update_pillar, "project_trx_id = $id");
  3095. foreach ($funding_source_budget as $key => $value) {
  3096. $budget_project[$key] = array(
  3097. 'project_trx_id' => $id,
  3098. 'proposal_budget_project' => str_replace(',', '', $value),
  3099. 'funding_source_id' => $funding_source[$key],
  3100. 'is_delete' => 0,
  3101. );
  3102. }
  3103.  
  3104. $this->Direct2db_model->insert_batch(array_values($budget_project), 'project_funding_source_tr');
  3105. $act = "Update Data Project Funding Source Transaction";
  3106. insert_log($act);
  3107. }
  3108. // -------------------- End save funding source --------------------
  3109. }
  3110. return $id;
  3111. }
  3112.  
  3113. function insert_attachments($id = '') {
  3114. $data = $this->db->select('*')->get_where('project_tr', array('project_tr_id' => $id))->row_array();
  3115. $total_file_upload = 0;
  3116. if ($data) {
  3117. $proposal_id = $data['proposal_id'];
  3118. $proposal_year = ($data['proposal_submission_date'] != null && $data['proposal_submission_date'] != '-') ? explode('-', $data['proposal_submission_date'])[0] : null;
  3119. if ($proposal_year) {
  3120. $source_path = DOCUMENT_PATH."../source/";
  3121. $path = $source_path.$proposal_year.'/'.str_replace('/', '-', $proposal_id);
  3122. // Baca file-file yg ada di folder Others
  3123. if (file_exists($path.'/Others')) {
  3124. if ($handle = opendir($path.'/Others')) {
  3125. $i = 0;
  3126. while (false !== ($entry = readdir($handle))) {
  3127. if ($entry != "." && $entry != ".." && !is_dir($path.'/Others/'.$entry)) {
  3128. $upload = $this->uploadFile($path.'/Others/'.$entry, UPLOAD_PROPOSAL_ID . $data['proposal_temp_id'] . '/');
  3129. // $migrate_res['attachments']['other'][$i] = $upload;
  3130. $i++;
  3131.  
  3132. if ($upload['status'] == true) {
  3133. $file_project[$i] = array(
  3134. 'project_trx_id' => $data['project_tr_id'],
  3135. 'proposal_file_upload_id' => $upload['file_id'],
  3136. 'files_category_mst_id' => 4, // Other annex
  3137. );
  3138.  
  3139. $total_file_upload++;
  3140. }
  3141. }
  3142. }
  3143.  
  3144. if (isset($file_project)) {
  3145. $this->Direct2db_model->insert_batch($file_project, 'proposal_file_upload_tr');
  3146. $act = "Insert Data File Proposal Temporary Transaction";
  3147. insert_log($act);
  3148. }
  3149. }
  3150. }
  3151. }
  3152. }
  3153.  
  3154. return $total_file_upload;
  3155. }
  3156.  
  3157. function uploadFile($src_path, $dst_path)
  3158. {
  3159. $list_file_type = file_extension();
  3160. if ($src_path)
  3161. {
  3162. $src_path = $src_path;
  3163. $mimetype = mime_content_type($src_path);
  3164. $size = filesize($src_path);
  3165. $seg = explode('/', $src_path);
  3166. $file_name = end($seg);
  3167. $file_seg = explode('.', $file_name);
  3168. $extension = strtolower(end($file_seg));
  3169. if ($size > MAX_FILE_SIZE_UPLOAD)
  3170. {
  3171. $ret['status'] = false;
  3172. $ret['file_name'] = $file_name;
  3173. $ret['message'] = 'File too big';
  3174. }
  3175. else
  3176. {
  3177. if (in_array($extension, $list_file_type))
  3178. {
  3179. $save_file = array(
  3180. 'name' => $file_name,
  3181. 'type' => $mimetype,
  3182. 'tmp_name' => '',
  3183. 'size' => $size,
  3184. );
  3185.  
  3186. $idfile_saved = $this->Direct2db_model->insert($save_file, 'proposal_file_upload');
  3187. // $jam = str_replace(':', '', date('H:i:s'));
  3188. // $folder_name = generate_rand(4) . '-' . $jam;
  3189.  
  3190. if (!file_exists($dst_path))
  3191. {
  3192. mkdir($dst_path, 0755, true);
  3193. }
  3194.  
  3195. $sukses = copy($src_path, $dst_path . $file_name);
  3196. $ret['status'] = true;
  3197. $ret['file_name'] = $file_name;
  3198. $ret['file_id'] = $idfile_saved;
  3199. }
  3200. else
  3201. {
  3202. // $zip = new ZipArchive;
  3203. // $res = $zip->open($src_path);
  3204. // if ($res === TRUE) {
  3205. // $zip->extractTo($dst_path);
  3206. // $zip->close();
  3207. // $ret['status'] = true;
  3208. // $ret['file_id'] = 0;
  3209. // echo 'Zip!';
  3210. // } else {
  3211. $ret['status'] = false;
  3212. $ret['file_name'] = $file_name;
  3213. $ret['message'] = 'Invalid file type';
  3214. // }
  3215. }
  3216. }
  3217. }
  3218. else
  3219. {
  3220. $ret['status'] = false;
  3221. $ret['message'] = 'File path is empty';
  3222. }
  3223.  
  3224. return $ret;
  3225. }
  3226.  
  3227. function assign($id, $do_user_id) {
  3228. // --------------- Get data for assign ---------------
  3229. $data = $this->db->select('project_tr_id, project_tr_title, project_tr_desc,proposal_id, propose_total_funding')
  3230. ->get_where('project_tr', array(
  3231. 'project_tr_id' => $id
  3232. ))->result_array();
  3233.  
  3234. $data['project_tr_id'] = isset($data['project_tr_id']) ? $data['project_tr_id']: '';
  3235. $data['project_tr_title'] = isset($data['project_tr_title']) ? $data['project_tr_title']: '';
  3236. $data['project_tr_desc'] = isset($data['project_tr_desc']) ? $data['project_tr_desc']: '';
  3237. $data['proposal_id'] = isset($data['proposal_id']) ? $data['proposal_id']: '';
  3238.  
  3239. $countries = $this->db->select('country_name')
  3240. ->join('proponent_org_mst b', 'b.proponent_org_id = a.proponent_org_id', 'LEFT')
  3241. ->join('country_mst c', 'c.country_id = b.country_id', 'LEFT')
  3242. ->get_where('proponent_org_tr a', array(
  3243. 'a.project_trx_id' => $id,
  3244. 'a.is_proponent' => 1,
  3245. ))->result_array();
  3246. if (count($countries) > 0) {
  3247. $countries = array_column($countries, 'country_name');
  3248. }
  3249.  
  3250. $merge_country = implode(', ', $countries);
  3251. $replace['url'] = base_url() . "project_proposal/view/$data[project_tr_id]";
  3252. $replace['projectTitle'] = $data['project_tr_title'];
  3253. $replace['proponent_country'] = $merge_country;
  3254. $replace['projectDescription'] = $data['project_tr_desc'];
  3255. $replace['proposal_funding_source'] = (isset($data['propose_total_funding'])) ? money_format_custom('%.2n', $data['propose_total_funding']) : money_format_custom('%.2n', 0);
  3256.  
  3257. $this->load->helper('mail');
  3258. $user_sess = $this->session->userdata('ADM_SESS');
  3259. $tpt_assign = mail_tpt_new(['c.code' => 'ASSIGN'], $replace, $user_sess, 'assign');
  3260. $email_content = !empty($tpt_assign) ? $tpt_assign['content'] : '';
  3261. $assign_detail = !empty($tpt_assign) ? $tpt_assign['details'] : '';
  3262. $do_user = $this->db->select('username')
  3263. ->get_where('view_users_roles a', array(
  3264. 'id_auth_user' => $do_user_id,
  3265. ))->result_array();
  3266.  
  3267. if ($do_user) {
  3268. $email_content = str_replace('{userName}', $do_user['username'], $email_content);
  3269. }
  3270. $email_content = str_replace('{projectTitle}', $data['project_tr_title'], $email_content);
  3271. $email_content = str_replace('{projectDescription}', $data['project_tr_desc'], $email_content);
  3272. // --------------- End Get data for assign ---------------
  3273. $post = array(
  3274. 'id_auth_user' => id_user(),
  3275. 'type' => 'assign',
  3276. 'message' => $email_content,
  3277. 'message_cc' => $email_content,
  3278. 'cc' => isset($assign_detail['email_cc']) ? $assign_detail['email_cc'] : '',
  3279. 'id_cc' => isset($assign_detail['id_cc']) ? $assign_detail['id_cc'] : '',
  3280. 'struc_org_id' => 1067,
  3281. );
  3282. // --------------- Assign Process ---------------
  3283. $ret['error'] = 1;
  3284. $type = 'assign';
  3285.  
  3286. $save["id_auth_user_$type"] = $post['id_auth_user'];
  3287. $save["id_ref_status_approval"] = 0;
  3288. if (!empty($post['id_cc'])) {
  3289. $save["id_auth_user_assign_cc"] = $post['id_cc'];
  3290. }
  3291.  
  3292. $save[$type . "_message"] = $post["message"];
  3293. $save[$type . "_message_cc"] = $post["message_cc"];
  3294. $save["struc_org_id_$type"] = $post['struc_org_id'];
  3295. $save['is_complete'] = 1;
  3296. $save["ref_project_status_code"] = '';
  3297.  
  3298. // Create review step
  3299. $review_step = $this->project_review_step($id, 'save');
  3300. $process = $this->Direct2db_model->update(
  3301. $save,
  3302. $id,
  3303. 'project_tr',
  3304. 'project_tr_id',
  3305. );
  3306. if ($process)
  3307. {
  3308. log_project($id, ucfirst($type) , NULL, $review_step);
  3309. }
  3310. // --------------- End assign Process ---------------
  3311. }
  3312.  
  3313. function generate_proposal_id($id_project, $debug = '')
  3314. {
  3315. $data = getSingleDataApi('project_tr', array(
  3316. 'project_tr_id' => $id_project
  3317. ));
  3318. if ($data)
  3319. {
  3320. $this->load->model('SectoralBodyTr');
  3321. # format :
  3322. # sector/sub_sector/2 digit tahun berjalan/auto-increment mengacu pada sector, reset per tahun/scope
  3323. //sector
  3324. // echo $data['sectoral_body_id'];
  3325. $secBodyTr = getSingleDataApi('sectoral_body_tr', array(
  3326. 'project_trx_id' => $id_project,
  3327. 'is_main_sectoral_body' => 1
  3328. ));
  3329. $secBody = getSingleDataApi('sectoral_body_mst', array(
  3330. 'sectoral_body_id' => $secBodyTr['sectoral_body_id']
  3331. ));
  3332. //subsector
  3333. $secBodyWG = getSingleDataApi('sectoral_body_wg_mst', array(
  3334. 'sectoral_body_wg_id' => $data['project_supporting_sectoral_body_id']
  3335. ));
  3336. //2 digit tahun berjalan
  3337. $year = $data['is_edit_proposal_temp_id'] == 0 ? date('y') : substr($data['proposal_temp_id'], 2, 2);
  3338. //auto-increment mengacu pada sector, reset per tahun
  3339. // $projectTr = getDataApi('project_tr',"proposal_id like '%/$year/%' AND sectoral_body_id = $data[sectoral_body_id] AND project_tr_id != $id_project");
  3340. // $projectTr = $this->SectoralBodyTr->fetchAll("b.proposal_id like '%/$year/%' AND a.sectoral_body_id = $secBodyTr[sectoral_body_id] AND a.project_trx_id != $id_project AND is_main_sectoral_body = 1");
  3341. $projectTr = getDataApi('project_tr', "proposal_id like '$secBody[sector]%/$year/%'");
  3342. // print_r($projectTr);exit;
  3343. $proposal_id = [];
  3344. foreach ($projectTr as $key => $value)
  3345. {
  3346. $proposal = explode('/', $value['proposal_id']);
  3347. $proposal_id[] = (int)$proposal[3];
  3348. }
  3349.  
  3350. if (!empty($proposal_id)) {
  3351. // $ai = count($projectTr)+1;
  3352. $ai = max($proposal_id) + 1;
  3353. } else {
  3354. $ai = 1;
  3355. }
  3356. $ai_hundred = get_number($ai);
  3357. # scope
  3358. $scope = getSingleDataApi('affiliation_mst', array(
  3359. 'affiliation_id' => $data['project_participating']
  3360. ));
  3361. $affiliation_tr = getSingleDataApi('affiliation_tr', array(
  3362. 'project_trx_id' => $id_project
  3363. ));
  3364. $asean_scope = getSingleDataApi('affiliation_mst', array(
  3365. 'affiliation_id' => 6
  3366. ));
  3367. if ($data['project_participating'] == '6')
  3368. { // ASEAN
  3369. if ($affiliation_tr)
  3370. { // ASEAN + Single Country
  3371. $scope_selected = $asean_scope['affiliation_code'];
  3372. }
  3373. else
  3374. {
  3375. $scope_selected = $scope['affiliation_code'];
  3376. }
  3377. }
  3378. else if ($data['project_participating'] == '9')
  3379. { // ASEAN Plus 3
  3380. if ($affiliation_tr)
  3381. { // ASEAN PLus 3 + Single Country
  3382. $scope_selected = $asean_scope['affiliation_code'];
  3383. }
  3384. else
  3385. {
  3386. $scope_selected = $scope['affiliation_code'];
  3387. }
  3388. }
  3389. else if ($data['project_participating'] == '10')
  3390. { // CLMV
  3391. if ($affiliation_tr)
  3392. { // CLMV + Single Country
  3393. $scope_selected = $asean_scope['affiliation_code'];
  3394. }
  3395. else
  3396. {
  3397. $scope_selected = $scope['affiliation_code'];
  3398. }
  3399. }
  3400. else if ($data['project_participating'] == '7')
  3401. { // Single country
  3402. $scope_selected = $scope['affiliation_code'];
  3403. }
  3404. else
  3405. { // others
  3406. $scope_selected = $scope['affiliation_code'];
  3407. }
  3408.  
  3409. if (empty($secBody['sector']))
  3410. {
  3411. $sectoral_code = '0';
  3412. }
  3413. else
  3414. {
  3415. $sectoral_code = $secBody['sector'];
  3416. }
  3417.  
  3418. if (empty($secBodyWG['sub_sector']))
  3419. {
  3420. $sectoral_bw_code = '0';
  3421. }
  3422. else
  3423. {
  3424. $sectoral_bw_code = $secBodyWG['sub_sector'];
  3425. }
  3426.  
  3427. $ret = $sectoral_code . '/' . $sectoral_bw_code . '/' . $year . '/' . $ai_hundred . '/' . $scope_selected;
  3428. }
  3429. return $ret;
  3430. }
  3431.  
  3432. function project_review_step($project_tr_id, $process = '')
  3433. {
  3434. if ($project_tr_id)
  3435. {
  3436. $project = $this->db->select('a.propose_total_funding, a.is_recurring_project, b.funding_source_id')
  3437. ->join('project_funding_source_tr b', 'b.project_trx_id = a.project_tr_id', 'LEFT')
  3438. ->get_where('project_tr a', array(
  3439. 'a.project_tr_id' => $project_tr_id,
  3440. ))->result_array();
  3441. $propose_total_funding = $project[0]['propose_total_funding'];
  3442. $is_recurring_project = $project[0]['is_recurring_project'];
  3443. // print_r($project);exit;
  3444. if (!empty($project[0]['funding_source_id']))
  3445. {
  3446. foreach ($project as $key => $value)
  3447. {
  3448. $funding_source_ids[] = $value['funding_source_id'];
  3449. }
  3450. $funding = " IN (" . implode(',', $funding_source_ids) . ")";
  3451. }
  3452. else
  3453. {
  3454. $funding = 'IS NULL';
  3455. }
  3456.  
  3457. if (isset($propose_total_funding)) {
  3458. $is_budget_over_100k = $propose_total_funding >= 100000 ? 1 : 0;
  3459. } else {
  3460. $is_budget_over_100k = 0;
  3461. }
  3462.  
  3463. if (isset($is_recurring_project)) {
  3464. $is_first_project = $is_recurring_project ? 0 : 1;
  3465. } else {
  3466. $is_first_project = 0;
  3467. }
  3468.  
  3469. $data = $this->db->select('c.id, c.code,c.review_sort, c.total_day_single_sector, c.total_day_cross_sector, c.is_working_day')
  3470. ->distinct()
  3471. ->join('project_review_step_detail b', 'b.project_review_step_id = a.id AND b.is_delete = 0', 'RIGHT')
  3472. ->join('ref_project_review c', 'c.id = b.ref_project_review_id AND c.is_delete = 0', 'RIGHT')
  3473. ->where("funding_source_id $funding")
  3474. ->get_where('project_review_step a', array(
  3475. 'is_first_project' => $is_first_project,
  3476. 'is_budget_over_100k' => $is_budget_over_100k,
  3477. ))->result_array();
  3478.  
  3479. $date = date('Y-m-d');
  3480. $time = ' ' . date('H:i:s');
  3481. if ($process == 'save')
  3482. {
  3483. $step = [];
  3484. foreach ($data as $key => $value)
  3485. {
  3486.  
  3487. if (!$value['id']) continue;
  3488.  
  3489. $save["project_tr_id"] = $project_tr_id;
  3490. $save["ref_project_review_id"] = $value['id'];
  3491. $save["start_date"] = $key == 0 ? ($date . $time) : NULL;
  3492. if (isset($project['is_cross_sector'])) {
  3493. $save["duration_day"] = $project['is_cross_sector'] == 1 ? $value['total_day_cross_sector'] : $value['total_day_single_sector'];
  3494. } else {
  3495. $save["duration_day"] = $value['total_day_single_sector'];
  3496. }
  3497.  
  3498. $save["is_working_day"] = $value['is_working_day'];
  3499. $save["project_review_trans_status_id"] = $key == 0 ? 1 : 0;
  3500. if ($value['is_working_day'] == 1)
  3501. {
  3502. $end_date = get_working_day_date($date, $save['duration_day']);
  3503. }
  3504. else
  3505. {
  3506. $end_date = date('Y-m-d', strtotime("+$save[duration_day] days", strtotime($date)));
  3507. }
  3508. $save["end_date"] = $key == 0 ? ($end_date . $time) : NULL;
  3509. $cek = $this->db->select('id')
  3510. ->get_where('project_review_trans', array(
  3511. 'project_tr_id' => $project_tr_id,
  3512. 'ref_project_review_id' => $save['ref_project_review_id'],
  3513. ))->row_array();
  3514.  
  3515. if (isset($cek['id'])) {
  3516. $this->Direct2db_model->update($save, $cek['id'], 'project_review_trans', 'id');
  3517. } else {
  3518. $this->Direct2db_model->insert($save, 'project_review_trans');
  3519. }
  3520. $step[] = $value['code'];
  3521. $ids[] = $value['id'];
  3522. }
  3523.  
  3524. if (isset($ids))
  3525. {
  3526. $del = $this->db->select('id')
  3527. ->where_not_in('ref_project_review_id', $ids)
  3528. ->get_where('project_review_trans', array(
  3529. 'project_tr_id' => $project_tr_id,
  3530. ))->result_array();
  3531. if (count($del) > 0) {
  3532. foreach ($del as $key => $value) {
  3533. $this->Direct2db_model->update(array('is_delete' => 1), $value['id'], 'project_review_trans', 'id');
  3534. }
  3535. }
  3536. }
  3537. return true;
  3538. }
  3539.  
  3540. // debugvar($data);
  3541. return $data;
  3542. }
  3543. }
  3544.  
  3545. function get_step_review($project_tr_id)
  3546. {
  3547. if ($project_tr_id)
  3548. {
  3549. $extra['table_join'] = array('ref_project_review b');
  3550. $extra['where_join'] = array('a.ref_project_review_id = b.id');
  3551. $extra['select'] = "a.*, b.code, b.name";
  3552. $extra['sort'] = "ASC";
  3553. $extra['field_name'] = "review_sort";
  3554. $review_step = getDataApi('project_review_trans', "project_tr_id = $project_tr_id", $extra);
  3555. return array_column($review_step, 'name');
  3556. }
  3557. }
  3558.  
  3559. function finish($id, $approve_date)
  3560. {
  3561. $data = $this->db->select('proposal_submission_date, proposal_id')
  3562. ->get_where('project_tr', array(
  3563. 'project_tr_id' => $id,
  3564. ))->row_array();
  3565. $ret['status'] = false;
  3566. $ret['total_files'] = 0;
  3567. if ($data) {
  3568. $post = array(
  3569. 'total_weighted_score' => '61.21',
  3570. 'approve_date' => ($approve_date == '-' || empty($approve_date))? date('Y-m-d') : $approve_date,
  3571. );
  3572.  
  3573. $activeReview = $this->db->select('a.id, a.project_tr_id, a.ref_project_review_id, a.start_date, a.end_date, a.project_review_trans_status_id, a.is_working_day, a.duration_day, a.finish_date, b.code as review,c.isRevision,c.isCompleteRevision,c.isReject,c.isRejectRevision,c.revision_complete_reason,c.remarks_complete,c.revision_reason,c.remarks, c.revision_request_user_id, c.revision_approve_user_id,c.id as finish_id')
  3574. ->join('ref_project_review b', 'b.id = a.ref_project_review_id', 'left')
  3575. ->join('project_review_trans_finish c', 'c.project_review_trans_id = a.id', 'left')
  3576. ->get_where('project_review_trans a', array(
  3577. 'project_tr_id' => $id,
  3578. 'project_review_trans_status_id' => 1,
  3579. ))->row_array();
  3580. if ($activeReview) {
  3581. if ($post) {
  3582. $this->Direct2db_model->update(
  3583. array('ref_project_status_code' => ''),
  3584. $id,
  3585. 'project_tr',
  3586. 'project_tr_id',
  3587. );
  3588. $save["project_review_trans_id"] = isset($activeReview["id"]) ? $activeReview["id"] : '';
  3589. if (isset($post["total_weighted_score"])) {
  3590. $save["total_weighted_score"] = $post["total_weighted_score"];
  3591. }
  3592.  
  3593. if (isset($post["remarks"])) {
  3594. $save["remarks"] = $post["remarks"];
  3595. }
  3596.  
  3597. $review = isset($activeReview["review"])?$activeReview["review"]:'';
  3598. $files = [];
  3599.  
  3600. $source_path = DOCUMENT_PATH."../source/";
  3601. $proposal_year = $data['proposal_submission_date'] != '-' ? explode('-', $data['proposal_submission_date'])[0] : null;
  3602. if ($proposal_year) {
  3603. $path = $source_path.$proposal_year.'/'.str_replace('/', '-', $data['proposal_id'])."/Review/$review";
  3604.  
  3605. // Baca file-file yg ada di folder Review
  3606. if (file_exists($path)) {
  3607. if ($handle = opendir($path)) {
  3608. $i = 0;
  3609. while (false !== ($entry = readdir($handle))) {
  3610. if ($entry != "." && $entry != ".." && !is_dir($path.'/'.$entry)) {
  3611. $upload = $this->uploadFile($path.'/'.$entry, DOCUMENT_REVIEW_PATH."/".$id.'/'.$review.'/');
  3612. $migrate_res['attachments']['other'][$i] = $upload;
  3613. $i++;
  3614.  
  3615. if ($upload['status'] == true) {
  3616. $ret['total_files']++;
  3617.  
  3618. $files[$i]["name"] = $entry;
  3619. $files[$i]["category"] = 4;
  3620. }
  3621. }
  3622. }
  3623. }
  3624. }
  3625. }
  3626.  
  3627. if (!empty($files)) {
  3628. $save["files"] = json_encode($files);
  3629. }
  3630. if (isset($activeReview['finish_id'])) {
  3631. $finish_id = $this->Direct2db_model->update(
  3632. $save,
  3633. $activeReview['finish_id'],
  3634. 'project_review_trans_finish',
  3635. 'id',
  3636. );
  3637. } else {
  3638. $finish_id = $this->Direct2db_model->insert(
  3639. $save,
  3640. 'project_review_trans_finish',
  3641. );
  3642. }
  3643. if (!isset($post["request_reject"])
  3644. || isset($post["request_reject"]) && $post["request_reject"] == ''
  3645. ) {
  3646. $update["project_review_trans_status_id"] = 4; //complete
  3647. $update["finish_date"] = date("Y-m-d H:i:s");
  3648. $update['approve_date'] = isset($post['approve_date'])?$post['approve_date']:'';
  3649. if (isset($activeReview['id'])) {
  3650. $finish_id = $this->Direct2db_model->update(
  3651. $update,
  3652. $activeReview['id'],
  3653. 'project_review_trans',
  3654. 'id',
  3655. );
  3656. } else {
  3657. $finish_id = $this->Direct2db_model->insert(
  3658. $update,
  3659. 'project_review_trans',
  3660. );
  3661. }
  3662.  
  3663. $nextReview = $this->db->select('a.*, b.code as review')
  3664. ->join('ref_project_review b', 'b.id = a.ref_project_review_id', 'left')
  3665. ->order_by('b.review_sort', 'asc')
  3666. ->get_where('project_review_trans a', array(
  3667. 'project_tr_id' => $id,
  3668. 'project_review_trans_status_id' => 0,
  3669. ))->row_array();
  3670. if ($nextReview) {
  3671. $next["project_review_trans_status_id"] = 1; // active
  3672. $next["start_date"] = $update["finish_date"];
  3673. $next["end_date"] = get_working_day_date($update["finish_date"], $nextReview["duration_day"], $nextReview["is_working_day"]) . " " .date("H:i:s");
  3674. $this->Direct2db_model->update(
  3675. $next,
  3676. $nextReview['id'],
  3677. 'project_review_trans',
  3678. 'id',
  3679. );
  3680. } else {
  3681. $projectId = generate_project_id($id);
  3682. $this->Direct2db_model->update(
  3683. array(
  3684. "project_id_final" => $projectId,
  3685. 'ref_project_status_code' => 'FR'
  3686. ),
  3687. $id,
  3688. 'project_tr',
  3689. 'project_tr_id',
  3690. );
  3691. // $this->ProjectTr->updateStatus($id, "FR");
  3692. }
  3693. }
  3694.  
  3695. $review = isset($activeReview['review']) ? $activeReview['review'] : '';
  3696. $id_active_review = isset($activeReview["id"]) ? $activeReview["id"] : '';
  3697. $project_log_id = log_project($id, "Finish $review", null, null, ['approve_date'=>$post['approve_date']]);
  3698. log_finish($project_log_id, $id_active_review, $finish_id);
  3699.  
  3700. $ret['status'] = true;
  3701. }
  3702. }
  3703. }
  3704.  
  3705. return $ret;
  3706. }
  3707.  
  3708. function project_tracking($projectTrId='', $refTrackingTypeId='', $status='', $update_date = null, $remarks = null)
  3709. {
  3710. $ret['total_files'] = 0;
  3711. // $data = $this->ProjectTr->fetchRow("a.project_tr_id = $projectTrId");
  3712. $data = $this->db->select('proposal_submission_date, project_id_final, proposal_id')
  3713. ->get_where('project_tr', array(
  3714. 'project_tr_id' => $projectTrId,
  3715. ))->row_array();
  3716. $tracking = $this->db->select('id')
  3717. ->get_where('project_tracking', array(
  3718. 'project_tr_id' => $projectTrId,
  3719. 'ref_tracking_type_id' => $refTrackingTypeId,
  3720. ))->row_array();
  3721.  
  3722. if ($tracking) {
  3723. $data = array_merge($data, $tracking);
  3724. }
  3725.  
  3726. $post = array(
  3727. // 'folder_temp_name' => 'xaHi-102812',
  3728. // 'next_no' => '2',
  3729. // 'files_tr_id[]' => '0',
  3730. // 'files_id[]' => '13749',
  3731. // 'files_name[]' => 'soal-logika-kandidat-v3.pdf',
  3732. // 'category_files[]' => '4',
  3733. // 'update_date' => date('Y-m-d'),
  3734. 'update_date' => ($update_date == '-' || empty($update_date))? date('Y-m-d') : $update_date,
  3735. 'remarks' => ($remarks == '-' || empty($remarks))? '' : $remarks,
  3736. );
  3737. $is_do = isGroup("DO");
  3738. if ($post) {
  3739. $save["project_tr_id"] = $projectTrId;
  3740. $save["ref_tracking_type_id"] = $refTrackingTypeId;
  3741. $save["update_date"] = $post["update_date"];
  3742. $save["remarks"] = $post["remarks"];
  3743.  
  3744.  
  3745. if (isset($post["start_date_implementation"]) && !empty($post["start_date_implementation"])) {
  3746. $save["start_date_implementation"] = $post["start_date_implementation"];
  3747. } else {
  3748. // $save["start_date_implementation"] = '';
  3749. }
  3750. if (isset($post["end_date_implementation"]) && !empty($post["end_date_implementation"])) {
  3751. $save["end_date_implementation"] = $post["end_date_implementation"];
  3752. } else {
  3753. // $save["end_date_implementation"] = '';
  3754. }
  3755.  
  3756. $files = [];
  3757. $source_path = DOCUMENT_PATH."../source/";
  3758. $proposal_year = $data['proposal_submission_date'] != '-' ? explode('-', $data['proposal_submission_date'])[0] : null;
  3759. if ($refTrackingTypeId=='3') {
  3760. if ($proposal_year) {
  3761. $path = $source_path.$proposal_year.'/'.str_replace('/', '-', $data['proposal_id'])."/Tracking";
  3762.  
  3763. // Baca file-file yg ada di folder Review
  3764. if (file_exists($path)) {
  3765. if ($handle = opendir($path)) {
  3766. $i = 0;
  3767. while (false !== ($entry = readdir($handle))) {
  3768. if ($entry != "." && $entry != ".." && !is_dir($path.'/'.$entry)) {
  3769. $upload = $this->uploadFile($path.'/'.$entry, DOCUMENT_TRACKING_PATH . "/" . $refTrackingTypeId . "/" . $projectTrId . "/");
  3770. $migrate_res['attachments']['other'][$i] = $upload;
  3771. $i++;
  3772.  
  3773. if ($upload['status'] == true) {
  3774. $ret['total_files']++;
  3775.  
  3776. $files[$i]["name"] = $entry;
  3777. $files[$i]["category"] = 4;
  3778. }
  3779. }
  3780. }
  3781. }
  3782. }
  3783. }
  3784. }
  3785.  
  3786. if (isset($post["files_name_edit"])) {
  3787. $key = isset($key) ? $key++ : 1;
  3788. foreach ($post["files_name_edit"] as $k => $fname) {
  3789. $files[$key + $k]["name"] = $fname;
  3790. $files[$key + $k]["category"] = (int) $post["category_edit"][$k];
  3791. }
  3792. }
  3793.  
  3794. if (!empty($files)) {
  3795. $save["files"] = json_encode($files);
  3796. }
  3797.  
  3798. if ($refTrackingTypeId == 4) {
  3799. if ($is_do) {
  3800. $save["id_auth_user_request"] = id_user();
  3801. $save["id_ref_status_approval"] = 1; //request
  3802. $save["remarks_do"] = $post["remarks"];
  3803. } else {
  3804. $save["remarks"] = $post["remarks"];
  3805. $save["id_auth_user_request"] = id_user();
  3806. $save["id_ref_status_approval"] = 2; //2 approve : 3 reject
  3807. }
  3808. }
  3809.  
  3810. $project_id_final = !empty($data['project_id_final']) ? $data['project_id_final'] : '';
  3811. if (isset($tracking["id"])) {
  3812. $id = $this->Direct2db_model->update(
  3813. $save,
  3814. $tracking["id"],
  3815. 'project_tracking',
  3816. 'id',
  3817. );
  3818. } else {
  3819. $id = $this->Direct2db_model->insert(
  3820. $save,
  3821. 'project_tracking',
  3822. );
  3823. }
  3824. log_tracking($id);
  3825. log_project($projectTrId, "Update Tracking: $project_id_final");
  3826. if ($refTrackingTypeId == 4) {
  3827. $code = $is_do ? "RCT" : "CT";
  3828. } else {
  3829. $code = "UT";
  3830. }
  3831.  
  3832. $this->Direct2db_model->update(
  3833. array(
  3834. 'ref_project_status_code' => $code
  3835. ),
  3836. $projectTrId,
  3837. 'project_tr',
  3838. 'project_tr_id',
  3839. );
  3840. $ret["error"] = 0;
  3841.  
  3842. if ($status=='Implemented' && $refTrackingTypeId!=2) {
  3843. $this->project_tracking($projectTrId, $refTrackingTypeId+1);
  3844. } else if ($status=='Completed' && $refTrackingTypeId!=4) {
  3845. $this->project_tracking($projectTrId, $refTrackingTypeId+1, "Completed");
  3846. }
  3847. return $ret;
  3848. }
  3849. }
  3850.  
  3851. function update_assign() {
  3852. $data = array(
  3853. array('project_tr_id' => 222, 'division_id' => 2054),
  3854. array('project_tr_id' => 233, 'division_id' => 2054),
  3855. array('project_tr_id' => 292, 'division_id' => 2054),
  3856. array('project_tr_id' => 386, 'division_id' => 1022),
  3857. array('project_tr_id' => 698, 'division_id' => 1008),
  3858. array('project_tr_id' => 699, 'division_id' => 1008),
  3859. array('project_tr_id' => 1064, 'division_id' => 1008),
  3860. array('project_tr_id' => 1065, 'division_id' => 1008),
  3861. );
  3862. foreach ($data as $key => $value) {
  3863. $id = $value['project_tr_id'];
  3864. $id_division = $value['division_id'];
  3865.  
  3866. // --------------- Get data for assign ---------------
  3867. $data = $this->db->select('project_tr_id, project_tr_title, project_tr_desc,proposal_id, propose_total_funding,is_recurring_project')
  3868. ->get_where('project_tr', array(
  3869. 'project_tr_id' => $id
  3870. ))->row_array();
  3871. $data['project_tr_id'] = isset($data['project_tr_id']) ? $data['project_tr_id']: '';
  3872. $data['project_tr_title'] = isset($data['project_tr_title']) ? $data['project_tr_title']: '';
  3873. $data['project_tr_desc'] = isset($data['project_tr_desc']) ? $data['project_tr_desc']: '';
  3874. $data['proposal_id'] = isset($data['proposal_id']) ? $data['proposal_id']: '';
  3875.  
  3876. if ($id_division) {
  3877. $this->db->select('id_auth_user');
  3878. $user_ids = $this->db->get_where('auth_user', array(
  3879. 'struc_org_id' => $id_division,
  3880. 'is_delete' => 0,
  3881. ))->result_array();
  3882. }
  3883.  
  3884. if (isset($user_ids[0])) {
  3885. $id_user = array_column($user_ids, 'id_auth_user');
  3886. $do_user_id = $id_user[0];
  3887.  
  3888. $countries = $this->db->select('country_name')
  3889. ->join('proponent_org_mst b', 'b.proponent_org_id = a.proponent_org_id', 'LEFT')
  3890. ->join('country_mst c', 'c.country_id = b.country_id', 'LEFT')
  3891. ->get_where('proponent_org_tr a', array(
  3892. 'a.project_trx_id' => $id,
  3893. 'a.is_proponent' => 1,
  3894. ))->result_array();
  3895. if (count($countries) > 0) {
  3896. $countries = array_column($countries, 'country_name');
  3897. }
  3898.  
  3899. $merge_country = implode(', ', $countries);
  3900. $replace['url'] = base_url() . "project_proposal/view/$data[project_tr_id]";
  3901. $replace['projectTitle'] = $data['project_tr_title'];
  3902. $replace['proponent_country'] = $merge_country;
  3903. $replace['projectDescription'] = $data['project_tr_desc'];
  3904. $replace['proposal_funding_source'] = (isset($data['propose_total_funding'])) ? money_format_custom('%.2n', $data['propose_total_funding']) : money_format_custom('%.2n', 0);
  3905.  
  3906. $this->load->helper('mail');
  3907. $user_sess = $this->session->userdata('ADM_SESS');
  3908. $tpt_assign = mail_tpt_new(['c.code' => 'ASSIGN'], $replace, $user_sess, 'assign');
  3909. $email_content = !empty($tpt_assign) ? $tpt_assign['content'] : '';
  3910. $do_user = $this->db->select('username')
  3911. ->get_where('view_users_roles a', array(
  3912. 'id_auth_user' => $do_user_id,
  3913. ))->row_array();
  3914.  
  3915. if ($do_user) {
  3916. $email_content = str_replace('{userName}', $do_user['username'], $email_content);
  3917. }
  3918. $email_content = str_replace('{project_tr_title}', $data['project_tr_title'], $email_content);
  3919. $email_content = str_replace('{proposal_id}', $data['proposal_id'], $email_content);
  3920.  
  3921. if ($data['is_recurring_project'] == 1) {
  3922. $email_content = str_replace('{is_recurring}', 'Yes', $email_content);
  3923. } else {
  3924. $email_content = str_replace('{is_recurring}', 'No', $email_content);
  3925. }
  3926.  
  3927. // --------------- End Get data for assign ---------------
  3928. echo "UPDATE project_tr SET id_ref_status_approval = 0, id_auth_user_assign = '$do_user_id', struc_org_id_assign = '$id_division' WHERE project_tr_id = $id; <br>";
  3929. // echo "UPDATE project_tr SET id_ref_status_approval = 0, id_auth_user_assign = '$do_user_id', struc_org_id_assign = '$id_division', assign_message = '$email_content', assign_message_cc = '$email_content' WHERE project_tr_id = $id; <br>";
  3930. } else {
  3931. echo "UPDATE project_tr SET id_ref_status_approval = 0, struc_org_id_assign = '$id_division' WHERE project_tr_id = $id; <br>";
  3932. }
  3933. }
  3934. // print_r('');exit;
  3935. }
  3936.  
  3937. function fix_missing_step_review()
  3938. {
  3939. echo "<pre>";
  3940.  
  3941. $result = [];
  3942. $broken_datas = array(
  3943. array('project_tr_id' => 2489, 'proposal_id' => 'SEM/SEM/21/001/REG', 'origin_funding_source_id' => 1051,'copy_funding_step_review_from_id' => null, 'new_funding_source_id' => 1051, 'status_scdc' => 'Ongoing'),
  3944. array('project_tr_id' => 3687, 'proposal_id' => 'ASC/ASC/15/002/REG', 'origin_funding_source_id' => 2081,'copy_funding_step_review_from_id' => null, 'new_funding_source_id' => 1024, 'status_scdc' => 'Completed'),
  3945. array('project_tr_id' => 4478, 'proposal_id' => 'TRC/MON/16/008/REG', 'origin_funding_source_id' => 2072,'copy_funding_step_review_from_id' => 1051, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  3946. array('project_tr_id' => 4483, 'proposal_id' => 'TRC/SCR/16/007/REG', 'origin_funding_source_id' => 1050,'copy_funding_step_review_from_id' => null, 'new_funding_source_id' => 1051, 'status_scdc' => 'Ongoing'),
  3947. array('project_tr_id' => 4466, 'proposal_id' => 'TRC/CYB/14/002/REG', 'origin_funding_source_id' => 2073,'copy_funding_step_review_from_id' => 1051, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  3948. array('project_tr_id' => 4107, 'proposal_id' => 'GCP/GEN/19/005/REG', 'origin_funding_source_id' => 2090,'copy_funding_step_review_from_id' => null, 'new_funding_source_id' => 1059, 'status_scdc' => 'Completed'),
  3949. array('project_tr_id' => 4171, 'proposal_id' => 'n/a', 'origin_funding_source_id' => 2075,'copy_funding_step_review_from_id' => 1019, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  3950. array('project_tr_id' => 4172, 'proposal_id' => 'n/a', 'origin_funding_source_id' => 2075,'copy_funding_step_review_from_id' => 1019, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  3951. array('project_tr_id' => 4173, 'proposal_id' => 'n/a', 'origin_funding_source_id' => 2075,'copy_funding_step_review_from_id' => 1019, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  3952. array('project_tr_id' => 4417, 'proposal_id' => 'SCT/FST/12/008/REG', 'origin_funding_source_id' => 2075,'copy_funding_step_review_from_id' => 1019, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  3953. array('project_tr_id' => 4424, 'proposal_id' => 'SCT/INF/13/0013/REG', 'origin_funding_source_id' => 2079,'copy_funding_step_review_from_id' => 1024, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  3954. array('project_tr_id' => 4427, 'proposal_id' => 'SCT/MST/10/002/REG', 'origin_funding_source_id' => 2085,'copy_funding_step_review_from_id' => null, 'new_funding_source_id' => 1023, 'status_scdc' => 'Completed'),
  3955. array('project_tr_id' => 3625, 'proposal_id' => 'AGF/LIV/13/0010/REG', 'origin_funding_source_id' => 2071,'copy_funding_step_review_from_id' => 1056, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  3956. array('project_tr_id' => 4148, 'proposal_id' => 'INF/ENR/13/001/REG', 'origin_funding_source_id' => 2078,'copy_funding_step_review_from_id' => null, 'new_funding_source_id' => 1025, 'status_scdc' => 'Completed'),
  3957. array('project_tr_id' => 4136, 'proposal_id' => 'IND/SME/14/002/REG', 'origin_funding_source_id' => 2080,'copy_funding_step_review_from_id' => null, 'new_funding_source_id' => 1037, 'status_scdc' => 'Completed'),
  3958. array('project_tr_id' => 4139, 'proposal_id' => 'IND/SME/16/003/REG', 'origin_funding_source_id' => 2080,'copy_funding_step_review_from_id' => null, 'new_funding_source_id' => 1037, 'status_scdc' => 'Completed'),
  3959. array('project_tr_id' => 4143, 'proposal_id' => 'IND/SME/16/007/REG', 'origin_funding_source_id' => 2078,'copy_funding_step_review_from_id' => null, 'new_funding_source_id' => 1025, 'status_scdc' => 'Completed'),
  3960. array('project_tr_id' => 4144, 'proposal_id' => 'IND/SME/17/001/REG', 'origin_funding_source_id' => 2074,'copy_funding_step_review_from_id' => null, 'new_funding_source_id' => 2061, 'status_scdc' => 'Ongoing'),
  3961. array('project_tr_id' => 4059, 'proposal_id' => 'FIN/BON/09/002/JAF', 'origin_funding_source_id' => 2077,'copy_funding_step_review_from_id' => 1024, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  3962. array('project_tr_id' => 4060, 'proposal_id' => 'FIN/BON/09/003/JAF', 'origin_funding_source_id' => 2077,'copy_funding_step_review_from_id' => 1024, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  3963. array('project_tr_id' => 4048, 'proposal_id' => 'ETF/ICT/13/004/REG', 'origin_funding_source_id' => 2078,'copy_funding_step_review_from_id' => null, 'new_funding_source_id' => 1025, 'status_scdc' => 'Completed'),
  3964. array('project_tr_id' => 4049, 'proposal_id' => 'ETF/ICT/14/002/REG', 'origin_funding_source_id' => 2078,'copy_funding_step_review_from_id' => null, 'new_funding_source_id' => 1025, 'status_scdc' => 'Completed'),
  3965. array('project_tr_id' => 4050, 'proposal_id' => 'ETF/ICT/14/003/REG', 'origin_funding_source_id' => 2080,'copy_funding_step_review_from_id' => null, 'new_funding_source_id' => 1037, 'status_scdc' => 'Completed'),
  3966. array('project_tr_id' => 4062, 'proposal_id' => 'FIN/BON/09/005/JAF', 'origin_funding_source_id' => 2077,'copy_funding_step_review_from_id' => 1024, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  3967. array('project_tr_id' => 4061, 'proposal_id' => 'FIN/BON/09/004/JAF', 'origin_funding_source_id' => 2077,'copy_funding_step_review_from_id' => 1024, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  3968. array('project_tr_id' => 4115, 'proposal_id' => 'GEN/MLT/13/002/REG', 'origin_funding_source_id' => 2079,'copy_funding_step_review_from_id' => 1024, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  3969. array('project_tr_id' => 4093, 'proposal_id' => 'FIN/STU/14/001/JAF', 'origin_funding_source_id' => 2077,'copy_funding_step_review_from_id' => 1024, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  3970. array('project_tr_id' => 4094, 'proposal_id' => 'FIN/STU/14/001/JAF', 'origin_funding_source_id' => 2077,'copy_funding_step_review_from_id' => 1024, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  3971. array('project_tr_id' => 3613, 'proposal_id' => 'AGF/FIS/17/011/REG', 'origin_funding_source_id' => 2080,'copy_funding_step_review_from_id' => null, 'new_funding_source_id' => 1037, 'status_scdc' => 'Completed'),
  3972. array('project_tr_id' => 3615, 'proposal_id' => 'AGF/FOR/17/001/REG', 'origin_funding_source_id' => 2078,'copy_funding_step_review_from_id' => null, 'new_funding_source_id' => 1025, 'status_scdc' => 'Completed'),
  3973. array('project_tr_id' => 3619, 'proposal_id' => 'AGF/FOS/13/0013/REG', 'origin_funding_source_id' => 2071,'copy_funding_step_review_from_id' => 1056, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  3974. array('project_tr_id' => 3622, 'proposal_id' => 'AGF/FR/13/001/REG', 'origin_funding_source_id' => 2078,'copy_funding_step_review_from_id' => null, 'new_funding_source_id' => 1025, 'status_scdc' => 'Completed'),
  3975. array('project_tr_id' => 3591, 'proposal_id' => 'AGF/AGR/15/011/REG', 'origin_funding_source_id' => 2078,'copy_funding_step_review_from_id' => null, 'new_funding_source_id' => 1025, 'status_scdc' => 'Completed'),
  3976. array('project_tr_id' => 3594, 'proposal_id' => 'AGF/AGR/17/009/REG', 'origin_funding_source_id' => 2078,'copy_funding_step_review_from_id' => null, 'new_funding_source_id' => 1025, 'status_scdc' => 'Completed'),
  3977. array('project_tr_id' => 4428, 'proposal_id' => 'SCT/MST/13/004/REG', 'origin_funding_source_id' => 2085,'copy_funding_step_review_from_id' => null, 'new_funding_source_id' => 1023, 'status_scdc' => 'Completed'),
  3978. array('project_tr_id' => 4525, 'proposal_id' => 'TRN/FAC/12/006/REG', 'origin_funding_source_id' => 2078,'copy_funding_step_review_from_id' => null, 'new_funding_source_id' => 1025, 'status_scdc' => 'Completed'),
  3979. array('project_tr_id' => 4083, 'proposal_id' => 'FIN/STU/09/009/JAF', 'origin_funding_source_id' => 2077,'copy_funding_step_review_from_id' => 1024, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  3980. array('project_tr_id' => 4132, 'proposal_id' => 'IND/SME/12/008/REG', 'origin_funding_source_id' => 2078,'copy_funding_step_review_from_id' => null, 'new_funding_source_id' => 1025, 'status_scdc' => 'Completed'),
  3981. array('project_tr_id' => 4087, 'proposal_id' => 'FIN/STU/12/004/JAF', 'origin_funding_source_id' => 2077,'copy_funding_step_review_from_id' => 1024, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  3982. array('project_tr_id' => 4460, 'proposal_id' => 'TRA/STA/19/003/REG', 'origin_funding_source_id' => 2080,'copy_funding_step_review_from_id' => null, 'new_funding_source_id' => 1037, 'status_scdc' => 'Ongoing'),
  3983. array('project_tr_id' => 4463, 'proposal_id' => 'TRA/TRA/19/004/REG', 'origin_funding_source_id' => 2080,'copy_funding_step_review_from_id' => null, 'new_funding_source_id' => 1037, 'status_scdc' => 'Ongoing'),
  3984. array('project_tr_id' => 4079, 'proposal_id' => 'FIN/STU/09/0012/JAF', 'origin_funding_source_id' => 2077,'copy_funding_step_review_from_id' => 1024, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  3985. array('project_tr_id' => 4072, 'proposal_id' => 'FIN/FNC/10/001/JAF', 'origin_funding_source_id' => 2077,'copy_funding_step_review_from_id' => 1024, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  3986. array('project_tr_id' => 4073, 'proposal_id' => 'FIN/FNC/10/002/JAF', 'origin_funding_source_id' => 2077,'copy_funding_step_review_from_id' => 1024, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  3987. array('project_tr_id' => 4074, 'proposal_id' => 'FIN/FNC/11/001/JAF', 'origin_funding_source_id' => 2077,'copy_funding_step_review_from_id' => 1024, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  3988. array('project_tr_id' => 4075, 'proposal_id' => 'FIN/FNC/12/001/JAF', 'origin_funding_source_id' => 2077,'copy_funding_step_review_from_id' => 1024, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  3989. array('project_tr_id' => 4076, 'proposal_id' => 'FIN/FNC/13/001/JAF', 'origin_funding_source_id' => 2077,'copy_funding_step_review_from_id' => 1024, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  3990. array('project_tr_id' => 4011, 'proposal_id' => 'ENV/EVN/14/003/REG', 'origin_funding_source_id' => 2078,'copy_funding_step_review_from_id' => null, 'new_funding_source_id' => 1025, 'status_scdc' => 'Completed'),
  3991. array('project_tr_id' => 4069, 'proposal_id' => 'FIN/BON/13/005/JAF', 'origin_funding_source_id' => 2077,'copy_funding_step_review_from_id' => 1024, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  3992. array('project_tr_id' => 4070, 'proposal_id' => 'FIN/BON/14/001/JAF', 'origin_funding_source_id' => 2077,'copy_funding_step_review_from_id' => 1024, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  3993. array('project_tr_id' => 4071, 'proposal_id' => 'FIN/BON/14/002/JAF', 'origin_funding_source_id' => 2077,'copy_funding_step_review_from_id' => 1024, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  3994. array('project_tr_id' => 4063, 'proposal_id' => 'FIN/BON/09/006/JAF', 'origin_funding_source_id' => 2077,'copy_funding_step_review_from_id' => 1024, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  3995. array('project_tr_id' => 3601, 'proposal_id' => 'AGF/BIO/11/003/REG', 'origin_funding_source_id' => 2087,'copy_funding_step_review_from_id' => 1056, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  3996. array('project_tr_id' => 3606, 'proposal_id' => 'AGF/CRO/11/007/REG', 'origin_funding_source_id' => 2080,'copy_funding_step_review_from_id' => null, 'new_funding_source_id' => 1037, 'status_scdc' => 'Completed'),
  3997. array('project_tr_id' => 3578, 'proposal_id' => 'AGF/AGR/12/0017/REG', 'origin_funding_source_id' => 2078,'copy_funding_step_review_from_id' => null, 'new_funding_source_id' => 1025, 'status_scdc' => 'Implemented'),
  3998. array('project_tr_id' => 3582, 'proposal_id' => 'AGF/AGR/12/008/REG', 'origin_funding_source_id' => 2080,'copy_funding_step_review_from_id' => null, 'new_funding_source_id' => 1037, 'status_scdc' => 'Completed'),
  3999. array('project_tr_id' => 4066, 'proposal_id' => 'FIN/BON/13/002/JAF', 'origin_funding_source_id' => 2077,'copy_funding_step_review_from_id' => 1024, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  4000. array('project_tr_id' => 4067, 'proposal_id' => 'FIN/BON/13/003/JAF', 'origin_funding_source_id' => 2077,'copy_funding_step_review_from_id' => 1024, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  4001. array('project_tr_id' => 4068, 'proposal_id' => 'FIN/BON/13/004/JAF', 'origin_funding_source_id' => 2077,'copy_funding_step_review_from_id' => 1024, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  4002. array('project_tr_id' => 3599, 'proposal_id' => 'AGF/ARD/17/010/REG', 'origin_funding_source_id' => 2080,'copy_funding_step_review_from_id' => null, 'new_funding_source_id' => 1037, 'status_scdc' => 'Completed'),
  4003. array('project_tr_id' => 4064, 'proposal_id' => 'FIN/BON/09/008/JAF', 'origin_funding_source_id' => 2077,'copy_funding_step_review_from_id' => 1024, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  4004. array('project_tr_id' => 4065, 'proposal_id' => 'FIN/BON/13/001/JAF', 'origin_funding_source_id' => 2077,'copy_funding_step_review_from_id' => 1024, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  4005. array('project_tr_id' => 3984, 'proposal_id' => 'ENV/DIS/17/014/REG', 'origin_funding_source_id' => 2089,'copy_funding_step_review_from_id' => 1056, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  4006. array('project_tr_id' => 4362, 'proposal_id' => 'SCD/YOU/13/0028/REG', 'origin_funding_source_id' => 2079,'copy_funding_step_review_from_id' => 1024, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  4007. array('project_tr_id' => 4364, 'proposal_id' => 'SCD/YOU/13/0030/REG', 'origin_funding_source_id' => 2079,'copy_funding_step_review_from_id' => 1024, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  4008. array('project_tr_id' => 4365, 'proposal_id' => 'SCD/YOU/13/0032/REG', 'origin_funding_source_id' => 2079,'copy_funding_step_review_from_id' => 1024, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  4009. array('project_tr_id' => 4286, 'proposal_id' => 'SCD/SPO/13/0031/REG', 'origin_funding_source_id' => 2079,'copy_funding_step_review_from_id' => 1024, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  4010. array('project_tr_id' => 4280, 'proposal_id' => 'SCD/POV/19/036/REG', 'origin_funding_source_id' => 2090,'copy_funding_step_review_from_id' => null, 'new_funding_source_id' => 1059, 'status_scdc' => 'Completed'),
  4011. array('project_tr_id' => 3769, 'proposal_id' => 'CIN/CUL/13/0036/REG', 'origin_funding_source_id' => 2080,'copy_funding_step_review_from_id' => null, 'new_funding_source_id' => 1037, 'status_scdc' => 'Completed'),
  4012. array('project_tr_id' => 3771, 'proposal_id' => 'CIN/CUL/13/0038/REG', 'origin_funding_source_id' => 2079,'copy_funding_step_review_from_id' => 1024, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  4013. array('project_tr_id' => 4259, 'proposal_id' => 'SCD/LAB/17/023/REG', 'origin_funding_source_id' => 2074,'copy_funding_step_review_from_id' => null, 'new_funding_source_id' => 2061, 'status_scdc' => 'Ongoing'),
  4014. array('project_tr_id' => 3887, 'proposal_id' => 'CIN/MED/14/0010/REG', 'origin_funding_source_id' => 2079,'copy_funding_step_review_from_id' => 1024, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  4015. array('project_tr_id' => 4198, 'proposal_id' => 'SCD/EDU/10/003/REG', 'origin_funding_source_id' => 2070,'copy_funding_step_review_from_id' => 1051, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  4016. array('project_tr_id' => 3728, 'proposal_id' => 'CIN/CUL/10/0021/REG', 'origin_funding_source_id' => 2085,'copy_funding_step_review_from_id' => null, 'new_funding_source_id' => 1023, 'status_scdc' => 'Completed'),
  4017. array('project_tr_id' => 3966, 'proposal_id' => 'ENV/DIS/12/0019/REG', 'origin_funding_source_id' => 2088,'copy_funding_step_review_from_id' => 1056, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  4018. array('project_tr_id' => 4226, 'proposal_id' => 'SCD/EDU/17/012/REG', 'origin_funding_source_id' => 2080,'copy_funding_step_review_from_id' => null, 'new_funding_source_id' => 1037, 'status_scdc' => 'Completed'),
  4019. array('project_tr_id' => 4249, 'proposal_id' => 'SCD/LAB/11/0026/REG', 'origin_funding_source_id' => 2082,'copy_funding_step_review_from_id' => 1024, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  4020. array('project_tr_id' => 4242, 'proposal_id' => 'SCD/HEA/15/022/REG', 'origin_funding_source_id' => 2083,'copy_funding_step_review_from_id' => null, 'new_funding_source_id' => 1057, 'status_scdc' => 'Ongoing'),
  4021. array('project_tr_id' => 4247, 'proposal_id' => 'SCD/LAB/10/004/REG', 'origin_funding_source_id' => 2084,'copy_funding_step_review_from_id' => 1051, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  4022. array('project_tr_id' => 4041, 'proposal_id' => 'ENV/HAZ/17/011/REG', 'origin_funding_source_id' => 1055,'copy_funding_step_review_from_id' => 1056, 'new_funding_source_id' => null, 'status_scdc' => 'Ongoing'),
  4023. array('project_tr_id' => 4300, 'proposal_id' => 'SCD/SWD/11/0032/REG', 'origin_funding_source_id' => 2080,'copy_funding_step_review_from_id' => null, 'new_funding_source_id' => 1037, 'status_scdc' => 'Ongoing'),
  4024. array('project_tr_id' => 4306, 'proposal_id' => 'SCD/SWD/12/0031/REG', 'origin_funding_source_id' => 2080,'copy_funding_step_review_from_id' => null, 'new_funding_source_id' => 1037, 'status_scdc' => 'Completed'),
  4025. array('project_tr_id' => 4095, 'proposal_id' => 'FIN/STU/14/002/JAF', 'origin_funding_source_id' => 2077,'copy_funding_step_review_from_id' => 1024, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  4026. array('project_tr_id' => 4096, 'proposal_id' => 'FIN/STU/14/003/JAF', 'origin_funding_source_id' => 2077,'copy_funding_step_review_from_id' => 1024, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  4027. array('project_tr_id' => 4092, 'proposal_id' => 'FIN/STU/13/004/JAF', 'origin_funding_source_id' => 2077,'copy_funding_step_review_from_id' => 1024, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  4028. array('project_tr_id' => 4085, 'proposal_id' => 'FIN/STU/12/002/JAF', 'origin_funding_source_id' => 2077,'copy_funding_step_review_from_id' => 1024, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  4029. array('project_tr_id' => 4086, 'proposal_id' => 'FIN/STU/12/003/JAF', 'origin_funding_source_id' => 2077,'copy_funding_step_review_from_id' => 1024, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  4030. array('project_tr_id' => 4091, 'proposal_id' => 'FIN/STU/13/003/JAF', 'origin_funding_source_id' => 2077,'copy_funding_step_review_from_id' => 1024, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  4031. array('project_tr_id' => 4081, 'proposal_id' => 'FIN/STU/09/0014/JAF', 'origin_funding_source_id' => 2077,'copy_funding_step_review_from_id' => 1024, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  4032. array('project_tr_id' => 4082, 'proposal_id' => 'FIN/STU/09/0015/JAF', 'origin_funding_source_id' => 2077,'copy_funding_step_review_from_id' => 1024, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  4033. array('project_tr_id' => 4084, 'proposal_id' => 'FIN/STU/12/001/JAF', 'origin_funding_source_id' => 2077,'copy_funding_step_review_from_id' => 1024, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  4034. array('project_tr_id' => 4080, 'proposal_id' => 'FIN/STU/09/0013/JAF', 'origin_funding_source_id' => 2077,'copy_funding_step_review_from_id' => 1024, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  4035. array('project_tr_id' => 4088, 'proposal_id' => 'FIN/STU/12/005/JAF', 'origin_funding_source_id' => 2077,'copy_funding_step_review_from_id' => 1024, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  4036. array('project_tr_id' => 4089, 'proposal_id' => 'FIN/STU/13/001/JAF', 'origin_funding_source_id' => 2077,'copy_funding_step_review_from_id' => 1024, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  4037. array('project_tr_id' => 4090, 'proposal_id' => 'FIN/STU/13/002/JAF', 'origin_funding_source_id' => 2077,'copy_funding_step_review_from_id' => 1024, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  4038. array('project_tr_id' => 4077, 'proposal_id' => 'FIN/STU/09/0010/JAF', 'origin_funding_source_id' => 2077,'copy_funding_step_review_from_id' => 1024, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  4039. array('project_tr_id' => 4078, 'proposal_id' => 'FIN/STU/09/0011/JAF', 'origin_funding_source_id' => 2077,'copy_funding_step_review_from_id' => 1024, 'new_funding_source_id' => null, 'status_scdc' => 'Completed'),
  4040. );
  4041. $tracking_steps = array(
  4042. 1 => 'Funding Disbursement',
  4043. 2 => 'Project Implementation',
  4044. 3 => 'Completion Report Submission',
  4045. 4 => 'Project Closing',
  4046. );
  4047.  
  4048. $review_steps = array(
  4049. 1 => 'PAM',
  4050. 2 => 'PAC',
  4051. 3 => 'SB',
  4052. 4 => 'CPR',
  4053. 5 => 'DP',
  4054. 6 => 'Post CPR',
  4055. );
  4056.  
  4057. // Reformulate step review for new funding sources
  4058. foreach ($broken_datas as $key => $value) {
  4059. if (!empty($value['copy_funding_step_review_from_id'])) {
  4060. $reformulate_step_review[$value['copy_funding_step_review_from_id']]['copy_funding_step_review_from_id'] = $value['copy_funding_step_review_from_id'];
  4061. $reformulate_step_review[$value['copy_funding_step_review_from_id']]['origin_funding_source_id'][$value['origin_funding_source_id']] = $value['origin_funding_source_id'];
  4062. }
  4063. }
  4064.  
  4065. foreach ($reformulate_step_review as $key => $value) {
  4066. $review_step_mapping_clone = $this->db->get_where('project_review_step', array(
  4067. 'funding_source_id' => $value['copy_funding_step_review_from_id'],
  4068. 'is_delete' => 0,
  4069. ))->result_array();
  4070.  
  4071. foreach($value['origin_funding_source_id'] as $key2 => $origin_funding_source_id) {
  4072. foreach ($review_step_mapping_clone as $key3 => $value3) {
  4073. $project_review_step_mapping_id = $this->Direct2db_model->insert(array(
  4074. 'is_first_project' => $value3['is_first_project'],
  4075. 'is_budget_over_100k' => $value3['is_budget_over_100k'],
  4076. 'funding_source_id' => $origin_funding_source_id,
  4077. ), 'project_review_step');
  4078.  
  4079. if ($project_review_step_mapping_id) {
  4080. $project_review_step_detail = $this->db->get_where('project_review_step_detail', array(
  4081. 'project_review_step_id' => $value3['id'],
  4082. 'is_delete' => 0,
  4083. ))->result_array();
  4084. foreach ($project_review_step_detail as $key4 => $value4) {
  4085. $insert_detail_step_review[$key4] = array(
  4086. 'project_review_step_id' => $project_review_step_mapping_id,
  4087. 'ref_project_review_id' => $value4['ref_project_review_id'],
  4088. 'is_delete' => 0,
  4089. );
  4090. }
  4091. $this->Direct2db_model->insert_batch($insert_detail_step_review, 'project_review_step_detail');
  4092. }
  4093. }
  4094. }
  4095. }
  4096. // End reformulate step review for new funding sources
  4097.  
  4098. foreach ($broken_datas as $key => $value) {
  4099. $tr_id = $value['project_tr_id'];
  4100. $this->Direct2db_model->update(array('is_complete' => 1), $tr_id, 'project_tr', 'project_tr_id');
  4101.  
  4102. // Update funding source
  4103. if (!empty($value['new_funding_source_id'])) {
  4104. $update_funding_source = array(
  4105. 'funding_source_id' => $value['new_funding_source_id'],
  4106. );
  4107. $this->Direct2db_model->update($update_funding_source, $tr_id, 'project_funding_source_tr', 'project_trx_id');
  4108. }
  4109.  
  4110. // Generate step review
  4111. $this->project_review_step($tr_id, 'save');
  4112.  
  4113. // Inject and update position review
  4114. $time_start = microtime(true);
  4115. $review_step = $this->get_step_review($tr_id);
  4116. if ($review_step) {
  4117. $current_proposal_status = $value['status_scdc'];
  4118. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['id'] = $tr_id;
  4119. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['proposal_id'] = $value['proposal_id'];
  4120. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['step_exists'] = 'true';
  4121. // Proposal review
  4122. switch($current_proposal_status) {
  4123. case 'Completed':
  4124. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['id'] = $tr_id;
  4125. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['proposal_id'] = $value['proposal_id'];
  4126. foreach ($review_step as $k_step => $step) {
  4127. $review_result = $this->finish($tr_id, null);
  4128. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['review_steps'][$k_step]['step'] = $step;
  4129. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['review_steps'][$k_step]['file_uploaded'] = $review_result['total_files'];
  4130. }
  4131. foreach ($tracking_steps as $k_step => $step) {
  4132. $step_code = str_replace(' ', '_', strtolower($step));
  4133. $tracking_result = $this->project_tracking($tr_id, $k_step, $current_proposal_status);
  4134. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['tracking_steps'][$k_step]['step'] = $step;
  4135. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['tracking_steps'][$k_step]['file_uploaded'] = $tracking_result['total_files'];
  4136. }
  4137.  
  4138. break;
  4139. case 'Implemented':
  4140. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['id'] = $tr_id;
  4141. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['proposal_id'] = $value['proposal_id'];
  4142. foreach ($review_step as $k_step => $step) {
  4143. $review_result = $this->finish($tr_id, null);
  4144. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['review_steps'][$k_step]['step'] = $step;
  4145. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['review_steps'][$k_step]['file_uploaded'] = $review_result['total_files'];
  4146. }
  4147.  
  4148. foreach ($tracking_steps as $k_step => $step) {
  4149. $tracking_result = $this->project_tracking($tr_id, $k_step, $current_proposal_status);
  4150. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['tracking_steps'][$k_step]['step'] = $step;
  4151. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['tracking_steps'][$k_step]['file_uploaded'] = $tracking_result['total_files'];
  4152.  
  4153. // Hanya jalankan sampai step ke 2
  4154. if ($k_step == 2) {
  4155. break;
  4156. }
  4157. }
  4158.  
  4159. break;
  4160. case 'Ongoing':
  4161. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['id'] = $tr_id;
  4162. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['proposal_id'] = $value['proposal_id'];
  4163. foreach ($review_step as $k_step => $step) {
  4164. $review_result = $this->finish($tr_id, null);
  4165. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['review_steps'][$k_step]['step'] = $step;
  4166. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['review_steps'][$k_step]['file_uploaded'] = $review_result['total_files'];
  4167. }
  4168.  
  4169. foreach ($tracking_steps as $k_step => $step) {
  4170. $tracking_result = $this->project_tracking($tr_id, $k_step, $current_proposal_status);
  4171. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['tracking_steps'][$k_step]['step'] = $step;
  4172. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['tracking_steps'][$k_step]['file_uploaded'] = $tracking_result['total_files'];
  4173.  
  4174. // Hanya jalankan step ke 1
  4175. if ($k_step == 1) {
  4176. break;
  4177. }
  4178. }
  4179.  
  4180. break;
  4181. case 'Pending ASEC':
  4182. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['id'] = $tr_id;
  4183. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['proposal_id'] = $value['proposal_id'];
  4184. $max_step = 5;
  4185. if (in_array('DP', $review_step)) {
  4186. $max_step = 5;
  4187. } else if (in_array('CPR', $review_step)) {
  4188. $max_step = 4;
  4189. } else if (in_array('PAC', $review_step)) {
  4190. $max_step = 2;
  4191. }
  4192. foreach ($review_step as $k_step => $step) {
  4193. if (array_search($step, $review_steps) < $max_step) {
  4194. // Jika bukan step terakhir, finish
  4195. $review_result = $this->finish($tr_id, null);
  4196. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['review_steps'][$k_step]['step'] = $step;
  4197. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['review_steps'][$k_step]['process'] = 'finish';
  4198. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['review_steps'][$k_step]['file_uploaded'] = $review_result['total_files'];
  4199. } else {
  4200. // Stop di step PAC
  4201. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['review_steps'][$k_step]['step'] = $step;
  4202. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['review_steps'][$k_step]['process'] = '-';
  4203. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['review_steps'][$k_step]['file_uploaded'] = 0;
  4204. break;
  4205. }
  4206. }
  4207.  
  4208. $this->set_flag($value['position'], 'Berhasil');
  4209. break;
  4210. case 'Pending CPR':
  4211. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['id'] = $tr_id;
  4212. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['proposal_id'] = $value['proposal_id'];
  4213. foreach ($review_step as $k_step => $step) {
  4214. if (array_search($step, $review_steps) < 4) {
  4215. // Jika bukan step terakhir, finish
  4216. $review_result = $this->finish($tr_id, null);
  4217. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['review_steps'][$k_step]['step'] = $step;
  4218. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['review_steps'][$k_step]['process'] = 'finish';
  4219. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['review_steps'][$k_step]['file_uploaded'] = $review_result['total_files'];
  4220. } else {
  4221. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['review_steps'][$k_step]['step'] = $step;
  4222. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['review_steps'][$k_step]['process'] = '-';
  4223. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['review_steps'][$k_step]['file_uploaded'] = 0;
  4224. break;
  4225. }
  4226. }
  4227. break;
  4228. case 'Pending DP':
  4229. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['id'] = $tr_id;
  4230. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['proposal_id'] = $value['proposal_id'];
  4231. foreach ($review_step as $k_step => $step) {
  4232. if (array_search($step, $review_steps) < 5) {
  4233. // Jika bukan step terakhir, finish
  4234. $review_result = $this->finish($tr_id, null);
  4235. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['review_steps'][$k_step]['step'] = $step;
  4236. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['review_steps'][$k_step]['process'] = 'finish';
  4237. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['review_steps'][$k_step]['file_uploaded'] = $review_result['total_files'];
  4238. } else {
  4239. // Stop di step DP
  4240. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['review_steps'][$k_step]['step'] = $step;
  4241. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['review_steps'][$k_step]['process'] = '-';
  4242. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['review_steps'][$k_step]['file_uploaded'] = '0';
  4243. break;
  4244. }
  4245. }
  4246. break;
  4247. case 'Pending Sponsoring Body':
  4248. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['id'] = $tr_id;
  4249. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['proposal_id'] = $value['proposal_id'];
  4250. foreach ($review_step as $k_step => $step) {
  4251. if (array_search($step, $review_steps) < 3) {
  4252. // Jika bukan step terakhir, finish
  4253. $review_result = $this->finish($tr_id, null);
  4254. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['review_steps'][$k_step]['step'] = $step;
  4255. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['review_steps'][$k_step]['process'] = 'finish';
  4256. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['review_steps'][$k_step]['file_uploaded'] = $review_result['total_files'];
  4257. } else {
  4258. // Hold di step SB
  4259. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['review_steps'][$k_step]['step'] = $step;
  4260. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['review_steps'][$k_step]['process'] = '-';
  4261. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['review_steps'][$k_step]['file_uploaded'] = 0;
  4262. break;
  4263. }
  4264. }
  4265.  
  4266. break;
  4267. }
  4268. } else {
  4269. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['id'] = $tr_id;
  4270. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['proposal_id'] = $value['proposal_id'];
  4271. $result[$value['proposal_id'].'_'.$value['project_tr_id']]['step_exists'] = 'false';
  4272. }
  4273. }
  4274.  
  4275. echo "<pre>";
  4276. print_r($result);exit;
  4277. }
  4278.  
  4279. function update_files(){
  4280. echo '<pre>';
  4281. $broken_datas = array(
  4282. array('project_tr_id' => 3687, 'ref_project_review_id' => 2, 'files' => '{"1":{"name":"Clarification Note - AIPR Forum on Women Participation in Peace Process PAM PAC.docx","category":4},"2":{"name":"Memo PAC C (004).pdf","category":4}}'),
  4283. array('project_tr_id' => 4466, 'ref_project_review_id' => 4, 'files' => '{"1":{"name":"Letter to CPR (028). 7 April 2014.pdf","category":4}}'),
  4284. array('project_tr_id' => 4417, 'ref_project_review_id' => 4, 'files' => '{"1":{"name":"ASEAN Project for ASEAN Food Conference-India.for CPR.PDF","category":4},"2":{"name":"CPR Endorsement 149.2nov12.pdf","category":4},"3":{"name":"Letter CPR 140.11 oct12.pdf","category":4},"4":{"name":"matrix compilation.S_T projects.1nov12.docx","category":4}}'),
  4285. array('project_tr_id' => 4424, 'ref_project_review_id' => 2, 'files' => '{"1":{"name":"JENESYS 2.0 Science _ Technology.for PAC.pdf","category":4},"2":{"name":"Memo to PAC D (113).pdf","category":4},"3":{"name":"Microsoft Outlook - Memo Style.pdf","category":4}}'),
  4286. array('project_tr_id' => 4424, 'ref_project_review_id' => 4, 'files' => '{"1":{"name":"CPR Endoresement (005). ER2.J. 17 January 2014.pdf","category":4},"3":{"name":"Letter to CPR (195). 31 Dec. 2013.pdf","category":4},"4":{"name":"matrix compilation. JENESYS 2.0\u201dScience and Technology (005).pdf","category":4}}'),
  4287. array('project_tr_id' => 4148, 'ref_project_review_id' => 4, 'files' => '{"1":{"name":"CPR Endorsement (096). ER2.30 July 2013.pdf","category":4},"2":{"name":"Letter to CPR (078). 12 July 2013.pdf","category":4},"3":{"name":"matrix compilation.Rural Renewable Energy (Biogas) Development for ASEAN Countries( 096).pdf","category":4},"4":{"name":"Prop RAC_ASEAN_Biogas Project.endorsed.pdf","category":4}}'),
  4288. array('project_tr_id' => 4136, 'ref_project_review_id' => 2, 'files' => '{"1":{"name":"6. APEN_JAIF_PROJECTPROPOSAL_ATTACHMENT1_WORKPLAN_27JUN2013.xls","category":4},"2":{"name":"7. APEN_JAIF_PROJECTPROPOSAL_ATTACHMENT2_TORFORPERSONNEL_27JUN2013.doc","category":4},"3":{"name":"8. APEN_JAIF_PROJECTPROPOSAL_ATTACHMENT3_TORFORCOMMITTEE_WG_27JUN2013.doc","category":4},"4":{"name":"9. APEN_JAIF_PROJECTPROPOSAL_ATTACHMENT4_BUDGET_27JUN2013.xls","category":4},"6":{"name":"CLARIFICATION NOTES CI-HRD-PAM PAC.docx","category":4},"7":{"name":"Comprehensive Industrial Human Resource Development.for PAC.pdf","category":4},"8":{"name":"Matrix of PAC D ACTIONS comments for CI-HRD.docx","category":4},"9":{"name":"Memo PAC D (030).pdf","category":4},"10":{"name":"Memo PAC D Actions Comments (031).pdf","category":4},"11":{"name":"Microsoft Outlook - Memo Style.pdf","category":4}}'),
  4289. array('project_tr_id' => 4136, 'ref_project_review_id' => 4, 'files' => '{"1":{"name":"Comprehensive Industrial Human Resource Development. endorsed..pdf","category":4},"3":{"name":"CPR Endorsement (008). ER2.J. 5 March 2015.pdf","category":4},"4":{"name":"Letter to CPR (007). 18 February 2015.pdf","category":4},"5":{"name":"matrix compilation. Comprehensive Industrial Human Resource Development (Ci-HRD) (008).pdf","category":4}}'),
  4290. array('project_tr_id' => 4144, 'ref_project_review_id' => 4, 'files' => '{"1":{"name":"ASEAN Cooperation Project Proposal - Canada OECD Project on ASEAN SMEs (COPAS)_Endorsed14June2017.pdf","category":4},"2":{"name":"Matrix of CPR Comments and Clarification_14June2017.pdf","category":4},"3":{"name":"Memo re CPR Ad Ref Approval (052) COPAS_14June2017.pdf","category":4}}'),
  4291. array('project_tr_id' => 4048, 'ref_project_review_id' => 4, 'files' => '{"1":{"name":"AJ-SCEC 6.pdf","category":4},"2":{"name":"AJCEP JC 9.pdf","category":4},"3":{"name":"CPR Endorsement (080). ER2.17 July 2013.pdf","category":4},"5":{"name":"Letter to CPR (068). 27 June 2013.pdf","category":4},"6":{"name":"matrix compilation.Study on the Development of ASEAN ICT Skill Standards (080).pdf","category":4},"8":{"name":"Study on the Development of ASEAN ICT Skill Standards.proposal.pdf","category":4}}'),
  4292. array('project_tr_id' => 4049, 'ref_project_review_id' => 4, 'files' => '{"1":{"name":"CPR Endorsement (045). ER2.J. 5 June 2014.pdf","category":4},"2":{"name":"Letter to CPR (036). 9 May 2014.docx.pdf","category":4}}'),
  4293. array('project_tr_id' => 4050, 'ref_project_review_id' => 2, 'files' => '{"2":{"name":"Feasibility Study for Practical Use ASEAN Smart Network.for PAC.pdf","category":4},"3":{"name":"Memo PAC B (032).pdf","category":4}}'),
  4294. array('project_tr_id' => 4050, 'ref_project_review_id' => 4, 'files' => '{"1":{"name":"CPR Endorsement (065). ER2.J. 25 August 2014.pdf","category":4},"2":{"name":"Feasibility Study for Practical Use ASEAN Smart Network.endorsed.pdf","category":4},"4":{"name":"Letter to CPR (055). 7 August 2014.pdf","category":4},"5":{"name":"matrix compilation. Practical Use and Sophistication of ICT(ASEAN Smart Network).pdf","category":4}}'),
  4295. array('project_tr_id' => 4115, 'ref_project_review_id' => 4, 'files' => '{"1":{"name":"GEN-MLT-13-002-REG-AEC Youth Network 2nd 3rd Batch.For CPR.pdf","category":4}}'),
  4296. array('project_tr_id' => 3591, 'ref_project_review_id' => 4, 'files' => '{"1":{"name":"Annex 1. Budget.xls","category":4},"2":{"name":"matrix compilation. The Applications of Chemical Fertilizers and Pesticides in ASEAN (012).pdf","category":4}}'),
  4297. array('project_tr_id' => 4428, 'ref_project_review_id' => 4, 'files' => '{"1":{"name":"ASEAN Pakistan Conference on Material Science.endorsed.pdf","category":4},"2":{"name":"ASEAN-Pakistan Conference on Materials Science.for CPR.pdf","category":4},"3":{"name":"CPR Endorsement (059).ER1.11 June 2013.pdf","category":4},"4":{"name":"Letter to CPR (053). 22 May 2013.pdf","category":4},"5":{"name":"matrix compilation.ASEAN-Pakistan Conference on Materials Science (059).pdf","category":4}}'),
  4298. array('project_tr_id' => 4011, 'ref_project_review_id' => 4, 'files' => '{"1":{"name":"CPR Endorsement (057). ER2.J. 21 July 2014.pdf","category":4},"2":{"name":"Letter to CPR (042).11 June 2014.pdf","category":4},"3":{"name":"matrix compilation. Training Course on Carbon Accounting System and Carbon Trading (057).pdf","category":4},"4":{"name":"Training Course on Carbon Accounting System and Carbon Trading.endorsed.pdf","category":4},"5":{"name":"Training Course on Carbon Accounting System and Carbon Trading.for CPR.PDF","category":4}}'),
  4299. array('project_tr_id' => 4011, 'ref_project_review_id' => 5, 'files' => '{"1":{"name":"22 16 Apr Approval - Training Course on Carbon Accounting System and Carbon Trading.pdf","category":4},"2":{"name":"M. to EERD_Training on Carbon Accountin System (27 Apr 2015, Vol.1, 038.pdf","category":4},"3":{"name":"RACProject_27March2015_C_accounting.pdf","category":4},"4":{"name":"Revised budget_27March2015.xlsx","category":4}}'),
  4300. array('project_tr_id' => 3601, 'ref_project_review_id' => 4, 'files' => '{"2":{"name":"FA for CPR Approval 010.pdf","category":4},"5":{"name":"STDF Contract WTO-ASEAN Draft ver 25-01-2012 (clean).doc","category":4}}'),
  4301. array('project_tr_id' => 3606, 'ref_project_review_id' => 4, 'files' => '{"1":{"name":"CPR 027.pdf","category":4},"2":{"name":"img-320200226.pdf","category":4},"3":{"name":"Taxonomy_ For CPR 2.docx","category":4},"4":{"name":"Taxonomy_ For CPR 2.pdf","category":4}}'),
  4302. array('project_tr_id' => 3578, 'ref_project_review_id' => 4, 'files' => '{"3":{"name":"CPR Endorsement.043.ER2. 23 april 2013.pdf","category":4},"4":{"name":"Letter to CPR (036). 4 April 2013.pdf","category":4},"5":{"name":"matrix compilation.Rice Production in Southeast Asia under Organic Agriculture Farming System.pdf","category":4}}'),
  4303. array('project_tr_id' => 3582, 'ref_project_review_id' => 2, 'files' => '{"1":{"name":"Memo PAC A (083).20 Nov12.pdf","category":4},"2":{"name":"Memo PAC A Comments (088).27nov12.pdf","category":4},"3":{"name":"Microsoft Outlook - Memo Style.pdf","category":4},"4":{"name":"PAC A ACTIONS.comments.088.matrix.docx","category":4}}'),
  4304. array('project_tr_id' => 3582, 'ref_project_review_id' => 4, 'files' => '{"1":{"name":"CPR Endorsement.018.ER2.25feb13.pdf","category":4},"2":{"name":"letter CPR 010.4febr13.pdf","category":4},"3":{"name":"matrix compilation.Reduction of Post-harvest Losses for Agricultural Produces.pdf","category":4}}'),
  4305. array('project_tr_id' => 4362, 'ref_project_review_id' => 2, 'files' => '{"1":{"name":"Memo PAC A (108).pdf","category":4},"2":{"name":"Microsoft Outlook - Memo Style.pdf","category":4}}'),
  4306. array('project_tr_id' => 4362, 'ref_project_review_id' => 5, 'files' => '{"1":{"name":"46 February 19 bank account (JENESYS2.0 Japanese Language).pdf","category":4}}'),
  4307. array('project_tr_id' => 4364, 'ref_project_review_id' => 2, 'files' => '{"1":{"name":"Memo PAC A (108).pdf","category":4},"2":{"name":"Microsoft Outlook - Memo Style.pdf","category":4},"3":{"name":"Social Community.for PAC.pdf","category":4}}'),
  4308. array('project_tr_id' => 4364, 'ref_project_review_id' => 4, 'files' => '{"1":{"name":"CPR Endoresement (024). ER2.J. 7 March 2014.pdf","category":4},"4":{"name":"Letter to CPR (020). 26 February 2014.pdf","category":4},"5":{"name":"matrix compilation. JENESYS 2.0.Social Community (024).pdf","category":4}}'),
  4309. array('project_tr_id' => 4365, 'ref_project_review_id' => 4, 'files' => '{"1":{"name":"CPR Endoresement (026). ER2.J. 17 March 2014.pdf","category":4},"2":{"name":"JENESYS 2.0. Dispatching Programme.endorsed.pdf","category":4},"4":{"name":"Letter to CPR (020). 26 February 2014.pdf","category":4},"5":{"name":"matrix compilation. JENESYS 2.0. Dispatching Programme (026).pdf","category":4}}'),
  4310. array('project_tr_id' => 4286, 'ref_project_review_id' => 4, 'files' => '{"1":{"name":"ANNEX 2.INDICATIVE WORKPLAN.JENESYS 2.0 SPORTS.XLSX.XLSX","category":4}}'),
  4311. array('project_tr_id' => 3771, 'ref_project_review_id' => 2, 'files' => '{"1":{"name":"Memo PAC D (109).pdf","category":4}}'),
  4312. array('project_tr_id' => 4259, 'ref_project_review_id' => 2, 'files' => '{"1":{"name":"Annex 1_Budget Proposal.xlsx","category":4},"2":{"name":"Annex 3_Presentation of ILO on ASEAN TRIANGLE Phase II in 10th ACMW.pdf","category":4},"3":{"name":"Annex 4 - Monitoring and Evaluation Plan - draft.docx","category":4},"4":{"name":"Clarification Notes_ASEAN TRIANGLE_PAC_19Sept2017.docx","category":4},"5":{"name":"For Consideration_ASEAN TRIANGLE Phase II.docx","category":4},"6":{"name":"Memo PAC (069) TRIANGLE_14 September 2017.pdf","category":4},"7":{"name":"Memo re PAC Ad-Ref Comments (018) TRIANGLE_19 Sept2017.pdf","category":4},"8":{"name":"PAC COMMENTS on TRIANGLE_19Sept2017.docx","category":4},"9":{"name":"SCD-LAB-17-023-REG.pdf","category":4},"10":{"name":"[PAC Ad-Ref Endorsement] SCDLAB17023REG.pdf","category":4}}'),
  4313. array('project_tr_id' => 4259, 'ref_project_review_id' => 4, 'files' => '{"1":{"name":"Letter to CPR (100) 17 Nov 2017.pdf","category":4}}'),
  4314. array('project_tr_id' => 3887, 'ref_project_review_id' => 2, 'files' => '{"1":{"name":"JENESYS 2.0 Mass Media.for PAC.pdf","category":4},"2":{"name":"Memo PAC A (017).pdf","category":4},"3":{"name":"Microsoft Outlook - Memo Style.pdf","category":4}}'),
  4315. array('project_tr_id' => 3887, 'ref_project_review_id' => 4, 'files' => '{"1":{"name":"CPR Endoresement (034). ER2.J. 25 April 2014.pdf","category":4},"4":{"name":"Letter to CPR (027). 7 April 2014.pdf","category":4},"5":{"name":"matrix compilation. JENESYS 2.0.Mass Media(034).pdf","category":4}}'),
  4316. array('project_tr_id' => 4249, 'ref_project_review_id' => 4, 'files' => '{"1":{"name":"ASEAN Japan SSN_for CPR(1).docx","category":4},"2":{"name":"ASEAN Japan SSN_for CPR.docx","category":4},"3":{"name":"ASEAN Japan SSN_for CPR.pdf","category":4},"4":{"name":"CPR 001.pdf","category":4},"5":{"name":"CPR 134.pdf","category":4},"6":{"name":"Matrix Compilations as of 3 Jan 2012.doc","category":4}}'),
  4317. array('project_tr_id' => 4242, 'ref_project_review_id' => 2, 'files' => '{"1":{"name":"ASEAN ARCH Project - PAC Endorsement_150909.pdf","category":4},"2":{"name":"Memo PAC (057) ASEAN ARCH Project_150904.pdf","category":4},"3":{"name":"SCD-HEA-15-022-REG ASEAN ARCH Project_PAC.pdf","category":4}}'),
  4318. array('project_tr_id' => 4041, 'ref_project_review_id' => 4, 'files' => '{"1":{"name":"1_Letter to ASEAN re MAHFSA draft agreement (as of 23 May 2018).PDF","category":4}}'),
  4319. array('project_tr_id' => 4300, 'ref_project_review_id' => 4, 'files' => '{"2":{"name":"CPR Endorsement (139). ER2. 7 October 2013.pdf","category":4},"4":{"name":"Letter to CPR (132). 20 September 2013.pdf","category":4},"5":{"name":"matrix compilation.Establishment of ASEAN Wide Research Networking on Ageing(139).pdf","category":4}}'),
  4320. array('project_tr_id' => 4306, 'ref_project_review_id' => 2, 'files' => '{"1":{"name":"Delivering Social Protection Programs.for PAC.pdf","category":4},"2":{"name":"Memo PAC C comments (084).22nov12.pdf","category":4},"3":{"name":"Microsoft Outlook - Memo Style.pdf","category":4},"4":{"name":"PAC C Actions-Comments.ASEAN Reg Prog for Cap Dev.084.matrix.docx","category":4}}'),
  4321. array('project_tr_id' => 4306, 'ref_project_review_id' => 4, 'files' => '{"1":{"name":"ASEAN Regional Program for Capacity Development.endorsed..pdf","category":4},"2":{"name":"CPR Endorsement (074). ER2. 9 July 2013.pdf","category":4},"4":{"name":"Letter to CPR (064). 18 June 2013.pdf","category":4},"5":{"name":"matrix compilation. memo 074.pdf","category":4}}'),
  4322. );
  4323.  
  4324. foreach ($broken_datas as $key => $value) {
  4325. $data = $this->db->query("
  4326. SELECT a.project_tr_id, a.ref_project_review_id, a.is_delete, b.id as project_review_trans_finish_id, b.files
  4327. FROM project_review_trans a
  4328. LEFT JOIN project_review_trans_finish b ON b.project_review_trans_id = a.id
  4329. WHERE a.project_tr_id = $value[project_tr_id] AND a.ref_project_review_id = $value[ref_project_review_id]
  4330. AND a.is_delete = 0
  4331. AND b.is_delete = 0
  4332. ")->row_array();
  4333.  
  4334. if (isset($data['project_review_trans_finish_id'])) {
  4335. $this->Direct2db_model->update(array(
  4336. 'files' => $value['files'],
  4337. ), $data['project_review_trans_finish_id'], 'project_review_trans_finish', 'id');
  4338. }
  4339. }
  4340. }
  4341. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement