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'; } } } }