Example #1
0
 /**
  * Calculates the prices of deliverables
  *
  * and adds them up to the salesproject value
  */
 function calculate_price()
 {
     $value = 0;
     $cost = 0;
     $deliverable_qb = org_openpsa_sales_salesproject_deliverable_dba::new_query_builder();
     $deliverable_qb->add_constraint('salesproject', '=', $this->id);
     $deliverable_qb->add_constraint('up', '=', 0);
     $deliverable_qb->add_constraint('state', '<>', org_openpsa_sales_salesproject_deliverable_dba::STATUS_DECLINED);
     $deliverables = $deliverable_qb->execute();
     foreach ($deliverables as $deliverable) {
         if ($deliverable->orgOpenpsaObtype == org_openpsa_products_product_dba::DELIVERY_SUBSCRIPTION) {
             $scheduler = new org_openpsa_invoices_scheduler($deliverable);
             if ($deliverable->end == 0) {
                 // FIXME: Get this from config key 'subscription_profit_months'
                 $cycles = $scheduler->calculate_cycles(12);
             } else {
                 $cycles = $scheduler->calculate_cycles();
             }
             $value = $value + $deliverable->price * $cycles;
             $cost = $cost + $deliverable->cost * $cycles;
         } else {
             $value = $value + $deliverable->price;
             $cost = $cost + $deliverable->cost;
         }
     }
     $profit = $value - $cost;
     if ($this->value != $value || $this->profit != $profit) {
         $this->value = $value;
         $this->profit = $value - $cost;
         $this->update();
     }
 }
Example #2
0
 public function testHandler_add_create_subscription()
 {
     midcom::get('auth')->request_sudo('org.openpsa.sales');
     $this->_product->delivery = org_openpsa_products_product_dba::DELIVERY_SUBSCRIPTION;
     $this->_product->update();
     $formdata = array('title' => 'TEST ' . __CLASS__ . '_' . time(), 'continuous' => true, 'start_date' => strftime('%Y-%m-%d'));
     $url = $this->submit_dm2_form('controller', $formdata, 'org.openpsa.sales', array('deliverable', 'add', $this->_salesproject->guid));
     $this->assertEquals('salesproject/' . $this->_salesproject->guid . '/', $url);
     $qb = org_openpsa_sales_salesproject_deliverable_dba::new_query_builder();
     $qb->add_constraint('salesproject', '=', $this->_salesproject->id);
     $results = $qb->execute();
     $this->assertEquals(1, sizeof($results));
     $deliverable = $results[0];
     $this->register_object($deliverable);
     $this->assertEquals(org_openpsa_products_product_dba::DELIVERY_SUBSCRIPTION, $deliverable->orgOpenpsaObtype);
     midcom::get('auth')->drop_sudo();
 }
Example #3
0
 /**
  * Helper that lists all deliverables belonging to the current project
  */
 private function _list_deliverables()
 {
     $qb = org_openpsa_sales_salesproject_deliverable_dba::new_query_builder();
     $qb->add_constraint('salesproject', '=', $this->_salesproject->id);
     $qb->add_constraint('up', '=', 0);
     if ($this->_salesproject->status != org_openpsa_sales_salesproject_dba::STATUS_LOST) {
         $qb->add_constraint('state', '<>', org_openpsa_sales_salesproject_deliverable_dba::STATUS_DECLINED);
     }
     $qb->add_order('state');
     $qb->add_order('metadata.created', 'DESC');
     $deliverables = $qb->execute();
     foreach ($deliverables as $deliverable) {
         $this->_controllers[$deliverable->id] = midcom_helper_datamanager2_controller::create('ajax');
         $this->_controllers[$deliverable->id]->schemadb =& $this->_request_data['schemadb_salesproject_deliverable'];
         $this->_controllers[$deliverable->id]->set_storage($deliverable);
         $this->_controllers[$deliverable->id]->process_ajax();
         $this->_request_data['deliverables_objects'][$deliverable->guid] = $deliverable;
     }
 }
Example #4
0
                echo "Could not identify invoice item for task " . $task->get_label() . " on invoice " . $invoice->get_label() . ", creating empty item\n";
                flush();
                $item = new org_openpsa_invoices_invoice_item_dba();
                $item->invoice = $invoice->id;
                $item->task = $task->id;
                $item->deliverable = $task->agreement;
                $item->pricePerUnit = 0;
                $item->units = 1;
                $item->description = $task->title . ' (auto-generated)';
                $item->create();
            }
        }
        $relatedto->delete();
    }
}
$deliverable_qb = org_openpsa_sales_salesproject_deliverable_dba::new_query_builder();
$deliverables = $deliverable_qb->execute();
foreach ($deliverables as $deliverable) {
    $relatedto_qb = org_openpsa_relatedto_dba::new_query_builder();
    $relatedto_qb->add_constraint('toGuid', '=', $deliverable->guid);
    $relatedto_qb->add_constraint('fromClass', '=', 'org_openpsa_invoices_invoice_dba');
    $relatedtos = $relatedto_qb->execute();
    if (sizeof($relatedtos) == 0) {
        echo "Deliverable " . $deliverable->title . " has no invoice relatedtos, skipping\n";
        flush();
    }
    foreach ($relatedtos as $relatedto) {
        $invoice = new org_openpsa_invoices_invoice_dba($relatedto->fromGuid);
        $items = $invoice->get_invoice_items();
        if (sizeof($items) == 0) {
            echo "Invoice " . $invoice->get_label() . " has no items, creating one for deliverable\n";
Example #5
0
 function decline()
 {
     if ($this->state >= org_openpsa_sales_salesproject_deliverable_dba::STATUS_DECLINED) {
         return false;
     }
     $this->state = org_openpsa_sales_salesproject_deliverable_dba::STATUS_DECLINED;
     if ($this->update()) {
         // Update sales project if it doesn't have any open deliverables
         $qb = org_openpsa_sales_salesproject_deliverable_dba::new_query_builder();
         $qb->add_constraint('salesproject', '=', $this->salesproject);
         $qb->add_constraint('state', '<>', org_openpsa_sales_salesproject_deliverable_dba::STATUS_DECLINED);
         if ($qb->count() == 0) {
             // No proposals that are not declined
             $salesproject = new org_openpsa_sales_salesproject_dba($this->salesproject);
             $salesproject->status = org_openpsa_sales_salesproject_dba::STATUS_LOST;
             $salesproject->update();
         }
         return true;
     }
     return false;
 }