/** * inspects delete action * * @param array $_ids * @return array of ids to actually delete */ protected function _inspectDelete(array $_ids) { $cc = Sales_Controller_Contract::getInstance(); $filter = new Sales_Model_ContractFilter(array()); $filter->addFilter(new Tinebase_Model_Filter_Text(array('field' => 'billing_address_id', 'operator' => 'in', 'value' => $_ids))); $contracts = $cc->search($filter); if ($contracts->count()) { $e = new Sales_Exception_DeleteUsedBillingAddress(); $e->setContracts($contracts); throw $e; } return $_ids; }
/** * creates the auto invoices, gets called by cli * * @param Tinebase_DateTime $currentDate * @param Sales_Model_Contract $contract * @param boolean $merge */ public function createAutoInvoices(Tinebase_DateTime $currentDate, Sales_Model_Contract $contract = NULL, $merge = false) { $this->_autoInvoiceIterationResults = array(); $this->_autoInvoiceIterationDetailResults = array(); $this->_autoInvoiceIterationFailures = array(); $contractBackend = new Sales_Backend_Contract(); $ids = $contract ? array($contract->getId()) : $contractBackend->getBillableContractIds($currentDate); $filter = new Sales_Model_ContractFilter(array()); $filter->addFilter(new Tinebase_Model_Filter_Text(array('field' => 'id', 'operator' => 'in', 'value' => $ids))); $iterator = new Tinebase_Record_Iterator(array('iteratable' => $this, 'controller' => Sales_Controller_Contract::getInstance(), 'filter' => $filter, 'options' => array('getRelations' => TRUE, 'limit' => $this->_autoInvoiceIterationLimit), 'function' => 'processAutoInvoiceIteration')); $iterator->iterate($currentDate, $merge); unset($this->_autoInvoiceIterationDetailResults); $result = array('failures' => $this->_autoInvoiceIterationFailures, 'failures_count' => count($this->_autoInvoiceIterationFailures), 'created' => $this->_autoInvoiceIterationResults, 'created_count' => count($this->_autoInvoiceIterationResults)); return $result; }
public function setLastAutobill() { if (!Sales_Config::getInstance()->featureEnabled(Sales_Config::FEATURE_INVOICES_MODULE)) { Tinebase_Core::getLogger()->crit(__METHOD__ . '::' . __LINE__ . ' setLastAutobill ran allthoug feature ' . Sales_Config::FEATURE_INVOICES_MODULE . ' is disabled'); return false; } $cc = Sales_Controller_Contract::getInstance(); $pc = Sales_Controller_ProductAggregate::getInstance(); $date = Tinebase_DateTime::now()->setTimezone(Tinebase_Core::getUserTimezone()); $date->setDate($date->format('Y'), 1, 1)->setTime(0, 0, 0); $date->setTimezone('UTC'); $filter = new Sales_Model_ContractFilter(array(array('field' => 'start_date', 'operator' => 'after_or_equals', 'value' => $date))); $filter->addFilter(new Tinebase_Model_Filter_Text(array('field' => 'end_date', 'operator' => 'isnull', 'value' => NULL))); $contracts = $cc->search($filter); foreach ($contracts as $contract) { $filter = new Sales_Model_ProductAggregateFilter(array()); $filter->addFilter(new Tinebase_Model_Filter_Text(array('field' => 'contract_id', 'operator' => 'equals', 'value' => $contract->getId()))); echo 'Updating last_autobill of ' . $contract->title . PHP_EOL; $contract->last_autobill = clone $contract->start_date; $contract->last_autobill->subMonth($contract->interval); foreach ($pc->search($filter) as $pagg) { echo 'Updating last_autobill of product assigned to ' . $contract->title . PHP_EOL; $pagg->last_autobill = clone $contract->start_date; $pagg->last_autobill->subMonth($pagg->interval); $pc->update($pagg); } $cc->update($contract); } }
/** * update from 5.4 -> 5.5 * - set cleared to text * - change default values for cleared, status * * @return void */ public function update_4() { $declaration = new Setup_Backend_Schema_Field_Xml(' <field> <name>cleared</name> <type>text</type> <length>64</length> <default>not yet cleared</default> </field>'); $this->_backend->alterCol('sales_contracts', $declaration); $declaration = new Setup_Backend_Schema_Field_Xml(' <field> <name>status</name> <type>text</type> <length>64</length> <default>open</default> </field>'); $this->_backend->alterCol('sales_contracts', $declaration); $this->setTableVersion('sales_contracts', 4); // transfer cleared value $be = new Sales_Backend_Contract(); $filter = new Sales_Model_ContractFilter(array(), 'AND'); $filter->addFilter(new Tinebase_Model_Filter_Text('cleared', 'equals', '0')); $results = $be->search($filter, null, false, true); $be->updateMultiple($results, array('cleared' => 'NOTCLEARED')); $filter = new Sales_Model_ContractFilter(array(), 'AND'); $filter->addFilter(new Tinebase_Model_Filter_Text('cleared', 'equals', '1')); $results = $be->search($filter, null, false, true); $be->updateMultiple($results, array('cleared' => 'CLEARED')); // keyfieldconfigs $cb = new Tinebase_Backend_Sql(array('modelName' => 'Tinebase_Model_Config', 'tableName' => 'config')); $appId = Tinebase_Application::getInstance()->getApplicationByName('Sales')->getId(); $salesStatusConfig = array('name' => Sales_Config::CONTRACT_STATUS, 'records' => array(array('id' => 'OPEN', 'value' => 'open', 'icon' => 'images/oxygen/16x16/places/folder-green.png', 'system' => true), array('id' => 'CLOSED', 'value' => 'closed', 'icon' => 'images/oxygen/16x16/places/folder-red.png', 'system' => true))); $cb->create(new Tinebase_Model_Config(array('application_id' => $appId, 'name' => Sales_Config::CONTRACT_STATUS, 'value' => json_encode($salesStatusConfig)))); $salesClearedConfig = array('name' => Sales_Config::CONTRACT_CLEARED, 'records' => array(array('id' => 'TOCLEAR', 'value' => 'to clear', 'icon' => 'images/oxygen/16x16/actions/dialog-warning.png', 'system' => true), array('id' => 'NOTCLEARED', 'value' => 'not yet cleared', 'icon' => 'images/oxygen/16x16/actions/edit-delete.png', 'system' => true), array('id' => 'CLEARED', 'value' => 'cleared', 'icon' => 'images/oxygen/16x16/actions/dialog-ok-apply.png', 'system' => true))); $cb->create(new Tinebase_Model_Config(array('application_id' => $appId, 'name' => Sales_Config::CONTRACT_CLEARED, 'value' => json_encode($salesClearedConfig)))); $this->setApplicationVersion('Sales', '5.5'); }
public function setLastAutobill() { $cc = Sales_Controller_Contract::getInstance(); $pc = Sales_Controller_ProductAggregate::getInstance(); $date = Tinebase_DateTime::now()->setTimezone(Tinebase_Core::getUserTimezone()); $date->setDate($date->format('Y'), 1, 1)->setTime(0, 0, 0); $date->setTimezone('UTC'); $filter = new Sales_Model_ContractFilter(array(array('field' => 'start_date', 'operator' => 'after_or_equals', 'value' => $date))); $filter->addFilter(new Tinebase_Model_Filter_Text(array('field' => 'end_date', 'operator' => 'isnull', 'value' => NULL))); $contracts = $cc->search($filter); foreach ($contracts as $contract) { $filter = new Sales_Model_ProductAggregateFilter(array()); $filter->addFilter(new Tinebase_Model_Filter_Text(array('field' => 'contract_id', 'operator' => 'equals', 'value' => $contract->getId()))); echo 'Updating last_autobill of ' . $contract->title . PHP_EOL; $contract->last_autobill = clone $contract->start_date; $contract->last_autobill->subMonth($contract->interval); foreach ($pc->search($filter) as $pagg) { echo 'Updating last_autobill of product assigned to ' . $contract->title . PHP_EOL; $pagg->last_autobill = clone $contract->start_date; $pagg->last_autobill->subMonth($pagg->interval); $pc->update($pagg); } $cc->update($contract); } }