Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- namespace Sts\CmsActivity\BO;
- use APP;
- use App\Jobs\PenyelesaianKunjunganSalesman;
- use GuzzleHttp\Client;
- use GuzzleHttp\Exception\RequestException;
- use Log;
- use Sts\CmsActivity\Model\SlAdminProcessVisitPlan;
- use Sts\CmsCommon\Helpers\LogApiHelper;
- use Sts\PleafCore\BusinessTransaction;
- use Sts\PleafCore\CoreException;
- use Sts\PleafCore\DateUtil;
- use Sts\PleafCore\DefaultBusinessTransaction;
- /**
- * @author Bahar, 18/10/2019
- * @in
- *
- * @out
- */
- class FinishAdminProcessVisitPlan extends DefaultBusinessTransaction implements BusinessTransaction
- {
- public function getDescription()
- {
- return "salesman menyelesaikan kunjungan";
- }
- public function prepare($dto, $originalDto)
- {
- $findPartnerByUserId = \App::make("findPartnerByUserId");
- $input_findPartnerByUserId = [
- "user_id" => $dto["user_id"],
- ];
- $findPartnerByUserId_result = $findPartnerByUserId->execute($input_findPartnerByUserId);
- $FindAdminProcessVisitPlain = \App::make("findAdminProcessVisitPlain");
- $input_findAdminProcessVisitPlain = [
- "tenant_id" => $dto["tenant_id"],
- "employee_id" => $findPartnerByUserId_result->partner_id,
- "start_date" => $dto["start_date"]
- ];
- $FindAdminProcessVisitPlain_result = $FindAdminProcessVisitPlain->execute($input_findAdminProcessVisitPlain);
- if($FindAdminProcessVisitPlain_result->status_visit != "I") {
- $this->errorBusinessValidation(["error" => "status visit plan belum konfirmasi serah terima tagihan"]);
- }
- $dto["admin_process_visit_plan_id"] = $FindAdminProcessVisitPlain_result->admin_process_visit_plan_id;
- return $dto;
- }
- public function process($dto, $originalDto)
- {
- Log::debug("BT FinishAdminProcessVisitPlan");
- $admin_process_visit_plan_id = $dto["admin_process_visit_plan_id"];
- $user_id = $dto["user_id"];
- $datetime = DateUtil::dateTimeNow();
- $addAdminProcessVisitPlan = SlAdminProcessVisitPlan::find($admin_process_visit_plan_id);
- $addAdminProcessVisitPlan->status_visit = "R";
- $addAdminProcessVisitPlan->status_invoice = "R";
- self::auditUpdate($addAdminProcessVisitPlan, $user_id, $datetime);
- $addAdminProcessVisitPlan->save();
- $input_jobs = [
- "admin_process_visit_plan_id" => $addAdminProcessVisitPlan->admin_process_visit_plan_id,
- "start_date" => $addAdminProcessVisitPlan->start_date,
- "end_date" => $addAdminProcessVisitPlan->end_date,
- "datetime" => $datetime,
- "employee_id" => $addAdminProcessVisitPlan->employee_id
- ];
- $outputCallApiExternal = $this->createCallApiExternal($input_jobs);
- if(!$outputCallApiExternal["success"]) {
- throw new CoreException("ERROR_CALL_API_EXTERNAL", [], $outputCallApiExternal);
- }
- $outputCallApiExternal["result"] = $addAdminProcessVisitPlan;
- return $outputCallApiExternal;
- }
- private function createCallApiExternal($data) {
- Log::info("[PROCESS] PenyelesaianKunjunganSalesman ".DateUtil::dateTimeNow()." [PROCESS] ");
- $employee_code = self::getEmployeeCode($data["employee_id"]);
- $customer_list = self::getCustomerList($data["employee_id"], $data["admin_process_visit_plan_id"], $data["start_date"], $data["end_date"]);
- $baseUrl = getenv("WISER_API_URL");
- $url = $baseUrl."visit/penyelesaiankunjungan";
- $apiName = "Penyelesaian Kunjungan";
- $request_time = time();
- $jsonInput = [
- "apikey" => getenv("WISER_API_KEY"),
- "employee_code" => $employee_code->employee_code,
- "datetime" => $data["datetime"],
- "username" => $employee_code->employee_code,
- "customer_list" => $customer_list
- ];
- try {
- Log::info("URL Request: ".$url);
- Log::debug("Request Json: ".json_encode($jsonInput));
- $client = new Client();
- $response = $client->post($url, [
- 'json' => $jsonInput
- ]);
- Log::info("Result :");
- Log::debug($response->getBody());
- $code = $response->getStatusCode();
- $body = json_decode($response->getBody());
- $success = $body->success;
- if($success) {
- $response = [
- "api_name" => $apiName,
- "url" => $url,
- "request_time" => $request_time,
- "json_input" => json_encode($jsonInput),
- "response_code" => $code,
- "response_output" => $response->getBody(),
- "success" => $success
- ];
- } else {
- $response = [
- "api_name" => $apiName,
- "url" => $url,
- "request_time" => $request_time,
- "json_input" => json_encode($jsonInput),
- "response_code" => $code,
- "error_message" => $body->error_message,
- "response_output" => $response->getBody(),
- "success" => $success
- ];
- }
- } catch (\Exception $ex) {
- Log::error(json_encode($ex->getMessage()));
- $response = [
- "api_name" => $apiName,
- "url" => $url,
- "request_time" => $request_time,
- "json_input" => json_encode($jsonInput),
- "response_code" => $ex->getCode(),
- "error_message" => $ex->getMessage(),
- "response_output" => $ex->getMessage(),
- "success" => false
- ];
- }
- Log::info("[END-PROCESS] PenyelesaianKunjunganSalesman ".DateUtil::dateTimeNow()." [END-PROCESS] ");
- return $response;
- }
- private function getEmployeeCode($employee_id) {
- $result = collect(\DB::Select(" SELECT f_get_partner_code($employee_id) AS employee_code; "))->first();
- return $result;
- }
- private function getCustomerList($employee_id, $admin_process_visit_plan_id, $start_date, $end_date) {
- $result = \DB::Select(" SELECT f_get_partner_code(customer_id) AS customer_code, check_in_longitude AS longitude_checkin,
- check_out_longitude AS longitude_checkout, check_in_latitude AS latitude_checkin, check_out_latitude AS latitude_checkout,
- salesman_visit_plan_id, salesman_visit_realization_id, customer_id
- FROM sl_salesman_visit_realization
- WHERE visit_date >= '$start_date' AND visit_date <= '$end_date' AND salesman_id = $employee_id; ");
- $customerInvoiceList = [];
- foreach($result AS $value) {
- $exchange = \DB::Select("
- SELECT A.doc_no, A.doc_date, A.register_id, B.invoice_ext_id AS invoice_id,
- C.invoice_amount, C.outstanding_amount, COALESCE(A.remark, '') AS remark
- FROM sl_invoice_exchange A
- INNER JOIN sl_invoice_balance_visit_plan_detail B ON A.invoice_exchange_id = B.ref_id AND B.flg_invoice = 'E'
- INNER JOIN sl_invoice_visit_plan C ON B.ref_invoice_id = C.invoice_visit_plan_id
- WHERE A.salesman_visit_plan_id = $value->salesman_visit_plan_id
- AND A.salesman_visit_realization_id = $value->salesman_visit_realization_id
- AND A.customer_id = $value->customer_id
- ");
- $invoicePaidList = \DB::Select("
- 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,
- B.invoice_amount, B.invoice_amount - B.nominal_bayar AS outstanding_amount, B.nominal_bayar
- FROM sl_invoice_balance_visit_plan_detail A
- INNER JOIN sl_invoice_visit_plan B ON A.ref_invoice_id = B.invoice_visit_plan_id
- WHERE A.salesman_visit_realization_id = $value->salesman_visit_realization_id
- AND A.customer_id = $value->customer_id
- AND A.flg_invoice = 'P'
- AND A.salesman_visit_plan_id = $value->salesman_visit_plan_id
- AND B.invoice_amount - B.nominal_bayar <= 0
- ");
- $invoiceUnPaidList = \DB::Select("
- SELECT distinct A.doc_no, A.doc_date, B.register_id, A.invoice_ext_id AS invoice_id,
- A.invoice_amount, A.invoice_amount - A.nominal_bayar AS outstanding_amount, A.nominal_bayar
- FROM sl_invoice_visit_plan A
- INNER JOIN sl_admin_process_visit_plan B ON A.admin_process_visit_plan_id = B.admin_process_visit_plan_id
- WHERE A.admin_process_visit_plan_id = $admin_process_visit_plan_id
- AND A.customer_id = $value->customer_id
- AND A.status = 'P'
- AND A.invoice_amount - A.nominal_bayar > 0
- ");
- // $unexchange = \DB::Select(" SELECT A.doc_no, A.doc_date, B.register_id, A.invoice_ext_id AS invoice_id,
- // A.invoice_amount, A.outstanding_amount
- // FROM sl_invoice_visit_plan A
- // INNER JOIN sl_admin_process_visit_plan B ON A.admin_process_visit_plan_id = B.admin_process_visit_plan_id
- // WHERE A.customer_id = $value->customer_id AND A.status = 'N' AND B.admin_process_visit_plan_id = $admin_process_visit_plan_id; ");
- $noncash = \DB::Select("
- SELECT distinct A.mode_payment, A.account_no, B.doc_no AS payment_doc_no, B.doc_date AS payment_doc_date,
- 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
- FROM sl_invoice_payment_item A
- INNER JOIN sl_invoice_payment B ON A.invoice_payment_id = B.invoice_payment_id
- INNER JOIN sl_invoice_balance_visit_plan_detail C ON B.invoice_payment_id = C.ref_id AND C.flg_invoice = 'P'
- WHERE B.salesman_visit_plan_id = $value->salesman_visit_plan_id
- AND B.customer_id = $value->customer_id
- AND B.salesman_visit_realization_id = $value->salesman_visit_realization_id
- AND A.type_payment = 'NONCASH'
- ; ");
- $cash = \DB::Select("
- SELECT distinct A.payment_amount, A.date_payment, COALESCE(A.remark, '') AS remark,
- B.doc_no AS payment_doc_no, B.doc_date AS payment_doc_date, A.invoice_payment_item_id::character varying AS no_payment
- FROM sl_invoice_payment_item A
- INNER JOIN sl_invoice_payment B ON A.invoice_payment_id = B.invoice_payment_id
- INNER JOIN sl_invoice_balance_visit_plan_detail C ON B.invoice_payment_id = C.ref_id AND C.flg_invoice = 'P'
- WHERE B.salesman_visit_plan_id = $value->salesman_visit_plan_id
- AND B.customer_id = $value->customer_id
- AND B.salesman_visit_realization_id = $value->salesman_visit_realization_id
- AND A.type_payment = 'CASH'
- ; ");
- $list = [
- "customer_code" => $value->customer_code,
- "longitude_checkin" => $value->longitude_checkin,
- "longitude_checkout" => $value->longitude_checkout,
- "latitude_checkin" => $value->latitude_checkin,
- "latitude_checkout" => $value->latitude_checkout,
- "invoice_exchange_list" => $exchange,
- "invoice_lunas_list" => $invoicePaidList,
- "invoice_belum_lunas_list" => $invoiceUnPaidList,
- // "invoice_unchanged_list"=> $unexchange,
- "non_cash_payment_list" => $noncash,
- "cash_payment_list" => $cash
- ];
- array_push($customerInvoiceList, $list);
- }
- return $customerInvoiceList;
- }
- protected function rules()
- {
- return [
- "user_id" => "required",
- "tenant_id" => "required",
- ];
- }
- }
Add Comment
Please, Sign In to add comment