Esempio n. 1
0
 function approveInvoice($VAR)
 {
     # Get the invoice details:
     $db =& DB();
     $q = "SELECT * FROM " . AGILE_DB_PREFIX . "invoice WHERE\n\t        \t\tid = " . $db->qstr($VAR['id']) . " AND\n\t        \t\tsite_id = " . $db->qstr(DEFAULT_SITE);
     $invoice = $db->Execute($q);
     if ($invoice === false) {
         global $C_debug;
         $C_debug->error('invoice.inc.php', 'approveInvoice', $db->ErrorMsg());
         return false;
     }
     # Validate invoice exists & needs approval:
     if ($invoice->fields['id'] != $VAR['id'] || $invoice->fields['process_status'] == '1') {
         return false;
     }
     # Update the invoice approval status:
     $q = "UPDATE " . AGILE_DB_PREFIX . "invoice SET\n\t        \t\tdate_last \t\t= " . $db->qstr(time()) . ",\n\t        \t\tprocess_status \t= " . $db->qstr('1') . " WHERE\n\t        \t\tid\t\t \t\t= " . $db->qstr($VAR['id']) . " AND\n\t        \t\tsite_id = " . $db->qstr(DEFAULT_SITE);
     $result = $db->Execute($q);
     if ($result === false) {
         global $C_debug;
         $C_debug->error('invoice.inc.php', 'approveInvoice', $db->ErrorMsg());
         return false;
     }
     # Send approval notice to user:
     include_once PATH_MODULES . 'email_template/email_template.inc.php';
     $mail = new email_template();
     $mail->send('invoice_approved_user', $invoice->fields['account_id'], $VAR['id'], '', '');
     # Include the service class
     include_once PATH_MODULES . 'service/service.inc.php';
     $srvc = new service();
     # Determine if services have already been created for this invoice:
     if ($invoice->fields['type'] != 1) {
         $q = "SELECT id FROM " . AGILE_DB_PREFIX . "service WHERE\n    \t        \t\tinvoice_id = " . $db->qstr($VAR['id']) . " AND\n    \t        \t\tsite_id = " . $db->qstr(DEFAULT_SITE);
         $service = $db->Execute($q);
         if ($service === false) {
             global $C_debug;
             $C_debug->error('invoice.inc.php', 'approveInvoice', $db->ErrorMsg());
             return false;
         }
         if ($service->RecordCount() > 0) {
             # Update services to approved status:
             while (!$service->EOF) {
                 $srvc->approveService($service->fields['id']);
                 $service->MoveNext();
             }
             return true;
         }
         # Get the parent items in this invoice :
         $q = "SELECT * FROM " . AGILE_DB_PREFIX . "invoice_item WHERE\n    \t        \t  ( parent_id = 0 OR parent_id IS NULL OR parent_id = '') AND\n    \t        \t  invoice_id =  " . $db->qstr($VAR['id']) . " AND\n    \t        \t  site_id \t =  " . $db->qstr(DEFAULT_SITE);
         $ii = $db->Execute($q);
         if ($ii === false) {
             global $C_debug;
             $C_debug->error('invoice.inc.php', 'approveInvoice', $db->ErrorMsg());
             return false;
         }
         while (!$ii->EOF) {
             if (empty($ii->fields['service_id'])) {
                 # Add the service
                 $srvc->invoiceItemToService($ii->fields['id'], $invoice);
                 # Check for any children items in this invoice:
                 $q = "SELECT * FROM " . AGILE_DB_PREFIX . "invoice_item WHERE\n\t    \t\t        \t  parent_id  =  " . $db->qstr($ii->fields['id']) . " AND\n\t    \t\t        \t  invoice_id =  " . $db->qstr($VAR['id']) . " AND\n\t    \t\t        \t  site_id \t =  " . $db->qstr(DEFAULT_SITE);
                 $iii = $db->Execute($q);
                 if ($iii === false) {
                     global $C_debug;
                     $C_debug->error('invoice.inc.php', 'approveInvoice', $db->ErrorMsg());
                     return false;
                 }
                 while (!$iii->EOF) {
                     # Add the service
                     $srvc->invoiceItemToService($ii->fields['id'], $invoice);
                     $iii->MoveNext();
                 }
             } else {
                 $srvc = new service();
                 if ($ii->fields['item_type'] == 2 && $ii->fields['domain_type'] == 'renew') {
                     # this is a domain renewal
                     $srvc->renewDomain($ii, $invoice->fields['account_billing_id']);
                 } else {
                     # this is an upgrade for an existing service
                     $srvc->modifyService($ii, $invoice->fields['account_billing_id']);
                 }
             }
             $ii->MoveNext();
         }
     } elseif ($invoice->fields['type'] == 1) {
         # recurring invoice, just update assoc services
         # Loop through invoice items & approve assoc services
         $q = "SELECT service_id FROM " . AGILE_DB_PREFIX . "invoice_item WHERE\n                        invoice_id = " . $db->qstr($VAR['id']) . " AND\n                        site_id = " . $db->qstr(DEFAULT_SITE);
         $service = $db->Execute($q);
         if ($service === false) {
             global $C_debug;
             $C_debug->error('invoice.inc.php', 'voidInvoice', $db->ErrorMsg());
             return false;
         }
         if ($service->RecordCount() > 0) {
             # Include the service class
             include_once PATH_MODULES . 'service/service.inc.php';
             $srvc = new service();
             # Update services to inactive status:
             while (!$service->EOF) {
                 $srvc->approveService($service->fields['service_id']);
                 $service->MoveNext();
             }
         }
     }
     # get account id
     if (defined("SESS_ACCOUNT")) {
         $account_id = SESS_ACCOUNT;
     } else {
         $account_id = 0;
     }
     # if approved, create a memo
     $id = $db->GenID(AGILE_DB_PREFIX . 'invoice_memo_id');
     $q = "INSERT INTO " . AGILE_DB_PREFIX . "invoice_memo\n\t\t    \t\tSET\n\t\t    \t\tid \t\t= " . $db->qstr($id) . ",\n\t\t    \t\tsite_id \t= " . $db->qstr(DEFAULT_SITE) . ",\n\t\t    \t\tdate_orig \t= " . $db->qstr(time()) . ",\n\t\t    \t\tinvoice_id\t= " . $db->qstr($VAR['id']) . ",\n\t\t    \t\taccount_id\t= " . $db->qstr($account_id) . ",\n\t\t    \t\ttype\t\t= " . $db->qstr('approval') . ",\n\t\t    \t\tmemo\t\t= " . $db->qstr('NA');
     $memo = $db->Execute($q);
     if ($memo === false) {
         global $C_debug;
         $C_debug->error('invoice.inc.php', 'approveInvoice', $db->ErrorMsg());
         return false;
     }
     return true;
 }