diff --git a/Jobs/SyncDwh.php b/Jobs/SyncDwh.php new file mode 100644 index 0000000..bd45b72 --- /dev/null +++ b/Jobs/SyncDwh.php @@ -0,0 +1,233 @@ +syncCurrency(); + $this->syncBranch(); + $this->syncLoanType(); + $this->syncDebitur(); + $this->syncAccountLoan(); + $this->syncAccount(); + Log::info('SyncDwh: Finish'); + } + + function syncCurrency() + { + Log::info('SyncDwh: syncCurrency'); + try { + $currency = DB::connection('oracle')->table('T_CURRENCY')->get(); + foreach ($currency as $c) { + Currency::updateOrCreate(['kode' => $c->currency_code], [ + 'name' => $c->currency_name, + 'updated_at' => now(), + ]); + } + Log::info('SyncDwh: syncCurrency: success'); + } catch (Exception $e) { + Log::error('SyncDwh: syncCurrency: ' . $e->getMessage()); + } + + } + + function syncBranch() + { + Log::info('SyncDwh: syncBranch'); + try { + $branch = DB::connection('oracle')->table('T_BRANCH')->get(); + foreach ($branch as $b) { + Branch::updateOrCreate(['kode' => $b->branch_code], [ + 'name' => $b->branch_name, + 'status' => '1', + 'updated_at' => now(), + ]); + } + Log::info('SyncDwh: syncBranch: success'); + } catch (Exception $e) { + Log::error('SyncDwh: syncBranch: ' . $e->getMessage()); + } + } + + function syncLoanType() + { + Log::info('SyncDwh: syncLoanType'); + try { + $loanType = DB::connection('oracle')->table('t_product')->get(); + foreach ($loanType as $lt) { + LoanType::updateOrCreate(['kode' => $lt->product_code], [ + 'name' => $lt->product_description, + 'status' => '1', + 'updated_at' => now(), + ]); + } + Log::info('SyncDwh: syncLoanType: success'); + } catch (Exception $e) { + Log::error('SyncDwh: syncLoanType: ' . $e->getMessage()); + } + } + + function syncDebitur() + { + Log::info('SyncDwh: syncDebitur'); + + try { + $loantype = LoanType::select('kode')->get(); + $debitur = Debitur::select('kode')->get(); + + $customer = DB::connection('oracle') + ->table('BAG_CUSTOMER t') + ->select('t.customer_code', 't.customer_name', 't.branch_code', 't.npwp_number', 't.customer_date', 't.contact_number', 't.customer_address_1', 't.customer_address_2', 't.customer_address_3', 't.customer_address_4', 't.customer_address_5', 't.customer_address_6', 't.cust_address_rt', 't.cust_address_rw', 't.cust_address_town', 't.cust_address_city') + ->addSelect(DB::connection('oracle') + ->raw('(SELECT MIN(a.opening_date) FROM t_account a WHERE a.customer_code = t.customer_code) as open_date')) + ->whereExists(function ($query) use ($loantype) { + $query->select(DB::connection('oracle')->raw(1)) + ->from('T_ACCOUNT a') + ->whereColumn('t.customer_code', 'a.customer_code') + ->whereIn('a.product_code', $loantype->map(function ($item) { + return $item->kode; + })->toArray()); + }) + ->whereNotIn('t.customer_code', $debitur->map(function ($item) { + return $item->kode; + })->toArray()) + ->get(); + + foreach ($customer as $row) { + Debitur::updateOrCreate([ + 'kode' => $row->customer_code + ], [ + 'name' => $row->customer_name, + 'branch_id' => Branch::where('kode', $row->branch_code)->first()->id ?? null, + 'npwp' => $row->npwp_number, + 'registered_at' => $row->customer_date, + 'contact_number' => $row->contact_number, + 'address' => $row->customer_address_1 . ' ' . $row->customer_address_2 . ' ' . $row->customer_address_3 . ' ' . $row->customer_address_4 . ' ' . $row->customer_address_5 . ' ' . $row->customer_address_6 . ' rt ' . $row->cust_address_rt . ' rw ' . $row->cust_address_rw . ' town ' . $row->cust_address_town . ' city ' . $row->cust_address_city, + 'status' => '1', + 'updated_at' => now(), + ]); + } + Log::info('SyncDwh: syncDebitur: success'); + } catch (Exception $e) { + Log::error('SyncDwh: syncDebitur: ' . $e->getMessage()); + } + } + + function syncAccountLoan() + { + Log::info('SyncDwh: syncAccountLoan'); + + try { + $loantype = LoanType::select('kode')->get(); + $rekening = Rekening::select('nomor_rekening')->get(); + + $account_loan = DB::connection('oracle') + ->table('T_ACCOUNT t') + ->select('t.account_number', 't.customer_code', 't.branch_code', 't.product_code', 't.currency_code', 't.opening_date', 't.record_status', 't.limit_ref', 't.clear_balance', 'p.product_description') + ->join('T_PRODUCT p', 'p.product_code', '=', 't.product_code') + ->whereIn('t.product_code', $loantype->map(function ($item) { + return $item->kode; + })->toArray()) + ->whereNotIn('t.account_number', $rekening->map(function ($item) { + return $item->nomor_rekening; + })->toArray()) + ->limit(10) + ->get(); + + foreach ($account_loan as $row) { + Rekening::updateOrCreate([ + 'nomor_rekening' => $row->account_number + ], [ + 'debitur_id' => Debitur::where('kode', $row->customer_code)->first()->id ?? null, + 'branch_id' => Branch::where('kode', $row->branch_code)->first()->id ?? null, + 'loan_type_id' => LoanType::where('kode', $row->product_code)->first()->id ?? null, + 'currency_id' => Currency::where('kode', $row->currency_code)->first()->id ?? null, + 'registered_at' => $row->opening_date, + 'status_rekening' => $row->record_status, + 'limit_ref' => $row->limit_ref, + 'status' => '1', + 'updated_at' => now(), + ]); + } + Log::info('SyncDwh: syncAccountLoan: success'); + } catch (Exception $e) { + Log::error('SyncDwh: syncAccountLoan: ' . $e->getMessage()); + } + } + + function syncAccount() + { + Log::info('SyncDwh: syncAccount'); + try { + $rekening = Rekening::select('nomor_rekening')->get(); + + $account = DB::connection('oracle') + ->table('T_ACCOUNT t') + ->select('t.account_number', 't.customer_code', 't.branch_code', 't.product_code', 't.currency_code', 't.opening_date', 't.record_status', 't.limit_ref', 't.clear_balance', 'p.product_description') + ->join('T_PRODUCT p', 'p.product_code', '=', 't.product_code') + ->whereBetween('t.product_code', ['6000', '6200']) + ->whereNotIn('t.account_number', $rekening->map(function ($item) { + return $item->nomor_rekening; + })->toArray()) + ->whereExists(function ($query) { + $query->select(DB::connection('oracle')->raw(1)) // Select a constant value (1) + ->from('T_ACCOUNT l') + ->whereColumn('l.customer_code', 't.customer_code') + ->whereBetween('l.product_code', ['3000', '3999']); + }) + ->limit(10) + ->get(); + + foreach ($account as $a) { + Rekening::updateOrCreate(['nomor_rekening' => $a->account_number], [ + 'debitur_id' => Debitur::where('kode', $a->customer_code)->first()->id ?? null, + 'branch_id' => Branch::where('kode', $a->branch_code)->first()->id ?? null, + 'loan_type_id' => LoanType::where('kode', $a->product_code)->first()->id ?? null, + 'currency_id' => Currency::where('kode', $a->currency_code)->first()->id ?? null, + 'registered_at' => $a->opening_date, + 'status_rekening' => $a->record_status, + 'limit_ref' => $a->limit_ref, + 'status' => '1', + 'updated_at' => now(), + ]); + } + Log::info('SyncDwh: syncAccount: success'); + } catch (Exception $e) { + Log::error('SyncDwh: syncAccount: ' . $e->getMessage()); + } + } + }