Your IP : 216.73.216.79


Current Path : /var/www/html/crm/components/
Upload File :
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;
    }

}