* SPDX-License-Identifier: AGPL-3.0-only ************************************/ //crmv@203484 removed including file // Account is used to store vte_account information. class PurchaseOrder extends CRMEntity { var $log; var $db; var $table_name; var $table_index= 'purchaseorderid'; var $tab_name = Array(); var $tab_name_index = Array(); /** * Mandatory table for supporting custom fields. */ var $customFieldTable = Array(); var $entity_table; var $billadr_table; var $column_fields = Array(); var $sortby_fields = Array('subject','tracking_no','smownerid','lastname'); // This is used to retrieve related vte_fields from form posts. var $additional_column_fields = Array('assigned_user_name', 'smownerid', 'opportunity_id', 'case_id', 'contact_id', 'task_id', 'note_id', 'meeting_id', 'call_id', 'email_id', 'parent_name', 'member_id' ); // This is the list of vte_fields that are in the lists. var $list_fields = Array( // Module Sequence Numbering //'Order No'=>Array('crmentity'=>'crmid'), 'Order No'=>Array('purchaseorder'=>'purchaseorder_no'), // END 'Subject'=>Array('purchaseorder'=>'subject'), 'Vendor Name'=>Array('purchaseorder'=>'vendorid'), 'Tracking Number'=>Array('purchaseorder'=> 'tracking_no'), 'Total'=>Array('purchaseorder'=>'total'), 'Assigned To'=>Array('crmentity'=>'smownerid') ); var $list_fields_name = Array( 'Order No'=>'purchaseorder_no', 'Subject'=>'subject', 'Vendor Name'=>'vendor_id', 'Tracking Number'=>'tracking_no', 'Total'=>'hdnGrandTotal', 'Assigned To'=>'assigned_user_id' ); var $list_link_field= 'subject'; var $search_fields = Array( 'Order No'=>Array('purchaseorder'=>'purchaseorder_no'), 'Subject'=>Array('purchaseorder'=>'subject'), ); var $search_fields_name = Array( 'Order No'=>'purchaseorder_no', 'Subject'=>'subject', ); // Used when enabling/disabling the mandatory fields for the module. // Refers to vte_field.fieldname values. var $mandatory_fields = Array('subject', 'vendor_id','createdtime' ,'modifiedtime'); // This is the list of vte_fields that are required. var $required_fields = array("accountname"=>1); //Added these variables which are used as default order by and sortorder in ListView var $default_order_by = 'subject'; var $default_sort_order = 'ASC'; //crmv@10759 var $search_base_field = 'subject'; //crmv@10759 e //var $groupTable = Array('vte_pogrouprelation','purchaseorderid'); /** Constructor Function for Order class * This function creates an instance of LoggerManager class using getLogger method * creates an instance for PearDatabase class and get values for column_fields array of Order class. */ function __construct() { global $table_prefix; parent::__construct(); // crmv@37004 $this->table_name = $table_prefix."_purchaseorder"; $this->tab_name = Array($table_prefix.'_crmentity',$table_prefix.'_purchaseorder',$table_prefix.'_pobillads',$table_prefix.'_poshipads',$table_prefix.'_purchaseordercf'); $this->tab_name_index = Array($table_prefix.'_crmentity'=>'crmid',$table_prefix.'_purchaseorder'=>'purchaseorderid',$table_prefix.'_pobillads'=>'pobilladdressid',$table_prefix.'_poshipads'=>'poshipaddressid',$table_prefix.'_purchaseordercf'=>'purchaseorderid'); $this->customFieldTable = Array($table_prefix.'_purchaseordercf', 'purchaseorderid'); $this->entity_table = $table_prefix."_crmentity"; $this->billadr_table = $table_prefix."_pobillads"; $this->log =LoggerManager::getLogger('PurchaseOrder'); $this->db = PearDatabase::getInstance(); $this->column_fields = getColumnFields('PurchaseOrder'); } function save_module($module) { global $adb,$table_prefix,$iAmAProcess; $InventoryUtils = InventoryUtils::getInstance(); // crmv@42024 //in ajax save we should not call this function, because this will delete all the existing product values if(!empty($_REQUEST) && isset($_REQUEST['totalProductCount']) && $_REQUEST['action'] != 'PurchaseOrderAjax' && $_REQUEST['ajxaction'] != 'DETAILVIEW' && $_REQUEST['action'] != 'MassEditSave' && !$iAmAProcess) // crmv@138794 crmv@196424 { //Based on the total Number of rows we will save the product relationship with this entity $InventoryUtils->saveInventoryProductDetails($this, 'PurchaseOrder', $this->update_prod_stock); } //In Ajax edit, if the status changed to Received Shipment then we have to update the product stock if($_REQUEST['action'] == 'PurchaseOrderAjax' && $this->update_prod_stock == 'true') { $inventory_res = $this->db->pquery("select productid, quantity from ".$table_prefix."_inventoryproductrel where id=?",array($this->id)); $noofproducts = $this->db->num_rows($inventory_res); //We have to update the stock for all the products in this PO for($prod_count=0;$prod_count<$noofproducts;$prod_count++) { $productid = $this->db->query_result($inventory_res,$prod_count,'productid'); $quantity = $this->db->query_result($inventory_res,$prod_count,'quantity'); $this->db->println("Stock is going to be updated for the productid - $productid with quantity - $quantity"); addToProductStock($productid,$quantity); } } // Update the currency id and the conversion rate for the purchase order $update_query = "update ".$table_prefix."_purchaseorder set currency_id=?, conversion_rate=? where purchaseorderid=?"; $update_params = array($this->column_fields['currency_id'], $this->column_fields['conversion_rate'], $this->id); $adb->pquery($update_query, $update_params); } /* * Function to get the secondary query part of a report * @param - $module primary module name * @param - $secmodule secondary module name * returns the query string formed on fetching the related data for report for secondary module */ // crmv@35693 crmv@38798 crmv@73751 function generateReportsSecQuery($module,$secmodule,$reporttype='',$useProductJoin=true,$joinUitype10=true){ // crmv@146653 global $table_prefix; if ($reporttype != 'COLUMNSTOTOTAL' && $useProductJoin) { $productjoins = " left join ".$table_prefix."_inventoryproductrel ".substr($table_prefix."_inventoryproductrel$secmodule",0,29)." on ".$table_prefix."_purchaseorder.purchaseorderid = ".substr($table_prefix."_inventoryproductrel$secmodule",0,29).".id left join ".$table_prefix."_products ".$table_prefix."_products$secmodule on ".$table_prefix."_products$secmodule.productid = ".substr($table_prefix."_inventoryproductrel$secmodule",0,29).".productid left join ".$table_prefix."_service ".$table_prefix."_service$secmodule on ".$table_prefix."_service$secmodule.serviceid = ".substr($table_prefix."_inventoryproductrel$secmodule",0,29).".productid "; } $query = $this->getRelationQuery($module,$secmodule,"".$table_prefix."_purchaseorder","purchaseorderid"); $query .= " left join ".$table_prefix."_purchaseordercf on ".$table_prefix."_purchaseorder.purchaseorderid = ".$table_prefix."_purchaseordercf.purchaseorderid left join ".$table_prefix."_pobillads on ".$table_prefix."_purchaseorder.purchaseorderid=".$table_prefix."_pobillads.pobilladdressid left join ".$table_prefix."_poshipads on ".$table_prefix."_purchaseorder.purchaseorderid=".$table_prefix."_poshipads.poshipaddressid left join ".$table_prefix."_inventorytotals on ".$table_prefix."_inventorytotals.id = ".$table_prefix."_purchaseorder.purchaseorderid left join ".$table_prefix."_inventorytotals ".substr($table_prefix."_inventorytotals$secmodule",0,29)." on ".substr($table_prefix."_inventorytotals$secmodule",0,29).".id = ".$table_prefix."_purchaseorder.purchaseorderid $productjoins left join ".$table_prefix."_users ".$table_prefix."_users$secmodule on ".$table_prefix."_users$secmodule.id = ".$table_prefix."_crmentity$secmodule.smownerid left join ".$table_prefix."_groups ".$table_prefix."_groups$secmodule on ".$table_prefix."_groups$secmodule.groupid = ".$table_prefix."_crmentity$secmodule.smownerid left join ".$table_prefix."_vendor ".$table_prefix."_vendorRel$secmodule on ".$table_prefix."_vendorRel$secmodule.vendorid = ".$table_prefix."_purchaseorder.vendorid left join ".$table_prefix."_contactdetails ".substr($table_prefix."_contactdetails$secmodule",0,29)." on ".substr($table_prefix."_contactdetails$secmodule",0,29).".contactid = ".$table_prefix."_purchaseorder.contactid "; return $query; } // crmv@35693e crmv@38798e crmv@73751e /* * Function to get the relation tables for related modules * @param - $secmodule secondary module name * returns the array with table names and fieldnames storing relations between module and this module */ function setRelationTables($secmodule){ global $table_prefix; $rel_tables = array ( "Calendar" =>array($table_prefix."_seactivityrel"=>array("crmid","activityid"),$table_prefix."_purchaseorder"=>"purchaseorderid"), "Documents" => array($table_prefix."_senotesrel"=>array("crmid","notesid"),$table_prefix."_purchaseorder"=>"purchaseorderid"), "Contacts" => array($table_prefix."_purchaseorder"=>array("purchaseorderid","contactid")), ); return $rel_tables[$secmodule]; } // Function to unlink an entity with given Id from another entity function unlinkRelationship($id, $return_module, $return_id) { global $log,$table_prefix; if(empty($return_module) || empty($return_id)) return; if($return_module == 'Vendors') { $sql_req ='UPDATE '.$table_prefix.'_crmentity SET deleted = 1 WHERE crmid= ?'; $this->db->pquery($sql_req, array($id)); } elseif($return_module == 'Contacts') { $sql_req ='UPDATE '.$table_prefix.'_purchaseorder SET contactid=0 WHERE purchaseorderid = ?'; $this->db->pquery($sql_req, array($id)); } else { $sql = 'DELETE FROM '.$table_prefix.'_crmentityrel WHERE (crmid=? AND relmodule=? AND relcrmid=?) OR (relcrmid=? AND module=? AND crmid=?)'; $params = array($id, $return_module, $return_id, $id, $return_module, $return_id); $this->db->pquery($sql, $params); } $this->db->pquery("UPDATE {$table_prefix}_crmentity SET modifiedtime = ? WHERE crmid IN (?,?)", array($this->db->formatDate(date('Y-m-d H:i:s'), true), $id, $return_id)); // crmv@49398 crmv@69690 } } ?>