Exemple #1
0
 public function testCRUD()
 {
     midcom::get('auth')->request_sudo('org.openpsa.invoices');
     $item = new org_openpsa_invoices_invoice_item_dba();
     $item->invoice = self::$_invoice->id;
     $item->deliverable = self::$_deliverable->id;
     $item->pricePerUnit = 100;
     $item->units = 2.5;
     $stat = $item->create();
     $this->assertTrue($stat);
     $this->register_object($item);
     $parent = $item->get_parent();
     $this->assertEquals($parent->guid, self::$_invoice->guid);
     self::$_invoice->refresh();
     self::$_deliverable->refresh();
     $this->assertEquals(self::$_invoice->sum, 250);
     $this->assertEquals(self::$_deliverable->invoiced, 250);
     $this->assertEquals(self::$_deliverable->state, org_openpsa_sales_salesproject_deliverable_dba::STATUS_INVOICED);
     $item->units = 3.5;
     $stat = $item->update();
     $this->assertTrue($stat);
     self::$_invoice->refresh();
     self::$_deliverable->refresh();
     $this->assertEquals(self::$_invoice->sum, 350);
     $this->assertEquals(self::$_deliverable->invoiced, 350);
     $stat = $item->delete();
     $this->assertTrue($stat);
     self::$_invoice->refresh();
     self::$_deliverable->refresh();
     $this->assertEquals(self::$_invoice->sum, 0);
     $this->assertEquals(self::$_deliverable->invoiced, 0);
     midcom::get('auth')->drop_sudo();
 }
Exemple #2
0
 private function _generate_invoice()
 {
     $invoice = new org_openpsa_invoices_invoice_dba();
     $invoice->customer = (int) $_POST['org_openpsa_invoices_invoice_customer'];
     $invoice->number = $invoice->generate_invoice_number();
     $invoice->owner = midcom_connection::get_user();
     $invoice->vat = $invoice->get_default('vat');
     $invoice->description = $invoice->get_default('remarks');
     if (!$invoice->create()) {
         midcom::get('uimessages')->add($this->_l10n->get('org.openpsa.invoices'), $this->_l10n->get('failed to create invoice, reason ') . midcom_connection::get_error_string(), 'error');
         return false;
     }
     // create invoice_items
     foreach ($_POST['org_openpsa_invoices_invoice_tasks'] as $task_id => $invoiceable) {
         if (!$invoiceable) {
             continue;
         }
         $task = $this->_tasks[$task_id];
         //instance the invoice_items
         $item = new org_openpsa_invoices_invoice_item_dba();
         $item->task = $task_id;
         try {
             $deliverable = org_openpsa_sales_salesproject_deliverable_dba::get_cached($task->agreement);
             $item->deliverable = $deliverable->id;
         } catch (midcom_error $e) {
             $e->log();
         }
         $item->invoice = $invoice->id;
         $item->description = $task->title;
         $item->pricePerUnit = (double) $_POST['org_openpsa_invoices_invoice_tasks_price'][$task_id];
         $item->units = (double) $_POST['org_openpsa_invoices_invoice_tasks_units'][$task_id];
         $item->create();
         // Connect invoice to the tasks involved
         org_openpsa_projects_workflow::mark_invoiced($task, $invoice);
     }
     // Generate "Send invoice" task
     $invoice_sender_guid = $this->_config->get('invoice_sender');
     if (!empty($invoice_sender_guid)) {
         $invoice->generate_invoicing_task($invoice_sender_guid);
     }
     midcom::get('uimessages')->add($this->_l10n->get('org.openpsa.invoices'), sprintf($this->_l10n->get('invoice %s created'), $invoice->get_label()), 'ok');
     midcom::get()->relocate("invoice/edit/{$invoice->guid}/");
     // This will exit
 }
Exemple #3
0
 /**
  * @param mixed $handler_id The ID of the handler.
  * @param Array $args The argument list.
  * @param Array &$data The local request data.
  */
 public function _handler_itemedit($handler_id, array $args, array &$data)
 {
     $this->_verify_post_data();
     $invoice = new org_openpsa_invoices_invoice_dba($args[0]);
     midcom::get()->skip_page_style = true;
     switch ($_POST['oper']) {
         case 'edit':
             if (strpos($_POST['id'], 'new_') === 0) {
                 $item = new org_openpsa_invoices_invoice_item_dba();
                 $item->invoice = $invoice->id;
                 $item->create();
             } else {
                 $item = new org_openpsa_invoices_invoice_item_dba((int) $_POST['id']);
             }
             $item->units = (double) str_replace(',', '.', $_POST['quantity']);
             $item->pricePerUnit = (double) str_replace(',', '.', $_POST['price']);
             $item->description = $_POST['description'];
             if (!$item->update()) {
                 throw new midcom_error('Failed to update item: ' . midcom_connection::get_error_string());
             }
             break;
         case 'del':
             $item = new org_openpsa_invoices_invoice_item_dba((int) $_POST['id']);
             if (!$item->delete()) {
                 throw new midcom_error('Failed to delete item: ' . midcom_connection::get_error_string());
             }
             break;
         default:
             throw new midcom_error('Invalid operation "' . $_POST['oper'] . '"');
     }
     $data['saved_values'] = array('id' => $item->id, 'quantity' => $item->units, 'price' => $item->pricePerUnit, 'description' => $item->description, 'position' => $item->position, 'oldid' => $_POST['id']);
 }
Exemple #4
0
                        flush();
                        $found = true;
                        break;
                    }
                }
            }
            if (!$found) {
                echo "Could not identify invoice item for deliverable " . $deliverable->title . " on invoice " . $invoice->get_label() . ", creating empty item\n";
                flush();
                $item = new org_openpsa_invoices_invoice_item_dba();
                $item->invoice = $invoice->id;
                $item->deliverable = $deliverable->id;
                $item->pricePerUnit = 0;
                $item->units = 1;
                $item->description = $deliverable->title . ' (auto-generated)';
                $item->create();
            }
        }
        $relatedto->delete();
    }
}
$qb_items = org_openpsa_invoices_invoice_item_dba::new_query_builder();
$qb_items->add_constraint('task', '>', 0);
$qb_items->add_constraint('deliverable', '=', 0);
$items = $qb_items->execute();
foreach ($items as $item) {
    try {
        $task = new org_openpsa_projects_task_dba($item->task);
    } catch (midcom_error $e) {
        echo 'Failed to load task #' . $item->task . ': ' . $e->getMessage() . ", skipping\n";
        flush();
Exemple #5
0
 /**
  * Helper function to get invoice_item for the passed task id, if there is no item
  * it will return a new created one
  */
 private function _probe_invoice_item_for_task($task_id)
 {
     //check if there is already an invoice_item for this task
     $qb_invoice_item = org_openpsa_invoices_invoice_item_dba::new_query_builder();
     $qb_invoice_item->add_constraint('invoice', '=', $this->id);
     $qb_invoice_item->add_constraint('task', '=', $task_id);
     $invoice_items = $qb_invoice_item->execute();
     if (count($invoice_items) == 1) {
         $invoice_item = $invoice_items[0];
     } else {
         if (count($invoice_items) > 1) {
             debug_add('More than one item found for task #' . $task_id . ', only returning the first', MIDCOM_LOG_INFO);
             $invoice_item = $invoice_items[0];
         } else {
             $invoice_item = new org_openpsa_invoices_invoice_item_dba();
             $invoice_item->task = $task_id;
             $invoice_item->invoice = $this->id;
             $invoice_item->create();
         }
     }
     return $invoice_item;
 }