| Current Path : /var/www/html/crm/components/ |
| Current File : /var/www/html/crm/components/Sales.php |
<?php
namespace app\components;
use Yii;
use yii\base\Component;
use yii\base\InvalidConfigException;
class Sales extends Component {
public function getProductSalesQuery($company_id = '', $start_dt = '', $end_dt = '', $product_id = '') {
//(Invoice DO paid - grn) + debit note + cash sales invoice
$sqlExt1 = "";
$sqlExt2 = "";
$sqlExt3 = "";
if (!empty($company_id)) {
$sqlExt1 .= " AND invoice.com_id IN (" . $company_id . ")";
$sqlExt2 .= "AND invoice.com_id IN (" . $company_id . ")";
$sqlExt3 .= " AND debitnote.company_id IN (" . $company_id . ")";
}
if (!empty($start_dt) && !empty($end_dt)) {
$sqlExt1 .= " AND DATE(invoice.paid_dt) BETWEEN '" . $start_dt . "' AND '" . $end_dt . "'";
$sqlExt2 .= " AND DATE(invoice.paid_dt) BETWEEN '" . $start_dt . "' AND '" . $end_dt . "'";
$sqlExt3 .= " AND DATE(debitnote.doc_dt) BETWEEN '" . $start_dt . "' AND '" . $end_dt . "'";
}
if (!empty($product_id)) {
$sqlExt1 .= " AND delivery_order_item.product_id IN (" . $product_id . ")";
$sqlExt2 .= "AND invoice_item.descr IN (" . $product_id . ")";
$sqlExt3 .= " AND debitnote_item.product_id IN (" . $product_id . ")";
}
$output = "SELECT
'DO Invoice' AS doc_type,
delivery_order_item.product_id,
(
IFNULL(delivery_order_item.quantity,0)-
IFNULL((SELECT SUM(quantity) FROM grn WHERE grn.do_id=invoice.do_no AND grn.product_id=delivery_order_item.product_id),0)
) AS quantity,
(
(
IFNULL(delivery_order_item.quantity,0)-
IFNULL((SELECT SUM(quantity) FROM grn WHERE grn.do_id=invoice.do_no AND grn.product_id=delivery_order_item.product_id),0)
)*delivery_order_item.unit_price) AS total_price,
invoice.invoice_no AS doc_no,
delivery_order_item.unit_price,
invoice.com_id,
invoice.paid_dt,
delivery_order_item.quantity AS qty_send,
(SELECT SUM(quantity) FROM grn WHERE grn.do_id=invoice.do_no AND grn.product_id=delivery_order_item.product_id) AS qty_return,
delivery_order.customer_name
FROM invoice INNER JOIN delivery_order_item ON invoice.do_no=delivery_order_item.doc_id INNER JOIN delivery_order ON invoice.do_no=delivery_order.id
WHERE invoice.type='do' AND invoice.payment_status='Paid' " . $sqlExt1 . "
UNION
SELECT
'Cash Sales Invoice' AS doc_type,
invoice_item.descr AS product_id,
invoice_item.quantity,
(invoice_item.quantity*invoice_item.unit_price) AS total_price,
invoice.invoice_no AS doc_no,
invoice_item.unit_price,
invoice.com_id,
invoice.paid_dt,
invoice_item.quantity AS qty_send,
'0' AS qty_return,
invoice.customer_name
FROM invoice INNER JOIN invoice_item ON invoice.id=invoice_item.doc_id
WHERE invoice.type='cash' AND invoice.payment_status='Paid' " . $sqlExt2 . "
UNION
SELECT
'Debit Note' AS doc_type,
debitnote_item.product_id,
debitnote_item.quantity,
(debitnote_item.quantity*debitnote_item.unit_price) AS total_price,
debitnote.doc_no,
debitnote_item.unit_price,
debitnote.company_id AS com_id,
debitnote.doc_dt AS paid_dt,
debitnote_item.quantity AS qty_send,
'0' AS qty_return,
debitnote.customer_name
FROM debitnote INNER JOIN debitnote_item ON debitnote.id=debitnote_item.doc_id
WHERE debitnote.type='product' " . $sqlExt3;
return $output;
}
public function getProductOfflineSalesQuery($company_id = '', $start_dt = '', $end_dt = '', $product_id = '') {
//(Invoice DO paid - grn) + debit note + cash sales invoice
$sqlExt1 = "";
$sqlExt2 = "";
$sqlExt3 = "";
if (!empty($company_id)) {
$sqlExt1 .= " AND invoice.com_id IN (" . $company_id . ")";
$sqlExt2 .= "AND invoice.com_id IN (" . $company_id . ")";
$sqlExt3 .= " AND debitnote.company_id IN (" . $company_id . ")";
}
if (!empty($start_dt) && !empty($end_dt)) {
$sqlExt1 .= " AND DATE(invoice.paid_dt) BETWEEN '" . $start_dt . "' AND '" . $end_dt . "'";
$sqlExt2 .= " AND DATE(invoice.paid_dt) BETWEEN '" . $start_dt . "' AND '" . $end_dt . "'";
$sqlExt3 .= " AND DATE(debitnote.doc_dt) BETWEEN '" . $start_dt . "' AND '" . $end_dt . "'";
}
if (!empty($product_id)) {
$sqlExt1 .= " AND delivery_order_item.product_id IN (" . $product_id . ")";
$sqlExt2 .= "AND invoice_item.descr IN (" . $product_id . ")";
$sqlExt3 .= " AND debitnote_item.product_id IN (" . $product_id . ")";
}
$output = "SELECT
'DO Invoice' AS doc_type,
delivery_order_item.product_id,
(
IFNULL(delivery_order_item.quantity,0)-
IFNULL((SELECT SUM(quantity) FROM grn WHERE grn.do_id=invoice.do_no AND grn.product_id=delivery_order_item.product_id),0)
) AS quantity,
(
(
IFNULL(delivery_order_item.quantity,0)-
IFNULL((SELECT SUM(quantity) FROM grn WHERE grn.do_id=invoice.do_no AND grn.product_id=delivery_order_item.product_id),0)
)*delivery_order_item.unit_price) AS total_price,
invoice.invoice_no AS doc_no,
delivery_order_item.unit_price,
invoice.com_id,
invoice.paid_dt,
delivery_order_item.quantity AS qty_send,
(SELECT SUM(quantity) FROM grn WHERE grn.do_id=invoice.do_no AND grn.product_id=delivery_order_item.product_id) AS qty_return,
delivery_order.customer_name
FROM invoice INNER JOIN delivery_order_item ON invoice.do_no=delivery_order_item.doc_id INNER JOIN delivery_order ON invoice.do_no=delivery_order.id
WHERE invoice.type='do' AND invoice.payment_status='Paid' " . $sqlExt1 . "
UNION
SELECT
'Cash Sales Invoice' AS doc_type,
invoice_item.descr AS product_id,
invoice_item.quantity,
(invoice_item.quantity*invoice_item.unit_price) AS total_price,
invoice.invoice_no AS doc_no,
invoice_item.unit_price,
invoice.com_id,
invoice.paid_dt,
invoice_item.quantity AS qty_send,
'0' AS qty_return,
invoice.customer_name
FROM invoice INNER JOIN invoice_item ON invoice.id=invoice_item.doc_id
WHERE invoice.type='cash' AND invoice.payment_status='Paid' " . $sqlExt2 . "
UNION
SELECT
'Debit Note' AS doc_type,
debitnote_item.product_id,
debitnote_item.quantity,
(debitnote_item.quantity*debitnote_item.unit_price) AS total_price,
debitnote.doc_no,
debitnote_item.unit_price,
debitnote.company_id AS com_id,
debitnote.doc_dt AS paid_dt,
debitnote_item.quantity AS qty_send,
'0' AS qty_return,
debitnote.customer_name
FROM debitnote INNER JOIN debitnote_item ON debitnote.id=debitnote_item.doc_id
WHERE debitnote.type='product' " . $sqlExt3;
return $output;
}
public function getCompanySalesQuery($company_id = '', $start_dt = '', $end_dt = '') {
//3 invoice + debit note - credit note
$sqlExt1 = "";
$sqlExt2 = "";
$sqlExtArr3 = [];
$sqlExtArr4 = [];
if (!empty($company_id)) {
$sqlExt1 = " AND invoice.com_id IN (" . $company_id . ")";
$sqlExt2 = " AND invoice.com_id IN (" . $company_id . ")";
$sqlExtArr3[] = "debitnote.company_id IN (" . $company_id . ")";
$sqlExtArr4[] = "creditnote.company_id IN (" . $company_id . ")";
}
if (!empty($start_dt) && !empty($end_dt)) {
$sqlExt1 .= " AND DATE(invoice.paid_dt) BETWEEN '" . $start_dt . "' AND '" . $end_dt . "'";
$sqlExt2 .= " AND DATE(invoice.paid_dt) BETWEEN '" . $start_dt . "' AND '" . $end_dt . "'";
$sqlExtArr3[] = "DATE(debitnote.doc_dt) BETWEEN '" . $start_dt . "' AND '" . $end_dt . "'";
$sqlExtArr4[] = "DATE(creditnote.doc_dt) BETWEEN '" . $start_dt . "' AND '" . $end_dt . "'";
}
$sqlExt3 = "";
$sqlExt4 = "";
if (!empty($sqlExtArr3))
$sqlExt3 = " WHERE " . implode(" AND ", $sqlExtArr3);
if (!empty($sqlExtArr4))
$sqlExt4 = " WHERE " . implode(" AND ", $sqlExtArr4);
$output = "SELECT uuid, paid_dt, invoice_no AS doc_no, grandtotal, 'Service Invoice' AS doc_type, customer_name, com_id
FROM invoice WHERE payment_status='Paid' AND type='manual' " . $sqlExt1 . "
UNION
SELECT uuid, paid_dt, invoice_no AS doc_no, grandtotal, 'Cash Sales Invoice' AS doc_type, customer_name, com_id
FROM invoice WHERE payment_status='Paid' AND type='cash' " . $sqlExt1 . "
UNION
SELECT invoice.uuid, invoice.paid_dt, invoice.invoice_no AS doc_no, grandtotal, 'DO Invoice' AS doc_type, delivery_order.customer_name, delivery_order.company_id AS com_id
FROM invoice INNER JOIN delivery_order ON invoice.do_no=delivery_order.id
WHERE invoice.payment_status='Paid' AND invoice.type='do' " . $sqlExt2 . "
UNION
SELECT uuid, doc_dt AS paid_dt, doc_no, grandtotal, 'Debit Note' AS doc_type, customer_name, company_id AS com_id
FROM debitnote " . $sqlExt3 . "
UNION
SELECT creditnote.uuid, doc_dt AS paid_dt, doc_no, CONCAT('-',creditnote.grandtotal), 'Credit Note' AS doc_type, creditnote.customer_name, creditnote.company_id As com_id
FROM grn_parent INNER JOIN creditnote ON grn_parent.cn_id=creditnote.id " . $sqlExt4;
return $output;
}
public function getSalesPersonSalesQuery($company_id = '', $start_dt = '', $end_dt = '', $user_id = '') {
//DO with status=Consigned
$sqlExt = "";
if (!empty($company_id))
$sqlExt .= " AND company_id IN (" . $company_id . ")";
if (!empty($start_dt) && !empty($end_dt))
$sqlExt .= " AND DATE(doc_dt) BETWEEN '" . $start_dt . "' AND '" . $end_dt . "'";
if (!empty($user_id))
$sqlExt .= " AND sales_pic=" . $user_id;
$output = "SELECT *,
(
SELECT SUM(delivery_order_item.total)
FROM delivery_order_item
WHERE delivery_order_item.doc_id=delivery_order.id
) AS grandtotal, (
SELECT SUM(delivery_order_item.quantity)
FROM delivery_order_item
WHERE delivery_order_item.doc_id=delivery_order.id
) AS qtyproduct
FROM delivery_order WHERE status='Consigned' AND sales_pic!='' " . $sqlExt." ORDER BY doc_dt DESC";
return $output;
}
public function getSalesPersonCollectionQuery($company_id = '', $start_dt = '', $end_dt = '', $user_id = '') {
//Invoice with payment_status=Paid
$sqlExt = "";
if (!empty($company_id))
$sqlExt .= " AND com_id IN (" . $company_id . ")";
if (!empty($start_dt) && !empty($end_dt))
$sqlExt .= " AND DATE(paid_dt) BETWEEN '" . $start_dt . "' AND '" . $end_dt . "'";
if (!empty($user_id))
$sqlExt .= " AND sales_pic=" . $user_id;
$output = "SELECT type, grandtotal, sales_pic, com_id, customer_name, invoice_no, paid_dt FROM invoice
WHERE payment_status='Paid' AND sales_pic!='' " . $sqlExt;
return $output;
}
}