/** * * @param Application\Model\OrgModelAbstract $org * @return Application\Model\OrgModelAbstract */ public function update(ModelAbstract $org) { if ($org instanceof OrgCustomerModel) { // Check if exists before update $checkOrg = $this->load($org->getId()); if (NULL === $checkOrg) { throw new \Application\Exceptions\NotFoundException("Organization not exists"); } // Default + Other billing accounts $billings = $org->getAllBillingAccounts(); // Capture billing cycle info foreach ($billings as $billing) { if ($billing->billingAccountId !== null) { // Needs modification? $oldBilling = $checkOrg->getBillingAccount($billing->billingAccountId); if (!$oldBilling) { throw new \Application\Exceptions\NotFoundException("Billing account {$billing->billingAccountId} not exists"); } $oldBillingDay = $oldBilling->billingCycleStartDay === null || $oldBilling->billingCycleStartDay === $org->billingCycleStart->dayOfMonth ? 0 : $oldBilling->billingCycleStartDay; if (isset($billing->billingCycleStartDay) && $billing->billingCycleStartDay !== $oldBillingDay) { // Send async request $transacionId = $this->changeBillingCycleStartDay($org->getId(), $billing->billingAccountId, $billing->billingCycleStartDay ?: null); // Log action (ignoring async response) \App::audit("Updating customer {$org->getId()} billing account {$billing->billingAccountId} " . "cycle start day from {$billing->billingCycleNextStartDay} to " . "{$billing->billingCycleStartDay}: async transaction {$transacionId}", $org); } else { \App::log()->info("Customer {$org->getId()} billing account {$billing->billingAccountId} " . "cycle start day not modified"); } // Unset update info unset($billing->billingCycleStartDay); } else { if (!$billing->billingCycleStartDay) { unset($billing->billingCycleStartDay); } } // Unset read info unset($billing->billingCycleNextStartDay); unset($billing->billingCycleModifiable); } if ($org->billingCycleStart->dayOfMonth !== $checkOrg->billingCycleStart->dayOfMonth) { $transacionId = $this->changeBillingCycleStartDay($org->getId(), null, $org->billingCycleStart->dayOfMonth); \App::log()->info("Updating customer {$org->getId()} default cycle start day from " . "{$checkOrg->billingCycleStart->dayOfMonth} to {$org->billingCycleStart->dayOfMonth}: " . "async transaction {$transacionId}"); } } return parent::update($org); }