Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- namespace Sts\CmsActivity\BO;
- use App\Jobs\TukarTagihanSalesman;
- use DB;
- use GuzzleHttp\Client;
- use GuzzleHttp\Exception\RequestException;
- use Illuminate\Support\Carbon;
- use Log;
- use PDO;
- use Sts\CmsActivity\Model\InvoiceBalanceVisitPlanDetail;
- use Sts\CmsActivity\Model\SlInvoiceExchange;
- use Sts\CmsActivity\Model\SlInvoiceVisitPlan;
- use Sts\CmsCommon\Helpers\LogApiHelper;
- use Sts\PleafCore\BusinessTransaction;
- use Sts\PleafCore\CoreException;
- use Sts\PleafCore\DateUtil;
- use Sts\PleafCore\DefaultBusinessTransaction;
- /**
- * @author Bahar, 24/10/2019
- * @in
- *
- * @out
- */
- class InvoiceExchangeCustomer extends DefaultBusinessTransaction implements BusinessTransaction
- {
- public function getDescription()
- {
- return "Add invoice exchange and Update data invoice";
- }
- public function prepare($dto, $originalDto)
- {
- $invoice_dto = $dto["invoice_item"];
- $isInvoiceExchange = \App::make("isInvoiceExchange");
- $doc_no = self::generateDocNo();
- $input_isInvoiceExchange = [
- "tenant_id" => $dto["tenant_id"],
- "doc_no" => $doc_no,
- "doc_date" => $dto["visit_date"]
- ];
- $isInvoiceExchange_result = $isInvoiceExchange->execute($input_isInvoiceExchange);
- if($isInvoiceExchange_result["exists"]) {
- $this->errorBusinessValidation(["error_item" => "Anda telah melakukan tukar tagihan pada tanggal ".Carbon::parse($dto["visit_date"])->format('d-m-Y')]);
- }
- foreach($invoice_dto as $value_dto) {
- $findSlInvoiceVisitPlanById = \App::make("findInvoiceVisitPlanById");
- $input_findSlInvoiceVisitPlanById = [
- "invoice_visit_plan_id" => $value_dto["invoice_visit_plan_id"],
- ];
- $findSlInvoiceVisitPlanById_result = $findSlInvoiceVisitPlanById->execute($input_findSlInvoiceVisitPlanById);
- if($findSlInvoiceVisitPlanById_result->status == 'E') {
- $this->errorBusinessValidation("invoice dengan nomor dokumen ".$findSlInvoiceVisitPlanById_result->doc_no." sudah di tukarkan");
- }
- }
- $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["visit_date"]
- ];
- $findAdminProcessVisitPlain_result = $findAdminProcessVisitPlain->execute($input_findAdminProcessVisitPlain);
- if($findAdminProcessVisitPlain_result->status_visit != "I") {
- $this->errorBusinessValidation("Status Visit belum in progress");
- }
- $findPlanSalesmanVisitPlanById = \App::make("findPlanSalesmanVisitPlanById");
- $input_findPlanSalesmanVisitPlanById = [
- "salesman_visit_plan_id" => $dto["salesman_visit_plan_id"],
- ];
- $findPlanSalesmanVisitPlanById_result = $findPlanSalesmanVisitPlanById->execute($input_findPlanSalesmanVisitPlanById);
- $dto["admin_process_visit_plan_id"] = $findAdminProcessVisitPlain_result->admin_process_visit_plan_id;
- $dto["register_id"] = $findAdminProcessVisitPlain_result->register_id;
- $dto["customer_id"] = $findPlanSalesmanVisitPlanById_result->customer_id;
- $dto["employee_id"] = $findPartnerByUserId_result->partner_id;
- $dto["doc_no"] = $doc_no;
- return $dto;
- }
- public function process($dto, $originalDto)
- {
- Log::debug('Process BT InvoiceExchangeCustomer');
- $user_id = $dto["user_id"];
- $datetime = DateUtil::dateTimeNow();
- $invoice_item = $dto["invoice_item"];
- $slInvoiceExchange = new SlInvoiceExchange();
- $slInvoiceExchange->tenant_id = $dto["tenant_id"];
- $slInvoiceExchange->admin_process_visit_plan_id = $dto["admin_process_visit_plan_id"];
- $slInvoiceExchange->register_id = $dto["register_id"];
- $slInvoiceExchange->customer_id = $dto["customer_id"];
- $slInvoiceExchange->employee_id = $dto["employee_id"];
- $slInvoiceExchange->salesman_visit_plan_id = $dto["salesman_visit_plan_id"];
- $slInvoiceExchange->salesman_visit_realization_id = $dto["salesman_visit_realization_id"];
- $slInvoiceExchange->doc_no = $dto["doc_no"];
- $slInvoiceExchange->doc_date = $dto["visit_date"];
- $slInvoiceExchange->curr_code = "IDR";
- $slInvoiceExchange->ext_doc_no = $dto["ext_doc_no"];
- $slInvoiceExchange->ext_doc_date = $dto["ext_doc_date"];
- $slInvoiceExchange->due_date = $dto["due_date"];
- $slInvoiceExchange->remark = $dto["remark"];
- $slInvoiceExchange->status_doc = "R";
- self::auditInsert($slInvoiceExchange, $user_id, $datetime);
- $slInvoiceExchange->save();
- foreach($invoice_item as $item) {
- $slInvoiceVisitPlan = SlInvoiceVisitPlan::find($item["invoice_visit_plan_id"]);
- // $slInvoiceVisitPlan->ref_id = $slInvoiceExchange->invoice_exchange_id;
- $slInvoiceVisitPlan->status = "E";
- self::auditUpdate($slInvoiceVisitPlan, $user_id, $datetime);
- $slInvoiceVisitPlan->save();
- $invoiceBalanceVisitPlanDetail = new InvoiceBalanceVisitPlanDetail();
- $invoiceBalanceVisitPlanDetail->tenant_id = $dto["tenant_id"];
- $invoiceBalanceVisitPlanDetail->admin_process_visit_plan_id = $dto["admin_process_visit_plan_id"];
- $invoiceBalanceVisitPlanDetail->register_id = $dto["register_id"];
- $invoiceBalanceVisitPlanDetail->salesman_visit_plan_id = $dto["salesman_visit_plan_id"];
- $invoiceBalanceVisitPlanDetail->salesman_visit_realization_id = $dto["salesman_visit_realization_id"];
- $invoiceBalanceVisitPlanDetail->customer_id = $dto["customer_id"];
- $invoiceBalanceVisitPlanDetail->employee_id = $dto["employee_id"];
- $invoiceBalanceVisitPlanDetail->ref_id = $slInvoiceExchange->invoice_exchange_id;
- $invoiceBalanceVisitPlanDetail->ref_invoice_id = $slInvoiceVisitPlan->invoice_visit_plan_id;
- $invoiceBalanceVisitPlanDetail->invoice_ext_id = $slInvoiceVisitPlan->invoice_ext_id;
- $invoiceBalanceVisitPlanDetail->doc_no = $slInvoiceExchange->doc_no;
- $invoiceBalanceVisitPlanDetail->doc_date = $slInvoiceExchange->doc_date;
- $invoiceBalanceVisitPlanDetail->invoice_doc_no = $slInvoiceVisitPlan->doc_no;
- $invoiceBalanceVisitPlanDetail->invoice_doc_date = $slInvoiceVisitPlan->doc_date;
- $invoiceBalanceVisitPlanDetail->flg_invoice = "E";
- self::auditInsert($invoiceBalanceVisitPlanDetail, $user_id, $datetime);
- $invoiceBalanceVisitPlanDetail->save();
- }
- $input_jobs = [
- "invoice_exchange_id" => $slInvoiceExchange->invoice_exchange_id,
- "employee_id" => $dto["employee_id"],
- "visit_date" => $dto["visit_date"],
- "datetime" => $datetime,
- ];
- $outputCallApiExternal = $this->createCallApiExternal($input_jobs);
- if(!$outputCallApiExternal["success"]) {
- throw new CoreException("ERROR_CALL_API_EXTERNAL", [], $outputCallApiExternal);
- }
- $outputCallApiExternal["result"] = $slInvoiceExchange;
- return $outputCallApiExternal;
- }
- private function generateDocNo(){
- $datetime = new \DateTime();
- $docPeriod = $datetime->format('ym');
- $prefix = "TT";
- $datatype = _DATATYPE_TUKAR_TAGIHAN;
- $pdo = DB::getPdo();
- $stmt = $pdo->prepare("SELECT f_gen_autonum(?,?)");
- $prefix = $prefix."/".$docPeriod."/";
- $stmt->bindValue(1, $prefix, PDO::PARAM_STR);
- $stmt->bindValue(2, $datatype, PDO::PARAM_STR);
- $stmt->execute();
- $returnFunc = $stmt->fetch(PDO::FETCH_ASSOC);
- $stmt->closeCursor();
- $autonum = $returnFunc['f_gen_autonum'];
- return $autonum;
- }
- private function createCallApiExternal($data) {
- Log::info("[PROCESS] TukarTagihanCustomer ".DateUtil::dateTimeNow()." [PROCESS] ");
- $invoice_exchange = self::getInvoiceExchange($data["invoice_exchange_id"]);
- $invoice_list = self::getInvoice($data["invoice_exchange_id"]);
- $employee_code = self::getEmployeeCode($data["employee_id"]);
- $jsonInput = [
- "apikey" => getenv("WISER_API_KEY"),
- "employee_code" => $employee_code[0]->partner_code,
- "datetime" => $data["datetime"],
- "username" => $employee_code[0]->partner_code,
- "customer_code" => $invoice_exchange[0]->customer_code,
- "visit_date" => $data["visit_date"],
- "register_id" => $invoice_exchange[0]->register_id,
- "doc_no" => $invoice_exchange[0]->doc_no,
- "doc_date" => $invoice_exchange[0]->doc_date,
- "remark" => $invoice_exchange[0]->remark,
- "invoice_list" => $invoice_list
- ];
- $baseUrl = getenv("WISER_API_URL");
- $url = $baseUrl."visit/tukartagihantoko";
- $apiName = "Tukar Tagihan Toko";
- $request_time = time();
- 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] TukarTagihanCustomer ".DateUtil::dateTimeNow()." [END-PROCESS] ");
- return $response;
- }
- private function getInvoiceExchange($invoice_exchange_id) {
- $result = \DB::Select(" SELECT f_get_partner_code(customer_id) AS customer_code, register_id,
- doc_no, doc_date, due_date, remark
- FROM sl_invoice_exchange
- WHERE invoice_exchange_id = $invoice_exchange_id; ");
- return $result;
- }
- private function getInvoice($invoice_exchange_id) {
- $result = \DB::Select("
- SELECT f_get_partner_code(A.customer_id) AS customer_code, A.register_id,
- B.invoice_doc_no AS doc_no, B.invoice_doc_date AS doc_date, invoice_ext_id AS invoice_id
- 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'
- WHERE A.invoice_exchange_id = $invoice_exchange_id;
- ");
- return $result;
- }
- private function getEmployeeCode($employee_id) {
- $result = \DB::Select(" SELECT partner_code FROM m_partner
- WHERE partner_id = $employee_id; ");
- return $result;
- }
- }
Add Comment
Please, Sign In to add comment