* SPDX-License-Identifier: AGPL-3.0-only
************************************/
require_once('include/RelatedListView.php');
//crmv@203484 removed including file
class Vendors extends CRMEntity {
var $log;
var $db;
var $table_name;
var $table_index= 'vendorid';
var $tab_name = Array();
var $tab_name_index = Array();
/**
* Mandatory table for supporting custom fields.
*/
var $customFieldTable = Array();
var $column_fields = Array();
//Pavani: Assign value to entity_table
var $entity_table;
var $sortby_fields = Array();
// This is the list of vte_fields that are in the lists.
var $list_fields = Array(
'Vendor Name'=>Array('vendor'=>'vendorname'),
'Phone'=>Array('vendor'=>'phone'),
'Email'=>Array('vendor'=>'email'),
'Category'=>Array('vendor'=>'category')
);
var $list_fields_name = Array(
'Vendor Name'=>'vendorname',
'Phone'=>'phone',
'Email'=>'email',
'Category'=>'category'
);
var $list_link_field= 'vendorname';
var $search_fields = Array(
'Vendor Name'=>Array('vendor'=>'vendorname'),
'Phone'=>Array('vendor'=>'phone'),
'Fax'=>Array('vendor'=>'fax'),
);
var $search_fields_name = Array(
'Vendor Name'=>'vendorname',
'Phone'=>'phone',
'Fax'=>'fax',
);
//Specifying required fields for vendors
var $required_fields = array();
// Used when enabling/disabling the mandatory fields for the module.
// Refers to vte_field.fieldname values.
var $mandatory_fields = Array('createdtime', 'modifiedtime', 'vendorname');
//Added these variables which are used as default order by and sortorder in ListView
var $default_order_by = 'vendorname';
var $default_sort_order = 'ASC';
//crmv@10759
var $search_base_field = 'vendorname';
//crmv@10759 e
/** Constructor which will set the column_fields in this object
*/
function __construct() {
global $table_prefix;
parent::__construct(); // crmv@37004
$this->table_name = $table_prefix."_vendor";
$this->tab_name = Array($table_prefix.'_crmentity',$table_prefix.'_vendor',$table_prefix.'_vendorcf');
$this->tab_name_index = Array($table_prefix.'_crmentity'=>'crmid',$table_prefix.'_vendor'=>'vendorid',$table_prefix.'_vendorcf'=>'vendorid');
$this->entity_table = $table_prefix."_crmentity";
$this->customFieldTable = Array($table_prefix.'_vendorcf', 'vendorid'); //crmv@33507
$this->log =LoggerManager::getLogger('vendor');
$this->log->debug("Entering Vendors() method ...");
$this->db = PearDatabase::getInstance();
$this->column_fields = getColumnFields('Vendors');
$this->log->debug("Exiting Vendor method ...");
}
function save_module($module)
{
}
/** function used to get the list of contacts which are related to the vendor
* @param int $id - vendor id
* @return array - array which will be returned from the function GetRelatedList
*/
function get_contacts($id, $cur_tab_id, $rel_tab_id, $actions=false) {
global $log,$currentModule,$current_user;//crmv@203484 removed global singlepane
global $table_prefix;
//crmv@203484
$VTEP = VTEProperties::getInstance();
$singlepane_view = $VTEP->getProperty('layout.singlepane_view');
//crmv@203484e
$log->debug("Entering get_contacts(".$id.") method ...");
$this_module = $currentModule;
$related_module = vtlib_getModuleNameById($rel_tab_id);
$other = CRMEntity::getInstance($related_module);
vtlib_setup_modulevars($related_module, $other);
$parenttab = getParentTab();
if($singlepane_view == true)//crmv@203484 changed to normal bool true, not string 'true'
$returnset = '&return_module='.$this_module.'&return_action=DetailView&return_id='.$id;
else
$returnset = '&return_module='.$this_module.'&return_action=CallRelatedList&return_id='.$id;
$button = '';
if($actions) {
$button .= $this->get_related_buttons($this_module, $id, $related_module, $actions); // crmv@43864
}
$query = "SELECT case when (".$table_prefix."_users.user_name is not null) then ".$table_prefix."_users.user_name else ".$table_prefix."_groups.groupname end as user_name,".$table_prefix."_contactdetails.*, ".$table_prefix."_crmentity.crmid, ".$table_prefix."_crmentity.smownerid,".$table_prefix."_vendorcontactrel.vendorid,".$table_prefix."_account.accountname
from ".$table_prefix."_contactdetails
inner join ".$table_prefix."_contactscf on ".$table_prefix."_contactscf.contactid = ".$table_prefix."_contactdetails.contactid
inner join ".$table_prefix."_crmentity on ".$table_prefix."_crmentity.crmid = ".$table_prefix."_contactdetails.contactid
inner join ".$table_prefix."_vendorcontactrel on ".$table_prefix."_vendorcontactrel.contactid=".$table_prefix."_contactdetails.contactid
left join ".$table_prefix."_groups on ".$table_prefix."_groups.groupid=".$table_prefix."_crmentity.smownerid
left join ".$table_prefix."_account on ".$table_prefix."_account.accountid = ".$table_prefix."_contactdetails.accountid
left join ".$table_prefix."_users on ".$table_prefix."_users.id=".$table_prefix."_crmentity.smownerid
where ".$table_prefix."_crmentity.deleted=0 and ".$table_prefix."_vendorcontactrel.vendorid = ".$id;
$return_value = GetRelatedList($this_module, $related_module, $other, $query, $button, $returnset);
if($return_value == null) $return_value = Array();
$return_value['CUSTOM_BUTTON'] = $button;
$log->debug("Exiting get_contacts method ...");
return $return_value;
}
/**
* Move the related records of the specified list of id's to the given record.
* @param String This module name
* @param Array List of Entity Id's from which related records need to be transfered
* @param Integer Id of the the Record to which the related records are to be moved
*/
function transferRelatedRecords($module, $transferEntityIds, $entityId) {
global $adb,$log;
global $table_prefix;
$log->debug("Entering function transferRelatedRecords ($module, $transferEntityIds, $entityId)");
$rel_table_arr = Array("Products"=>$table_prefix."_products","PurchaseOrder"=>$table_prefix."_purchaseorder","Contacts"=>$table_prefix."_vendorcontactrel");
$tbl_field_arr = Array($table_prefix."_products"=>"productid",$table_prefix."_vendorcontactrel"=>"contactid",$table_prefix."_purchaseorder"=>"purchaseorderid");
$entity_tbl_field_arr = Array($table_prefix."_products"=>"vendor_id",$table_prefix."_vendorcontactrel"=>"vendorid",$table_prefix."_purchaseorder"=>"vendorid");
foreach($transferEntityIds as $transferId) {
foreach($rel_table_arr as $rel_module=>$rel_table) {
$id_field = $tbl_field_arr[$rel_table];
$entity_id_field = $entity_tbl_field_arr[$rel_table];
// IN clause to avoid duplicate entries
$sel_result = $adb->pquery("select $id_field from $rel_table where $entity_id_field=? " .
" and $id_field not in (select $id_field from $rel_table where $entity_id_field=?)",
array($transferId,$entityId));
$res_cnt = $adb->num_rows($sel_result);
if($res_cnt > 0) {
for($i=0;$i<$res_cnt;$i++) {
$id_field_value = $adb->query_result($sel_result,$i,$id_field);
$adb->pquery("update $rel_table set $entity_id_field=? where $entity_id_field=? and $id_field=?",
array($entityId,$transferId,$id_field_value));
}
}
}
}
//crmv@15526
parent::transferRelatedRecords($module, $transferEntityIds, $entityId);
//crmv@15526 end
$log->debug("Exiting transferRelatedRecords...");
}
// crmv@152701
/**
*Returns a list of the associated faxes
*/
function get_faxes($id, $cur_tab_id, $rel_tab_id, $actions=false) {
global $log, $currentModule;
$log->debug("Entering get_faxes(".$id.") method ...");
$this_module = $currentModule;
$related_module = vtlib_getModuleNameById($rel_tab_id);
$singular_modname = vtlib_toSingular($related_module);
$button = '';
if($actions) {
if(is_string($actions)) $actions = explode(',', strtoupper($actions));
if(in_array('ADD', $actions) && isPermitted($related_module,1, '') == 'yes') {
$button .= " ";
}
}
// call standard function
$ret = $this->get_related_list($id, $cur_tab_id, $rel_tab_id, $actions);
// override button
$ret['CUSTOM_BUTTON'] = $button;
$log->debug("Exiting get_faxes method ...");
return $ret;
}
// crmv@152701e
/*
* Function to get the primary query part of a report
* @param - $module Primary module name
* returns the query string formed on fetching the related data for report for primary module
*/
function generateReportsQuery($module, $reportid = 0, $joinProducts = false, $joinUitype10 = true) { // crmv@146653
global $table_prefix;
$moduletable = $this->table_name;
$moduleindex = $this->table_index;
$modulecftable = $this->tab_name[2];
$modulecfindex = $this->tab_name_index[$modulecftable];
//crmv@21249
$query = "from $moduletable
inner join $modulecftable $modulecftable on $modulecftable.$modulecfindex=$moduletable.$moduleindex
inner join ".$table_prefix."_crmentity on ".$table_prefix."_crmentity.crmid=$moduletable.$moduleindex
left join ".$table_prefix."_users ".substr($table_prefix."_users$module",0,29)." on ".substr($table_prefix."_users$module",0,29).".id = ".$table_prefix."_crmentity.smownerid
left join ".$table_prefix."_users on ".$table_prefix."_users.id = ".$table_prefix."_crmentity.smownerid";
//crmv@21249e
return $query;
}
/*
* 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 (
"Products" =>array($table_prefix."_products"=>array("vendor_id","productid"),$table_prefix."_vendor"=>"vendorid"),
"PurchaseOrder" =>array($table_prefix."_purchaseorder"=>array("vendorid","purchaseorderid"),$table_prefix."_vendor"=>"vendorid"),
"Contacts" =>array($table_prefix."_vendorcontactrel"=>array("vendorid","contactid"),$table_prefix."_vendor"=>"vendorid"),
);
return $rel_tables[$secmodule];
}
// Function to unlink all the dependent entities of the given Entity by Id
function unlinkDependencies($module, $id) {
global $log;
global $table_prefix;
//Deleting Vendor related PO.
$po_q = 'SELECT '.$table_prefix.'_crmentity.crmid FROM '.$table_prefix.'_crmentity
INNER JOIN '.$table_prefix.'_purchaseorder ON '.$table_prefix.'_crmentity.crmid='.$table_prefix.'_purchaseorder.purchaseorderid
INNER JOIN '.$table_prefix.'_vendor ON '.$table_prefix.'_vendor.vendorid='.$table_prefix.'_purchaseorder.vendorid
WHERE '.$table_prefix.'_crmentity.deleted=0 AND '.$table_prefix.'_purchaseorder.vendorid=?';
$po_res = $this->db->pquery($po_q, array($id));
$po_ids_list = array();
for($k=0;$k < $this->db->num_rows($po_res);$k++)
{
$po_id = $this->db->query_result($po_res,$k,"crmid");
$po_ids_list[] = $po_id;
$sql = 'UPDATE '.$table_prefix.'_crmentity SET deleted = 1 WHERE crmid = ?';
$this->db->pquery($sql, array($po_id));
}
//Backup deleted Vendors related Potentials.
$params = array($id, RB_RECORD_UPDATED, $table_prefix.'_crmentity', 'deleted', 'crmid', implode(",", $po_ids_list));
$this->db->pquery('INSERT INTO '.$table_prefix.'_relatedlists_rb VALUES (?,?,?,?,?,?)', $params);
//Backup Product-Vendor Relation
$pro_q = 'SELECT productid FROM '.$table_prefix.'_products WHERE vendor_id=?';
$pro_res = $this->db->pquery($pro_q, array($id));
if ($this->db->num_rows($pro_res) > 0) {
$pro_ids_list = array();
for($k=0;$k < $this->db->num_rows($pro_res);$k++)
{
$pro_ids_list[] = $this->db->query_result($pro_res,$k,"productid");
}
$params = array($id, RB_RECORD_UPDATED, $table_prefix.'_products', 'vendor_id', 'productid', implode(",", $pro_ids_list));
$this->db->pquery('INSERT INTO '.$table_prefix.'_relatedlists_rb VALUES (?,?,?,?,?,?)', $params);
}
//Deleting Product-Vendor Relation.
$pro_q = 'UPDATE '.$table_prefix.'_products SET vendor_id = 0 WHERE vendor_id = ?';
$this->db->pquery($pro_q, array($id));
/*//Backup Contact-Vendor Relaton
$con_q = 'SELECT contactid FROM vte_vendorcontactrel WHERE vendorid = ?';
$con_res = $this->db->pquery($con_q, array($id));
if ($this->db->num_rows($con_res) > 0) {
for($k=0;$k < $this->db->num_rows($con_res);$k++)
{
$con_id = $this->db->query_result($con_res,$k,"contactid");
$params = array($id, RB_RECORD_DELETED, 'vte_vendorcontactrel', 'vendorid', 'contactid', $con_id);
$this->db->pquery('INSERT INTO vte_relatedlists_rb VALUES (?,?,?,?,?,?)', $params);
}
}
//Deleting Contact-Vendor Relaton
$vc_sql = 'DELETE FROM vte_vendorcontactrel WHERE vendorid=?';
$this->db->pquery($vc_sql, array($id));*/
parent::unlinkDependencies($module, $id);
}
}
?>