Пример #1
0
 /**
  *
  * @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);
 }