예제 #1
0
 static function yearEnd($period, &$errors)
 {
     assetHandling::yearEnd($errors);
     $period_ids = $period->getIdsYTD($period->period, $period->year);
     $startperiod = $period->getNewStartPeriod($errors);
     $result = $startperiod;
     $glbalance = DataObjectFactory::Factory('GLBalance');
     $newbalances = array();
     $balances = new GLBalanceCollection($glbalance);
     $balances->getYearEndBalances($period_ids, 'P');
     $glparam = DataObjectFactory::Factory('GLParams');
     $placcount_id = $glparam->retained_profits_account();
     $plcentre_id = $glparam->balance_sheet_cost_centre();
     $plbalance = 0;
     foreach ($balances as $balance) {
         if (count($errors) > 0) {
             $result = false;
             break;
         }
         $plbalance = $balance->value;
     }
     $balances = new GLBalanceCollection($glbalance);
     $balances->getYearEndBalances($period_ids, 'B');
     foreach ($balances as $balance) {
         if (count($errors) > 0) {
             $result = false;
             break;
         }
         $data['glperiods_id'] = $startperiod->id;
         $data['glaccount_id'] = $balance->glaccount_id;
         $data['glcentre_id'] = $balance->glcentre_id;
         $data['value'] = $balance->value;
         if ($balance->glaccount_id == $placcount_id && $balance->glcentre_id == $plcentre_id) {
             $data['value'] += $plbalance;
             $plbalance = 0;
         }
         $newbalances[] = DataObject::Factory($data, $errors, $balance);
     }
     if ($result && count($newbalances) > 0) {
         foreach ($newbalances as $balance) {
             if ($result) {
                 $result = $balance->save();
             }
         }
     }
     if ($plbalance != 0) {
         $data['glperiods_id'] = $startperiod->id;
         $data['glaccount_id'] = $placcount_id;
         $data['glcentre_id'] = $plcentre_id;
         $data['value'] = $plbalance;
         $balance = DataObject::Factory($data, $errors, 'GLBalance');
         if ($balance) {
             if (!$balance->save()) {
                 $errors[] = 'Failed to create P+L balance';
             }
         }
     }
 }