function add_invoice_line()
 {
     $do_api_inv_line = new InvoiceLine();
     $do_api_invoice = new Invoice();
     if (!$do_api_invoice->isInvoiceOwner($this->idinvoice, $this->iduser)) {
         $this->setMessage("711", "Invoice does not belong to you");
         return false;
     } elseif (!preg_match("/^[0-9]+\$/", $this->price, $parts) && !preg_match("/^[0-9]+\\.[0-9]*\$/", $this->price, $parts) && !preg_match("/^\\.[0-9]*\$/", $this->price, $parts)) {
         $this->setMessage("703", "Invalid Amount. (Correct Format : 100.59 , 100 , 0.78, .78 , 2987 )");
         return false;
     } elseif (!preg_match("/^[0-9]+\$/", $this->qty, $parts) && !preg_match("/^[0-9]+\\.[0]*\$/", $this->qty, $parts)) {
         $this->setMessage("704", "Invalid Quantity. (Correct Format : 5 , 5.0 )");
         return false;
     } else {
         $do_api_inv_line->addNew();
         $do_api_inv_line->idinvoice = $this->idinvoice;
         $do_api_inv_line->description = $this->description;
         $do_api_inv_line->price = $this->price;
         $do_api_inv_line->qty = $this->qty;
         $do_api_inv_line->item = $this->item;
         $do_api_inv_line->total = floatval($this->price) * floatval($this->qty);
         $do_api_inv_line->add();
         $do_api_invoice->setInvoiceCalculations($this->idinvoice);
         $this->setValues(array("msg" => "Invoice Line Added for the idinvoice" . $this->idinvoice, "stat" => "ok", "code" => "720", "idinvoice" => $inserted_id));
         return true;
     }
 }
 $do_invoice->idcompany = $do_recurrent->idcompany;
 $do_invoice->idcontact = $do_recurrent->idcontact;
 $do_invoice->datecreated = $do_recurrent->nextdate;
 $do_invoice->invoice_note = $do_recurrent->invoice_note;
 $do_invoice->due_date = date("Y-m-d");
 $do_invoice->sub_total = $do_recurrent->sub_total;
 $do_invoice->net_total = $do_recurrent->net_total;
 $do_invoice->add();
 // Add the Invoice Line
 $idinvoice = $do_invoice->getPrimaryKeyValue();
 echo '<br />New Invoice Created :: ' . $idinvoice . '<br />';
 $do_inv_add = new Invoice();
 $do_inv_add->getId($do_recurrent->idinvoice);
 $inv_line = $do_inv_add->getChildinvoiceline();
 while ($inv_line->next()) {
     $do_inv_line->addNew();
     $do_inv_line->idinvoice = $idinvoice;
     $do_inv_line->description = $inv_line->description;
     $do_inv_line->price = $inv_line->price;
     $do_inv_line->qty = $inv_line->qty;
     $do_inv_line->total = $inv_line->total;
     $do_inv_line->item = $inv_line->item;
     $do_inv_line->add();
 }
 $do_invoice->setInvoiceCalculations($idinvoice);
 // Call this method for other calculations
 //update callback
 $do_inv_callbak = new InvoiceCallback();
 $do_inv_callbak->updateCallBack($do_recurrent->idcontact, $idinvoice);
 // Process RegistrationInvoiceLog will update only if the invoice is from registration Part of Ofuz.com
 $do_RegistrationInvoiceLog = new RegistrationInvoiceLog();