$v) { $binds_ids .= "?,"; $params[] = $v; } if (substr($binds_ids, -1) === ',') { $binds_ids = substr($binds_ids, 0, -1); } $where_where .= " AND ord_a_item.ord_id IN ($binds_ids)"; } if (isset($filter['is_aprv'])) { $where_where .= ' AND ord_a_item.is_aprv = ?'; $params[] = $filter['is_aprv']; } if (isset($filter['get_user_crt'])) { $select_order .= ',ucrt.first_name as ucrt_name'; $join_join .= ' LEFT JOIN t_users as ucrt ON ord_a_item.crt_by = ucrt.id'; } if (isset($filter['get_user_rjct'])) { $select_order .= ',urjct.first_name as urjct_name,urjct_bill.first_name as urjct_bill_name'; $join_join .= ' LEFT JOIN t_users as urjct ON ord_a_item.rjct_by = urjct.id'; $join_join .= ' LEFT JOIN t_users as urjct_bill ON ord_a_item.rjct_bill_by = urjct_bill.id'; } $params[] = OrdersAItems::ONLY_CLIENT_NO; $params[] = OrdersAItems::CALC_TO_VDR_YES; $params[] = OrdersAItems::IS_HIDDEN_NO; $params[] = OrdersAItems::STTS_MERGE_NO; $params[] = OrdersAItems::STTS_MERGE_RESULT; if (isset($filter['group_by'])) { $group_by .= ' GROUP BY ' . $filter['group_by']; } return DB::select( "SELECT ord_a_item.id as ord_a_item_id,ord_a_item.v_termin_id,ord_a_item.ord_id,ord_a_item.ord_code ,ord_a_item.desc,ord_a_item.a_item_type,ord_a_item.crt_type as a_item_crt_type ,ord_a_item.crt as a_item_crt_at ,ord_a_item.amt_base_flat,ord_a_item.unit_qty,ord_a_item.amt_tax_type,ord_a_item.amt_total_tax_flat,ord_a_item.amt_total_flat ,ord_a_item.ddln_pay_at,ord_a_item.ddln_pay_type ,ord_a_item.is_paid,ord_a_item.paid_at,ord_a_item.paid_method,ord_a_item.paid_by ,ord_a_item.is_bill_paid,ord_a_item.paid_bill_at,ord_a_item.paid_bill_method,ord_a_item.paid_bill_by ,ord_a_item.bank_name,ord_a_item.bank_short_name,ord_a_item.bank_acc_number,ord_a_item.bank_acc_name ,ord_a_item.invc_to_client ,ord_a_item.img_proof_submission ,ord_a_item.is_aprv,ord_a_item.rjct_at,ord_a_item.rjct_by,ord_a_item.rjct_bill_at,ord_a_item.rjct_bill_by -- ,ord_a_item.is_merge_to,ord_a_item.merge_to_a_id,ord_a_item.merge_to_ord_id,ord_a_item.merge_to_ord_code,ord_a_item.merge_to_at -- ,ord_a_item.is_merge_from,ord_a_item.merge_from_a_id,ord_a_item.merge_from_ord_id,ord_a_item.merge_from_ord_code,ord_a_item.merge_from_at ,ord_a_item.stts_merge,ord_a_item.merge_to_code,ord_a_item.group_merge_code,ord_a_item.merge_at ,ord_pck.pck_name,ord_pck.set_pck_at,ord_pck.pck_addr -- ,(SELECT nmProvinsiKel FROM t_region WHERE kodeProv = ord_pck.pck_prid LIMIT 1) as pck_prid_name -- ,(SELECT nmKotamadyaKel FROM t_region WHERE kodeKab = ord_pck.pck_ktid LIMIT 1) as pck_ktid_name -- ,(SELECT nmKecamatanKel FROM t_region WHERE kodeKec = ord_pck.pck_kcid LIMIT 1) as pck_kcid_name -- ,(SELECT nmKelurahan FROM t_region WHERE kodeKel = ord_pck.pck_klid LIMIT 1) as pck_klid_name ,ord_drop.drop_name,ord_drop.drop_addr,ord_drop.chk_at as drop_chk_at -- ,(SELECT nmProvinsiKel FROM t_region WHERE kodeProv = ord_drop.drop_prid LIMIT 1) as drop_prid_name -- ,(SELECT nmKotamadyaKel FROM t_region WHERE kodeKab = ord_drop.drop_ktid LIMIT 1) as drop_ktid_name -- ,(SELECT nmKecamatanKel FROM t_region WHERE kodeKec = ord_drop.drop_kcid LIMIT 1) as drop_kcid_name -- ,(SELECT nmKelurahan FROM t_region WHERE kodeKel = ord_drop.drop_klid LIMIT 1) as drop_klid_name ,ord_c.c_name,ord_c.c_pt_name " . $select_order . " FROM t_orders_a_items as ord_a_item INNER JOIN t_orders as ord ON ord_a_item.ord_id = ord.id INNER JOIN t_orders_clients as ord_c ON ord.id = ord_c.ord_id INNER JOIN t_orders_pickups as ord_pck ON ord.id = ord_pck.ord_id INNER JOIN t_orders_drops as ord_drop ON ord.id = ord_drop.ord_id " . $join_join . " WHERE ord.dlt is null AND ord_a_item.dlt is null AND ord.is_active = " . Orders::IS_ACTIVE_YES . " AND ord_a_item.is_active = " . OrdersAItems::IS_ACTIVE_YES . " " . $where_where . " AND ord_a_item.only_client = ? AND ord_a_item.calc_to_vdr = ? AND ord_a_item.is_hidden = ? AND ord_a_item.stts_merge IN (?,?) " . $group_by . " ;", $params ); } public static function listAdtItemsBillings($filter = []) { $params = []; $select_order = ''; $join_join = ''; $where_where = ''; $group_by = ''; if (isset($filter['ord_id'])) { $where_where .= ' AND ord.id = ?'; $params[] = $filter['ord_id']; } if (isset($filter['is_bill_aprv'])) { $where_where .= ' AND ord_a_item.is_bill_aprv = ?'; $params[] = $filter['is_bill_aprv']; } $params[] = OrdersAItems::ONLY_VDR_NO; $params[] = OrdersAItems::INVC_TO_CLIENT_YES; $params[] = OrdersAItems::IS_HIDDEN_NO; $params[] = OrdersAItems::STTS_MERGE_NO; $params[] = OrdersAItems::STTS_MERGE_RESULT; if (isset($filter['group_by'])) { $group_by .= ' GROUP BY ' . $filter['group_by']; } return DB::select( "SELECT ord_a_item.id as ord_a_item_id,ord_a_item.v_termin_id,ord_a_item.ord_id,ord_a_item.ord_code ,ord_a_item.desc,ord_a_item.a_item_type,ord_a_item.crt_type as a_item_crt_type ,ord_a_item.unit_type,ut.name as unit_type_name,ord_a_item.unit_qty ,ord_a_item.amt_bill_base_flat,ord_a_item.unit_qty,ord_a_item.amt_bill_total_flat ,ord_a_item.is_paid,ord_a_item.paid_at,ord_a_item.paid_method,ord_a_item.paid_by ,ord_a_item.is_bill_paid,ord_a_item.paid_bill_at,ord_a_item.paid_bill_method,ord_a_item.paid_bill_by ,ord_termin.id as c_group_termin_id,ord_termin.termin_is_paid,ord_termin.termin_paid_at ,ord_termin.sequence as termin_sequence,ord_termin.termin_ddln_type ,ord_termin.termin_tax_type,ord_termin.termin_tax_ppn_percent,ord_termin.termin_tax_ppn_flat,ord_termin.termin_tax_pph_percent,ord_termin.termin_tax_pph_flat ,ord_termin.amt_bill_confirm,ord_termin.amt_bill_confirm_note ,ord_invc.id as invc_id,ord_invc.code as invc_code ,ord_invc.amt_disc_type as invc_disc_type,ord_invc.amt_disc_percent as invc_disc_percent,ord_invc.amt_disc_flat as invc_disc_flat ,ord_invc.is_gnrt_invc ,ord_a_item.is_aprv,ord_a_item.rjct_at,ord_a_item.rjct_by,ord_a_item.rjct_bill_at,ord_a_item.rjct_bill_by ,ord_a_item.stts_merge,ord_a_item.merge_to_code,ord_a_item.group_merge_code,ord_a_item.merge_at ,ord_pck.pck_name,ord_pck.set_pck_at,ord_pck.pck_addr -- ,(SELECT nmProvinsiKel FROM t_region WHERE kodeProv = ord_pck.pck_prid LIMIT 1) as pck_prid_name -- ,(SELECT nmKotamadyaKel FROM t_region WHERE kodeKab = ord_pck.pck_ktid LIMIT 1) as pck_ktid_name -- ,(SELECT nmKecamatanKel FROM t_region WHERE kodeKec = ord_pck.pck_kcid LIMIT 1) as pck_kcid_name -- ,(SELECT nmKelurahan FROM t_region WHERE kodeKel = ord_pck.pck_klid LIMIT 1) as pck_klid_name ,ord_drop.drop_name,ord_drop.drop_addr,ord_drop.chk_at as drop_chk_at -- ,(SELECT nmProvinsiKel FROM t_region WHERE kodeProv = ord_drop.drop_prid LIMIT 1) as drop_prid_name -- ,(SELECT nmKotamadyaKel FROM t_region WHERE kodeKab = ord_drop.drop_ktid LIMIT 1) as drop_ktid_name -- ,(SELECT nmKecamatanKel FROM t_region WHERE kodeKec = ord_drop.drop_kcid LIMIT 1) as drop_kcid_name -- ,(SELECT nmKelurahan FROM t_region WHERE kodeKel = ord_drop.drop_klid LIMIT 1) as drop_klid_name ,ord_c.c_id,ord_c.c_name,ord_c.c_pt_id,ord_c.c_pt_name " . $select_order . " FROM t_orders_a_items as ord_a_item INNER JOIN t_orders as ord ON ord_a_item.ord_id = ord.id INNER JOIN t_orders_clients as ord_c ON ord.id = ord_c.ord_id INNER JOIN t_orders_pickups as ord_pck ON ord.id = ord_pck.ord_id INNER JOIN t_orders_drops as ord_drop ON ord.id = ord_drop.ord_id INNER JOIN t_orders_termins as ord_termin ON ord_a_item.c_termin_id = ord_termin.id LEFT JOIN t_orders_invoices as ord_invc ON ord_termin.id = ord_invc.c_termin_id LEFT JOIN t_unit_types as ut ON ord_a_item.unit_type = ut.id " . $join_join . " WHERE ord.dlt is null AND ord_a_item.dlt is null AND ord.is_active = " . Orders::IS_ACTIVE_YES . " AND ord_a_item.is_active = " . OrdersAItems::IS_ACTIVE_YES . " " . $where_where . " AND only_vdr = ? AND invc_to_client = ? AND ord_a_item.is_hidden = ? AND ord_a_item.stts_merge IN (?,?) " . $group_by . " ;", $params ); } public static function listLedgerBl($filter = []) { $params = [ OrdersAItems::IS_ACTIVE_YES, OrdersAItems::ONLY_VDR_NO, OrdersAItems::INVC_TO_CLIENT_YES, OrdersAItems::IS_APRV_YES, OrdersAItems::IS_PAID_YES, OrdersAItems::STTS_MERGE_NO, OrdersAItems::STTS_MERGE_RESULT, OrdersAItems::IS_ACTIVE_YES, OrdersAItems::ONLY_CLIENT_NO, OrdersAItems::CALC_TO_VDR_YES, OrdersAItems::IS_APRV_YES, OrdersAItems::IS_PAID_YES, OrdersAItems::STTS_MERGE_NO, OrdersAItems::STTS_MERGE_RESULT, ]; $select_order = ''; $join_join = ''; $where_where = ''; $group_by = ''; if (isset($filter['ord_id'])) { $where_where .= ' AND ord.id = ?'; $params[] = $filter['ord_id']; } if (isset($filter['with_items'])) { $select_order .= " ,ord_a_item.id as ord_a_item_id ,ord_a_item.a_item_type,ord_a_item.desc as item_desc,ord_a_item.unit_type,unit_type.name as unit_type_name,ord_a_item.unit_qty ,ord_a_item.amt_base_flat,ord_a_item.amt_result_flat,ord_a_item.amt_total_flat ,ord_a_item.amt_bill_base_flat,ord_a_item.amt_bill_result_flat,ord_a_item.amt_bill_total_flat ,ord_a_item.is_paid,ord_a_item.paid_at,ord_a_item.is_bill_paid,ord_a_item.paid_bill_at ,ord_a_item.invc_to_client,ord_a_item.calc_to_vdr,ord_a_item.is_adm_price,ord_a_item.only_client,ord_a_item.only_vdr,ord_a_item.is_hidden,ord_a_item.is_tax,ord_a_item.is_disc ,ord_a_item.is_aprv,ord_a_item.is_bill_aprv "; $join_join .= " INNER JOIN t_orders_a_items as ord_a_item ON ord.id = ord_a_item.ord_id LEFT JOIN t_unit_types as unit_type ON ord_a_item.unit_type = unit_type.id "; // perlu diperbaiki cara if di query, jika kalkulasi ke vendor maka is_aprv = , jika ke client is_bill_aprv = 1 $where_where .= ' AND ord_a_item.dlt is null AND (ord_a_item.calc_to_vdr = ' . OrdersAItems::CALC_TO_VDR_YES . ' OR ord_a_item.invc_to_client = ' . OrdersAItems::INVC_TO_CLIENT_YES . ') AND (ord_a_item.is_aprv = ' . OrdersAItems::IS_APRV_YES . ' OR ord_a_item.is_bill_aprv = ' . OrdersAItems::IS_APRV_YES . ')'; } if (isset($filter['start_date']) && isset($filter['end_date'])) { $where_where .= ' AND ord.crt BETWEEN ? AND ?'; $params[] = $filter['start_date']; $params[] = $filter['end_date']; } if (isset($filter['group_by'])) { $group_by .= ' GROUP BY ' . $filter['group_by']; } return DB::select( "SELECT ord.id as ord_id,ord.code as ord_code,ord.status as ord_status ,@total_in:=(SELECT SUM(amt_bill_total_flat) FROM t_orders_a_items WHERE dlt is null AND is_active = ? AND only_vdr = ? AND invc_to_client = ? AND is_bill_aprv = ? AND is_bill_paid = ? AND stts_merge IN (?,?) AND ord_id = ord.id) as total_in ,@total_out:=(SELECT SUM(amt_total_flat) FROM t_orders_a_items WHERE dlt is null AND is_active = ? AND only_client = ? AND calc_to_vdr = ? AND is_aprv = ? AND is_paid = ? AND stts_merge IN (?,?) AND ord_id = ord.id) as total_out ,(IFNULL(@total_in, 0) - IFNULL(@total_out, 0)) as total_bl ,ord_pck.pck_name,ord_pck.set_pck_at,ord_pck.pck_addr ,(SELECT nmProvinsiKel FROM t_region WHERE kodeProv = ord_pck.pck_prid LIMIT 1) as pck_prid_name ,(SELECT nmKotamadyaKel FROM t_region WHERE kodeKab = ord_pck.pck_ktid LIMIT 1) as pck_ktid_name -- ,(SELECT nmKecamatanKel FROM t_region WHERE kodeKec = ord_pck.pck_kcid LIMIT 1) as pck_kcid_name -- ,(SELECT nmKelurahan FROM t_region WHERE kodeKel = ord_pck.pck_klid LIMIT 1) as pck_klid_name ,ord_drop.drop_name,ord_drop.drop_addr ,(SELECT nmProvinsiKel FROM t_region WHERE kodeProv = ord_drop.drop_prid LIMIT 1) as drop_prid_name ,(SELECT nmKotamadyaKel FROM t_region WHERE kodeKab = ord_drop.drop_ktid LIMIT 1) as drop_ktid_name -- ,(SELECT nmKecamatanKel FROM t_region WHERE kodeKec = ord_drop.drop_kcid LIMIT 1) as drop_kcid_name -- ,(SELECT nmKelurahan FROM t_region WHERE kodeKel = ord_drop.drop_klid LIMIT 1) as drop_klid_name ,ord_c.c_name,ord_c.c_pt_name ,ord_vdr.vdr_name,ord_vdr.vdr_pt_name " . $select_order . " FROM t_orders as ord INNER JOIN t_orders_clients as ord_c ON ord.id = ord_c.ord_id INNER JOIN t_orders_pickups as ord_pck ON ord.id = ord_pck.ord_id INNER JOIN t_orders_drops as ord_drop ON ord.id = ord_drop.ord_id INNER JOIN t_orders_vendors as ord_vdr ON ord.id = ord_vdr.ord_id " . $join_join . " WHERE ord.dlt is null AND ord.is_active = " . Orders::IS_ACTIVE_YES . " " . $where_where . " " . $group_by . " ;", $params ); } public static function summaryLedgerBl($filter = []) { $params = []; $select_order = ''; $join_join = ''; $where_where = ''; // for sum $join_sum = ''; $where_sum = ''; $params_sum_totin = [OrdersAItems::IS_ACTIVE_YES, OrdersAItems::ONLY_VDR_NO, OrdersAItems::INVC_TO_CLIENT_YES, OrdersAItems::IS_APRV_YES, OrdersAItems::IS_PAID_YES, OrdersAItems::STTS_MERGE_NO, OrdersAItems::STTS_MERGE_RESULT]; $params_sum_totout = [OrdersAItems::IS_ACTIVE_YES, OrdersAItems::ONLY_CLIENT_NO, OrdersAItems::CALC_TO_VDR_YES, OrdersAItems::IS_APRV_YES, OrdersAItems::IS_PAID_YES, OrdersAItems::STTS_MERGE_NO, OrdersAItems::STTS_MERGE_RESULT]; if (isset($filter['start_date']) && isset($filter['end_date'])) { $join_sum .= ' INNER JOIN t_orders as o ON a.ord_id = o.id'; $where_sum .= ' AND o.crt BETWEEN ? AND ?'; array_push($params_sum_totin, $filter['start_date'], $filter['end_date']); array_push($params_sum_totout, $filter['start_date'], $filter['end_date']); } // php spread operator was invented on 7.2 $params_real = array_merge($params_sum_totin, $params_sum_totout, $params); return DB::select( "SELECT @total_in:=(SELECT SUM(amt_bill_total_flat) FROM t_orders_a_items as a $join_sum WHERE a.dlt is null AND a.is_active = ? AND a.only_vdr = ? AND a.invc_to_client = ? AND a.is_bill_aprv = ? AND a.is_bill_paid = ? AND a.stts_merge IN (?,?) $where_sum) as total_in ,@total_out:=(SELECT SUM(amt_total_flat) FROM t_orders_a_items as a $join_sum WHERE a.dlt is null AND a.is_active = ? AND a.only_client = ? AND a.calc_to_vdr = ? AND a.is_aprv = ? AND a.is_paid = ? AND a.stts_merge IN (?,?) $where_sum) as total_out ,(IFNULL(@total_in, 0) - IFNULL(@total_out, 0)) as total_bl " . $select_order . " FROM t_orders_a_items as ord_a " . $join_join . " WHERE ord_a.dlt is null AND ord_a.is_active = " . OrdersAItems::IS_ACTIVE_YES . " " . $where_where . " LIMIT 1 ;", $params_real ); } /** * Baru saja pembayaran dilunaskan baik dari client / vendor * false => error * 0 => not paid, 1 => just paid off, 2 => paid off */ public static function checkJustPaidOff($ord_id) { $order = Orders::showOrder(['id' => $ord_id]); if (count($order) < 1 || $order === false) return false; $out = [ 'invc_paid' => 0, 'vdr_paid' => 0, 'invc_vdr_paid' => 0, ]; $currentBill = Finance::listBillings(['ord_id' => $ord_id]); $currentPay = Finance::listPayments(['ord_id' => $ord_id]); // paid off if ($currentBill[0]->total_billing === $currentBill[0]->total_payed || $currentPay[0]->total_payment === $currentPay[0]->total_payed) { if ($currentBill[0]->total_billing === $currentBill[0]->total_payed) { // just paid off if ($order[0]->is_invc_paid !== Orders::IS_PAID_YES) { $out['invc_paid'] = 1; } else { $out['invc_paid'] = 2; } } if ($currentPay[0]->total_payment === $currentPay[0]->total_payed) { // just paid off if ($order[0]->is_vdr_paid !== Orders::IS_PAID_YES) { $out['vdr_paid'] = 1; } else { $out['vdr_paid'] = 2; } } if ($currentBill[0]->total_billing === $currentBill[0]->total_payed && $currentPay[0]->total_payment === $currentPay[0]->total_payed) { // just paid off if ($out['invc_paid'] === 1 || $out['vdr_paid'] === 1) { $out['invc_vdr_paid'] = 1; } else { $out['invc_vdr_paid'] = 2; } } } return $out; } public static function updtChangeInvc($c_termin_id) { $ord_invc = OrdersInvoices::getByTerminId($c_termin_id); if ($ord_invc !== false && count($ord_invc) > 0) { OrdersInvoices::updt($ord_invc[0]->id, [ 'is_gnrt_invc' => OrdersInvoices::IS_GNRT_INVC_NO, ]); return true; } return false; } public static function availOrdToMerge($filter = []) { $params = []; $select = ''; $join = ''; $where = ''; $group_by = ''; $where .= ' AND ord.stts_merge IN (?,?)'; $params[] = OrdersAItems::STTS_MERGE_NO; $params[] = OrdersAItems::STTS_MERGE_RESULT; if (isset($filter['except_ord_id'])) { $where .= ' AND ord.id = ?'; $params[] = $filter['except_ord_id']; } return DB::select( "SELECT ord.* " . $select . " FROM t_orders as ord " . $join . " WHERE ord.dlt is null AND ord.stts_merge = " . Orders::STTS_MERGE_NO . " " . $where . " ORDER BY ord.id DESC " . $group_by . " LIMIT 100 ;", $params ); } }