function delete_invoice_item($itemid) { log_debug("accounts_invoices_manage", "Executing delete_invoice_itemid({$itemid})"); // sanatise item ID $itemid = @security_script_input_predefined("any", $itemid); // fetch the invoice ID and type $sql_item_obj = new sql_query(); $sql_item_obj->string = "SELECT invoiceid, invoicetype FROM account_items WHERE id='" . $itemid . "' LIMIT 1"; $sql_item_obj->execute(); if (!$sql_item_obj->num_rows()) { throw new SoapFault("Sender", "INVALID_ITEMID"); } $sql_item_obj->fetch_array(); if (user_permissions_get("accounts_" . $sql_item_obj->data[0]["invoicetype"] . "_write")) { $obj_invoice_item = new invoice_items(); $obj_invoice_item->type_invoice = $sql_item_obj->data[0]["invoicetype"]; $obj_invoice_item->id_invoice = $sql_item_obj->data[0]["invoiceid"]; $obj_invoice_item->id_item = $itemid; // make sure invoice is not locked if ($obj_invoice_item->check_lock()) { throw new SoapFault("Sender", "LOCKED"); } /* Perform Changes */ // start SQL transaction $sql_obj = new sql_query(); $sql_obj->trans_begin(); if (!$obj_invoice_item->action_delete()) { $sql_obj->trans_rollback(); throw new SoapFault("Sender", "UNEXPECTED_ACTION_ERROR"); } // re-calculate taxes, totals and ledgers as required $obj_invoice_item->action_update_tax(); $obj_invoice_item->action_update_total(); $obj_invoice_item->action_update_ledger(); // commit if (error_check()) { $sql_obj->trans_rollback(); throw new SoapFault("Sender", "UNEXPECTED_ACTION_ERROR"); } else { $sql_obj->trans_commit(); return 1; } } else { throw new SoapFault("Sender", "ACCESS DENIED"); } }