Evra70

Selesai Kunjungan

May 14th, 2020
328
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 12.82 KB | None | 0 0
  1. <?php
  2.  
  3. namespace Sts\CmsActivity\BO;
  4.  
  5. use APP;
  6. use App\Jobs\PenyelesaianKunjunganSalesman;
  7. use GuzzleHttp\Client;
  8. use GuzzleHttp\Exception\RequestException;
  9. use Log;
  10. use Sts\CmsActivity\Model\SlAdminProcessVisitPlan;
  11. use Sts\CmsCommon\Helpers\LogApiHelper;
  12. use Sts\PleafCore\BusinessTransaction;
  13. use Sts\PleafCore\CoreException;
  14. use Sts\PleafCore\DateUtil;
  15. use Sts\PleafCore\DefaultBusinessTransaction;
  16.  
  17. /**
  18.  * @author Bahar, 18/10/2019
  19.  * @in
  20.  *
  21.  * @out
  22.  */
  23.  
  24. class FinishAdminProcessVisitPlan extends DefaultBusinessTransaction implements BusinessTransaction
  25. {
  26.  
  27.     public function getDescription()
  28.     {
  29.         return "salesman menyelesaikan kunjungan";
  30.     }
  31.  
  32.     public function prepare($dto, $originalDto)
  33.     {
  34.  
  35.         $findPartnerByUserId = \App::make("findPartnerByUserId");
  36.  
  37.         $input_findPartnerByUserId = [
  38.             "user_id"   => $dto["user_id"],
  39.         ];
  40.  
  41.         $findPartnerByUserId_result = $findPartnerByUserId->execute($input_findPartnerByUserId);
  42.  
  43.         $FindAdminProcessVisitPlain = \App::make("findAdminProcessVisitPlain");
  44.  
  45.         $input_findAdminProcessVisitPlain = [
  46.             "tenant_id" => $dto["tenant_id"],
  47.             "employee_id" => $findPartnerByUserId_result->partner_id,
  48.             "start_date" => $dto["start_date"]
  49.         ];
  50.  
  51.         $FindAdminProcessVisitPlain_result = $FindAdminProcessVisitPlain->execute($input_findAdminProcessVisitPlain);
  52.  
  53.         if($FindAdminProcessVisitPlain_result->status_visit != "I") {
  54.             $this->errorBusinessValidation(["error" => "status visit plan belum konfirmasi serah terima tagihan"]);
  55.         }
  56.  
  57.         $dto["admin_process_visit_plan_id"]  = $FindAdminProcessVisitPlain_result->admin_process_visit_plan_id;
  58.        
  59.         return $dto;
  60.     }
  61.  
  62.     public function process($dto, $originalDto)
  63.     {
  64.         Log::debug("BT FinishAdminProcessVisitPlan");
  65.  
  66.         $admin_process_visit_plan_id    = $dto["admin_process_visit_plan_id"];
  67.         $user_id                        = $dto["user_id"];
  68.         $datetime                       = DateUtil::dateTimeNow();
  69.  
  70.         $addAdminProcessVisitPlan                   = SlAdminProcessVisitPlan::find($admin_process_visit_plan_id);
  71.         $addAdminProcessVisitPlan->status_visit     = "R";
  72.         $addAdminProcessVisitPlan->status_invoice   = "R";
  73.  
  74.         self::auditUpdate($addAdminProcessVisitPlan, $user_id, $datetime);
  75.  
  76.         $addAdminProcessVisitPlan->save();
  77.  
  78.         $input_jobs = [
  79.             "admin_process_visit_plan_id"   => $addAdminProcessVisitPlan->admin_process_visit_plan_id,
  80.             "start_date"                    => $addAdminProcessVisitPlan->start_date,
  81.             "end_date"                      => $addAdminProcessVisitPlan->end_date,
  82.             "datetime"                      => $datetime,
  83.             "employee_id"                   => $addAdminProcessVisitPlan->employee_id
  84.         ];
  85.  
  86.         $outputCallApiExternal = $this->createCallApiExternal($input_jobs);
  87.  
  88.         if(!$outputCallApiExternal["success"]) {
  89.             throw new CoreException("ERROR_CALL_API_EXTERNAL", [], $outputCallApiExternal);
  90.         }
  91.  
  92.         $outputCallApiExternal["result"] = $addAdminProcessVisitPlan;
  93.  
  94.         return $outputCallApiExternal;
  95.     }
  96.  
  97.     private function createCallApiExternal($data) {
  98.         Log::info("[PROCESS] PenyelesaianKunjunganSalesman ".DateUtil::dateTimeNow()." [PROCESS] ");
  99.  
  100.         $employee_code              = self::getEmployeeCode($data["employee_id"]);
  101.         $customer_list              = self::getCustomerList($data["employee_id"], $data["admin_process_visit_plan_id"], $data["start_date"], $data["end_date"]);
  102.  
  103.         $baseUrl = getenv("WISER_API_URL");
  104.         $url = $baseUrl."visit/penyelesaiankunjungan";
  105.         $apiName = "Penyelesaian Kunjungan";
  106.         $request_time = time();
  107.  
  108.         $jsonInput = [
  109.             "apikey"                    => getenv("WISER_API_KEY"),
  110.             "employee_code"             => $employee_code->employee_code,
  111.             "datetime"                  => $data["datetime"],
  112.             "username"                  => $employee_code->employee_code,
  113.             "customer_list"             => $customer_list
  114.         ];
  115.  
  116.         try {
  117.  
  118.             Log::info("URL Request: ".$url);
  119.             Log::debug("Request Json: ".json_encode($jsonInput));
  120.  
  121.             $client = new Client();
  122.             $response = $client->post($url, [
  123.                 'json' => $jsonInput
  124.             ]);
  125.  
  126.             Log::info("Result :");
  127.             Log::debug($response->getBody());
  128.  
  129.             $code = $response->getStatusCode();
  130.  
  131.             $body = json_decode($response->getBody());
  132.             $success = $body->success;
  133.  
  134.             if($success) {
  135.  
  136.                 $response = [
  137.                     "api_name" => $apiName,
  138.                     "url" => $url,
  139.                     "request_time" => $request_time,
  140.                     "json_input" => json_encode($jsonInput),
  141.                     "response_code" => $code,
  142.                     "response_output" => $response->getBody(),
  143.                     "success" => $success
  144.                 ];
  145.  
  146.             } else {
  147.  
  148.                 $response = [
  149.                     "api_name" => $apiName,
  150.                     "url" => $url,
  151.                     "request_time" => $request_time,
  152.                     "json_input" => json_encode($jsonInput),
  153.                     "response_code" => $code,
  154.                     "error_message" => $body->error_message,
  155.                     "response_output" => $response->getBody(),
  156.                     "success" => $success
  157.                 ];
  158.  
  159.             }
  160.  
  161.         } catch (\Exception $ex) {
  162.             Log::error(json_encode($ex->getMessage()));
  163.  
  164.             $response = [
  165.                 "api_name" => $apiName,
  166.                 "url" => $url,
  167.                 "request_time" => $request_time,
  168.                 "json_input" => json_encode($jsonInput),
  169.                 "response_code" => $ex->getCode(),
  170.                 "error_message" => $ex->getMessage(),
  171.                 "response_output" => $ex->getMessage(),
  172.                 "success" => false
  173.             ];
  174.  
  175.         }
  176.  
  177.         Log::info("[END-PROCESS] PenyelesaianKunjunganSalesman ".DateUtil::dateTimeNow()." [END-PROCESS] ");
  178.  
  179.         return $response;
  180.  
  181.     }
  182.  
  183.     private function getEmployeeCode($employee_id) {
  184.  
  185.         $result = collect(\DB::Select(" SELECT f_get_partner_code($employee_id) AS employee_code; "))->first();
  186.  
  187.         return $result;
  188.     }
  189.  
  190.     private function getCustomerList($employee_id, $admin_process_visit_plan_id, $start_date, $end_date) {
  191.  
  192.         $result = \DB::Select(" SELECT f_get_partner_code(customer_id) AS customer_code, check_in_longitude AS longitude_checkin,
  193.        check_out_longitude AS longitude_checkout, check_in_latitude AS latitude_checkin, check_out_latitude AS latitude_checkout,
  194.        salesman_visit_plan_id, salesman_visit_realization_id, customer_id
  195.        FROM sl_salesman_visit_realization
  196.        WHERE visit_date  >= '$start_date' AND visit_date <= '$end_date' AND salesman_id = $employee_id; ");
  197.  
  198.         $customerInvoiceList = [];
  199.         foreach($result AS $value) {
  200.  
  201.             $exchange = \DB::Select("
  202.                        SELECT A.doc_no, A.doc_date, A.register_id, B.invoice_ext_id AS invoice_id,
  203.                            C.invoice_amount, C.outstanding_amount, COALESCE(A.remark, '') AS remark
  204.                        FROM sl_invoice_exchange A
  205.                        INNER JOIN sl_invoice_balance_visit_plan_detail B ON A.invoice_exchange_id = B.ref_id AND B.flg_invoice = 'E'
  206.                        INNER JOIN sl_invoice_visit_plan C ON B.ref_invoice_id = C.invoice_visit_plan_id
  207.                        WHERE A.salesman_visit_plan_id = $value->salesman_visit_plan_id
  208.                            AND A.salesman_visit_realization_id = $value->salesman_visit_realization_id
  209.                            AND A.customer_id = $value->customer_id            
  210.            ");
  211.  
  212.             $invoicePaidList = \DB::Select("
  213.                        SELECT distinct A.invoice_doc_no AS doc_no, A.invoice_doc_date AS doc_date, A.register_id, A.invoice_ext_id AS invoice_id,
  214.                            B.invoice_amount, B.invoice_amount - B.nominal_bayar AS outstanding_amount, B.nominal_bayar
  215.                        FROM sl_invoice_balance_visit_plan_detail A
  216.                        INNER JOIN sl_invoice_visit_plan B ON A.ref_invoice_id = B.invoice_visit_plan_id
  217.                        WHERE A.salesman_visit_realization_id = $value->salesman_visit_realization_id
  218.                            AND A.customer_id = $value->customer_id
  219.                            AND A.flg_invoice = 'P'
  220.                            AND A.salesman_visit_plan_id = $value->salesman_visit_plan_id
  221.                            AND B.invoice_amount - B.nominal_bayar <= 0
  222.            ");
  223.  
  224.             $invoiceUnPaidList = \DB::Select("
  225.                        SELECT distinct A.doc_no, A.doc_date, B.register_id, A.invoice_ext_id AS invoice_id,
  226.                            A.invoice_amount, A.invoice_amount - A.nominal_bayar AS outstanding_amount, A.nominal_bayar
  227.                        FROM sl_invoice_visit_plan A
  228.                        INNER JOIN sl_admin_process_visit_plan B ON A.admin_process_visit_plan_id = B.admin_process_visit_plan_id
  229.                        WHERE A.admin_process_visit_plan_id = $admin_process_visit_plan_id
  230.                            AND A.customer_id = $value->customer_id
  231.                            AND A.status = 'P'
  232.                            AND A.invoice_amount - A.nominal_bayar > 0            
  233.            ");
  234.  
  235. //            $unexchange = \DB::Select(" SELECT A.doc_no, A.doc_date, B.register_id, A.invoice_ext_id AS invoice_id,
  236. //            A.invoice_amount, A.outstanding_amount
  237. //            FROM sl_invoice_visit_plan A
  238. //            INNER JOIN sl_admin_process_visit_plan B ON A.admin_process_visit_plan_id = B.admin_process_visit_plan_id
  239. //            WHERE A.customer_id = $value->customer_id AND A.status = 'N' AND B.admin_process_visit_plan_id = $admin_process_visit_plan_id; ");
  240.  
  241.             $noncash = \DB::Select("
  242.                    SELECT distinct A.mode_payment, A.account_no, B.doc_no AS payment_doc_no, B.doc_date AS payment_doc_date,
  243.                        A.date_payment, A.due_date, A.payment_amount, COALESCE(A.remark, '') AS remark, A.doc_no AS ext_doc_no, A.doc_date AS ext_doc_date
  244.                    FROM sl_invoice_payment_item A
  245.                    INNER JOIN sl_invoice_payment B ON A.invoice_payment_id = B.invoice_payment_id
  246.                    INNER JOIN sl_invoice_balance_visit_plan_detail C ON B.invoice_payment_id = C.ref_id AND C.flg_invoice = 'P'
  247.                    WHERE B.salesman_visit_plan_id = $value->salesman_visit_plan_id
  248.                        AND B.customer_id = $value->customer_id
  249.                        AND B.salesman_visit_realization_id = $value->salesman_visit_realization_id
  250.                        AND A.type_payment = 'NONCASH'
  251.                 ; ");
  252.  
  253.             $cash = \DB::Select("
  254.                    SELECT distinct A.payment_amount, A.date_payment, COALESCE(A.remark, '') AS remark,
  255.                        B.doc_no AS payment_doc_no, B.doc_date AS payment_doc_date, A.invoice_payment_item_id::character varying AS no_payment
  256.                    FROM sl_invoice_payment_item A
  257.                    INNER JOIN sl_invoice_payment B ON A.invoice_payment_id = B.invoice_payment_id
  258.                    INNER JOIN sl_invoice_balance_visit_plan_detail C ON B.invoice_payment_id = C.ref_id AND C.flg_invoice = 'P'
  259.                    WHERE B.salesman_visit_plan_id = $value->salesman_visit_plan_id
  260.                        AND B.customer_id = $value->customer_id
  261.                        AND B.salesman_visit_realization_id = $value->salesman_visit_realization_id
  262.                        AND A.type_payment = 'CASH'
  263.                 ; ");
  264.  
  265.             $list = [
  266.                 "customer_code"         => $value->customer_code,
  267.                 "longitude_checkin"     => $value->longitude_checkin,
  268.                 "longitude_checkout"    => $value->longitude_checkout,
  269.                 "latitude_checkin"      => $value->latitude_checkin,
  270.                 "latitude_checkout"     => $value->latitude_checkout,
  271.                 "invoice_exchange_list" => $exchange,
  272.                 "invoice_lunas_list" => $invoicePaidList,
  273.                 "invoice_belum_lunas_list" => $invoiceUnPaidList,
  274. //                "invoice_unchanged_list"=> $unexchange,
  275.                 "non_cash_payment_list" => $noncash,
  276.                 "cash_payment_list"     => $cash
  277.             ];
  278.  
  279.             array_push($customerInvoiceList, $list);
  280.         }
  281.  
  282.         return $customerInvoiceList;
  283.  
  284.     }
  285.  
  286.     protected function rules()
  287.     {
  288.         return [
  289.             "user_id" => "required",
  290.             "tenant_id" => "required",
  291.         ];
  292.     }
  293. }
Add Comment
Please, Sign In to add comment