diff --git a/app/Jobs/BiayaKartu.php b/app/Jobs/BiayaKartu.php index 21fe2c1..23ba78d 100644 --- a/app/Jobs/BiayaKartu.php +++ b/app/Jobs/BiayaKartu.php @@ -96,14 +96,80 @@ { foreach ($cards as $card) { try { - $accountInfo = $this->getAccountInfo($card->accflag); - $this->updateOrCreateAtmCard($card, $accountInfo); + $existingCard = $this->getExistingCard($card->crdno); + + // Perbarui data kartu dasar + $cardData = $this->getCardBaseData($card); + + // Periksa jika perlu memperbarui branch dan currency + if ($this->needBranchAndCurrencyUpdate($existingCard)) { + $accountInfo = $this->getAccountInfo($card->accflag); + $this->updateBranchAndCurrency($card->crdno, $accountInfo); + } else { + Atmcard::updateOrCreate(['crdno' => $card->crdno], $cardData); + } } catch (Exception $e) { Log::warning("Gagal memproses kartu {$card->crdno}: " . $e->getMessage()); } } } + /** + * Get existing card from database if exists + * + * @param string $cardNumber + * + * @return Atmcard|null + */ + private function getExistingCard(string $cardNumber) + : ?Atmcard + { + return Atmcard::where('crdno', $cardNumber)->first(); + } + + /** + * Get base data for card update + * + * @param object $card + * + * @return array + */ + private function getCardBaseData(object $card) + : array + { + return [ + 'accflag' => $card->accflag, + 'cracc1' => $card->cracc1, + 'cracc2' => $card->cracc2, + 'cracc3' => $card->cracc3, + 'cracc4' => $card->cracc4, + 'cracc5' => $card->cracc5, + 'craccnam1' => $card->craccnam1, + 'craccnam2' => $card->craccnam2, + 'craccnam3' => $card->craccnam3, + 'craccnam4' => $card->craccnam4, + 'craccnam5' => $card->craccnam5, + 'crsts' => $card->crsts, + 'cttype' => $card->cttype, + 'ctdesc' => $card->ctdesc, + 'last_update' => $card->lastupdate, + ]; + } + + /** + * Check if branch and currency update is needed + * + * @param Atmcard|null $card + * + * @return bool + */ + private function needBranchAndCurrencyUpdate(?Atmcard $card) + : bool + { + // Jika kartu belum ada atau branch/currency belum terisi + return $card === null || empty($card->branch) || empty($card->currency); + } + /** * Get account information from the API * @@ -126,38 +192,23 @@ } /** - * Update or create ATM card record + * Update branch and currency information for a card * - * @param object $card + * @param string $cardNumber * @param array $accountInfo * * @return void */ - private function updateOrCreateAtmCard(object $card, array $accountInfo) + private function updateBranchAndCurrency(string $cardNumber, array $accountInfo) : void { - Atmcard::updateOrCreate( - ['crdno' => $card->crdno], - [ - 'accflag' => $card->accflag, - 'cracc1' => $card->cracc1, - 'cracc2' => $card->cracc2, - 'cracc3' => $card->cracc3, - 'cracc4' => $card->cracc4, - 'cracc5' => $card->cracc5, - 'craccnam1' => $card->craccnam1, - 'craccnam2' => $card->craccnam2, - 'craccnam3' => $card->craccnam3, - 'craccnam4' => $card->craccnam4, - 'craccnam5' => $card->craccnam5, - 'crsts' => $card->crsts, - 'cttype' => $card->cttype, - 'ctdesc' => $card->ctdesc, - 'last_update' => $card->lastupdate, - 'crdate' => $card->crdate, - 'branch' => $accountInfo['acctCompany'], - 'currency' => $accountInfo['acctCurrency'], - ] - ); + $cardData = [ + 'branch' => $accountInfo['acctCompany'], + 'currency' => $accountInfo['acctCurrency'], + ]; + + Atmcard::where('crdno', $cardNumber)->update($cardData); + + Log::info("Berhasil memperbarui branch dan currency untuk kartu {$cardNumber}"); } }