Files
gps-frontend/app/Models/Finance.php
meusinfirmary b9891d2f81 Initial commit
2025-04-22 14:33:37 +07:00

622 lines
30 KiB
PHP
Executable File

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
use App\Models\OrdersVendors;
use App\Models\Users;
use App\Models\Orders;
use App\Models\OrdersAItems;
use App\Models\OrdersInvoices;
class Finance extends Model
{
public static function listBillings($filter = [])
{
$params = [
OrdersAItems::IS_ACTIVE_YES, OrdersAItems::ONLY_VDR_NO, OrdersAItems::INVC_TO_CLIENT_YES, OrdersAItems::IS_APRV_YES, OrdersAItems::STTS_MERGE_NO, OrdersAItems::STTS_MERGE_RESULT,
OrdersAItems::IS_ACTIVE_YES, OrdersAItems::ONLY_VDR_NO, OrdersAItems::INVC_TO_CLIENT_YES, OrdersAItems::IS_PAID_YES, OrdersAItems::IS_APRV_YES, OrdersAItems::STTS_MERGE_NO, OrdersAItems::STTS_MERGE_RESULT,
OrdersAItems::IS_ACTIVE_YES, OrdersAItems::ONLY_VDR_NO, OrdersAItems::INVC_TO_CLIENT_YES, OrdersAItems::IS_PAID_NO, OrdersAItems::IS_APRV_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['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
,(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 stts_merge IN (?,?) AND ord_id = ord.id) as total_billing
,(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_paid = ? AND is_bill_aprv = ? AND stts_merge IN (?,?) AND ord_id = ord.id) as total_payed
,(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_paid = ? AND is_bill_aprv = ? AND stts_merge IN (?,?) AND ord_id = ord.id) as total_remaining
,ord.is_invc_paid,ord.invc_paid_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
,(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 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
" . $join_join . "
WHERE ord.dlt is null
AND ord.is_active = " . Orders::IS_ACTIVE_YES . "
" . $where_where . "
" . $group_by . "
;",
$params
);
}
public static function summaryBillings($filter = [])
{
$params = [];
$select_order = '';
$join_join = '';
$where_where = '';
// for sum
$join_sum = '';
$where_sum = '';
$params_sum_totbilling = [OrdersAItems::IS_ACTIVE_YES, OrdersAItems::ONLY_VDR_NO, OrdersAItems::INVC_TO_CLIENT_YES, OrdersAItems::IS_APRV_YES, OrdersAItems::STTS_MERGE_NO, OrdersAItems::STTS_MERGE_RESULT];
$params_sum_totpayed = [OrdersAItems::IS_ACTIVE_YES, OrdersAItems::ONLY_VDR_NO, OrdersAItems::INVC_TO_CLIENT_YES, OrdersAItems::IS_PAID_YES, OrdersAItems::IS_APRV_YES, OrdersAItems::STTS_MERGE_NO, OrdersAItems::STTS_MERGE_RESULT];
$params_sum_totremaining = [OrdersAItems::IS_ACTIVE_YES, OrdersAItems::ONLY_VDR_NO, OrdersAItems::INVC_TO_CLIENT_YES, OrdersAItems::IS_PAID_NO, OrdersAItems::IS_APRV_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_totbilling, $filter['start_date'], $filter['end_date']);
array_push($params_sum_totpayed, $filter['start_date'], $filter['end_date']);
array_push($params_sum_totremaining, $filter['start_date'], $filter['end_date']);
}
// php spread operator was invented on 7.2
$params_real = array_merge($params_sum_totbilling, $params_sum_totpayed, $params_sum_totremaining, $params);
return DB::select(
"SELECT
-- (SELECT SUM(price) FROM t_orders WHERE dlt is null AND confirm_client_pay_at != 0) as total_billing
-- (SELECT SUM(price) FROM t_orders WHERE dlt is null) as total_billing -- sebelum ada fitur merge
(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.stts_merge IN (?,?) $where_sum) as total_billing
,(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_paid = ? AND a.is_bill_aprv = ? AND a.stts_merge IN (?,?) $where_sum) as total_payed
,(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_paid = ? AND a.is_bill_aprv = ? AND a.stts_merge IN (?,?) $where_sum) as total_remaining
" . $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
);
}
public static function listPayments($filter = [])
{
$params = [
OrdersAItems::IS_ACTIVE_YES, OrdersAItems::ONLY_CLIENT_NO, OrdersAItems::CALC_TO_VDR_YES, OrdersAItems::IS_APRV_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,
OrdersAItems::IS_ACTIVE_YES, OrdersAItems::ONLY_CLIENT_NO, OrdersAItems::CALC_TO_VDR_YES, OrdersAItems::IS_APRV_YES, OrdersAItems::IS_PAID_NO, 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['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
,ord.group_code as ord_group_code
,(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 stts_merge IN (?,?) AND ord_id = ord.id) as total_payment
,(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_payed
,(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_remaining
,ord.is_vdr_paid,ord.vdr_paid_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
,(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
);
}
// admin bank tetap terkalkulasi
// bagaimana caranya main item client tidak tecalc di pembayaran ? where column only_client is no
public static function summaryPayments($filter = [])
{
// general
$params = [];
$select_order = '';
$join_join = '';
$where_where = '';
// for sum
$join_sum = '';
$where_sum = '';
$params_sum_totpayment = [OrdersAItems::IS_ACTIVE_YES, OrdersAItems::ONLY_CLIENT_NO, OrdersAItems::CALC_TO_VDR_YES, OrdersAItems::IS_APRV_YES, OrdersAItems::STTS_MERGE_NO, OrdersAItems::STTS_MERGE_RESULT];
$params_sum_totpayed = [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];
$params_sum_totremaining = [OrdersAItems::IS_ACTIVE_YES, OrdersAItems::ONLY_CLIENT_NO, OrdersAItems::CALC_TO_VDR_YES, OrdersAItems::IS_APRV_YES, OrdersAItems::IS_PAID_NO, 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_totpayment, $filter['start_date'], $filter['end_date']);
array_push($params_sum_totpayed, $filter['start_date'], $filter['end_date']);
array_push($params_sum_totremaining, $filter['start_date'], $filter['end_date']);
}
// php spread operator was invented on 7.2
$params_real = array_merge($params_sum_totpayment, $params_sum_totpayed, $params_sum_totremaining, $params);
return DB::select(
"SELECT
-- (SELECT SUM(buy_price) FROM t_orders WHERE dlt is null) as total_payment
(SELECT SUM(a.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.stts_merge IN (?,?) $where_sum) as total_payment
,(SELECT SUM(a.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_payed
,(SELECT SUM(a.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_remaining
" . $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
);
}
public static function listAdtItemsPayments($filter = [])
{
$params = [];
$select_order = '';
$join_join = '';
$where_where = '';
$group_by = '';
if (isset($filter['is_access_by_admin'])) {
$where_where .= ' AND crt_type = ?';
$params[] = OrdersAItems::CRT_TYPE_ADMIN;
}
if (isset($filter['ord_id'])) {
// $where_where .= ' AND ord.id = ?';
$where_where .= ' AND ord_a_item.ord_id = ?';
$params[] = $filter['ord_id'];
}
if (isset($filter['ord_ids'])) {
$binds_ids = "";
foreach ($filter['ord_ids'] as $k => $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
);
}
}