2
0
forked from Wavyzz/dolibarr
Files
dolibarr-fork/htdocs/product/class/productcustomerprice.class.php
Laurent Destailleur 41a74c62e2 Fix trigger to insert lines where called when inserting line but also
when cloning parent object, making no way to know when to use them or
not. I introduced a context to allow code to know that and do not
triggers twice.
2015-02-26 13:03:17 +01:00

946 lines
28 KiB
PHP

<?php
/* Copyright (C) 2007-2012 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2014 Florian Henry <florian.henry@open-concept.pro>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* \file htdocs/product/class/productcustomerprice.class.php
* \ingroup produit
* \brief File of class to manage predefined price products or services by customer
*/
require_once DOL_DOCUMENT_ROOT . '/core/class/commonobject.class.php';
/**
* File of class to manage predefined price products or services by customer
*/
class Productcustomerprice extends CommonObject
{
var $db; // !< To store db handler
var $error; // !< To return error code (or message)
var $errors = array (); // !< To return several error codes (or messages)
var $element = 'product_customer_price'; // !< Id that identify managed objects
var $table_element = 'product_customer_price'; // !< Name of table without prefix where object is stored
var $id;
var $entity;
var $datec = '';
var $tms = '';
var $fk_product;
var $fk_soc;
var $price;
var $price_ttc;
var $price_min;
var $price_min_ttc;
var $price_base_type;
var $tva_tx;
var $recuperableonly;
var $localtax1_tx;
var $localtax2_tx;
var $fk_user;
var $import_key;
var $lines = array ();
/**
* Constructor
*
* @param DoliDb $db handler
*/
function __construct($db) {
$this->db = $db;
return 1;
}
/**
* Create object into database
*
* @param User $user that creates
* @param int $notrigger triggers after, 1=disable triggers
* @param int $forceupdateaffiliate update price on each soc child
* @return int <0 if KO, Id of created object if OK
*/
function create($user, $notrigger = 0, $forceupdateaffiliate = 0) {
global $conf, $langs;
$error = 0;
// Clean parameters
if (isset($this->entity))
$this->entity = trim($this->entity);
if (isset($this->fk_product))
$this->fk_product = trim($this->fk_product);
if (isset($this->fk_soc))
$this->fk_soc = trim($this->fk_soc);
if (isset($this->price))
$this->price = trim($this->price);
if (isset($this->price_ttc))
$this->price_ttc = trim($this->price_ttc);
if (isset($this->price_min))
$this->price_min = trim($this->price_min);
if (isset($this->price_min_ttc))
$this->price_min_ttc = trim($this->price_min_ttc);
if (isset($this->price_base_type))
$this->price_base_type = trim($this->price_base_type);
if (isset($this->tva_tx))
$this->tva_tx = trim($this->tva_tx);
if (isset($this->recuperableonly))
$this->recuperableonly = trim($this->recuperableonly);
if (isset($this->localtax1_tx))
$this->localtax1_tx = trim($this->localtax1_tx);
if (isset($this->localtax2_tx))
$this->localtax2_tx = trim($this->localtax2_tx);
if (isset($this->fk_user))
$this->fk_user = trim($this->fk_user);
if (isset($this->import_key))
$this->import_key = trim($this->import_key);
// Check parameters
// Put here code to add control on parameters values
if ($this->price != '' || $this->price == 0) {
if ($this->price_base_type == 'TTC') {
$this->price_ttc = price2num($this->price, 'MU');
$this->price = price2num($this->price) / (1 + ($this->tva_tx / 100));
$this->price = price2num($this->price, 'MU');
if ($this->price_min != '' || $this->price_min == 0) {
$this->price_min_ttc = price2num($this->price_min, 'MU');
$this->price_min = price2num($this->price_min) / (1 + ($this->tva_tx / 100));
$this->price_min = price2num($this->price_min, 'MU');
} else {
$this->price_min = 0;
$this->price_min_ttc = 0;
}
} else {
$this->price = price2num($this->price, 'MU');
$this->price_ttc = ($this->recuperableonly != 1) ? price2num($this->price) * (1 + ($this->tva_tx / 100)) : $this->price;
$this->price_ttc = price2num($this->price_ttc, 'MU');
if ($this->price_min != '' || $this->price_min == 0) {
$this->price_min = price2num($this->price_min, 'MU');
$this->price_min_ttc = price2num($this->price_min) * (1 + ($this->tva_tx / 100));
$this->price_min_ttc = price2num($this->price_min_ttc, 'MU');
// print 'X'.$newminprice.'-'.$price_min;
} else {
$this->price_min = 0;
$this->price_min_ttc = 0;
}
}
}
// Insert request
$sql = "INSERT INTO " . MAIN_DB_PREFIX . "product_customer_price(";
$sql .= "entity,";
$sql .= "datec,";
$sql .= "fk_product,";
$sql .= "fk_soc,";
$sql .= "price,";
$sql .= "price_ttc,";
$sql .= "price_min,";
$sql .= "price_min_ttc,";
$sql .= "price_base_type,";
$sql .= "tva_tx,";
$sql .= "recuperableonly,";
$sql .= "localtax1_tx,";
$sql .= "localtax2_tx,";
$sql .= "fk_user,";
$sql .= "import_key";
$sql .= ") VALUES (";
$sql .= " " . $conf->entity . ",";
$sql .= " '" . $this->db->idate(dol_now()) . "',";
$sql .= " " . (! isset($this->fk_product) ? 'NULL' : "'" . $this->fk_product . "'") . ",";
$sql .= " " . (! isset($this->fk_soc) ? 'NULL' : "'" . $this->fk_soc . "'") . ",";
$sql .= " " . (empty($this->price) ? '0' : "'" . $this->price . "'") . ",";
$sql .= " " . (empty($this->price_ttc) ? '0' : "'" . $this->price_ttc . "'") . ",";
$sql .= " " . (empty($this->price_min) ? '0' : "'" . $this->price_min . "'") . ",";
$sql .= " " . (empty($this->price_min_ttc) ? '0' : "'" . $this->price_min_ttc . "'") . ",";
$sql .= " " . (! isset($this->price_base_type) ? 'NULL' : "'" . $this->db->escape($this->price_base_type) . "'") . ",";
$sql .= " " . (! isset($this->tva_tx) ? 'NULL' : "'" . $this->tva_tx . "'") . ",";
$sql .= " " . (! isset($this->recuperableonly) ? 'NULL' : "'" . $this->recuperableonly . "'") . ",";
$sql .= " " . (! isset($this->localtax1_tx) ? 'NULL' : "'" . $this->localtax1_tx . "'") . ",";
$sql .= " " . (! isset($this->localtax2_tx) ? 'NULL' : "'" . $this->localtax2_tx . "'") . ",";
$sql .= " " . $user->id . ",";
$sql .= " " . (! isset($this->import_key) ? 'NULL' : "'" . $this->db->escape($this->import_key) . "'") . "";
$sql .= ")";
$this->db->begin();
dol_syslog(get_class($this) . "::create", LOG_DEBUG);
$resql = $this->db->query($sql);
if (! $resql) {
$error ++;
$this->errors [] = "Error " . $this->db->lasterror();
}
if (! $error) {
$this->id = $this->db->last_insert_id(MAIN_DB_PREFIX . "product_customer_price");
if (! $notrigger) {
// Uncomment this and change MYOBJECT to your own tag if you
// want this action calls a trigger.
// // Call triggers
// include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
// $interface=new Interfaces($this->db);
// $result=$interface->run_triggers('MYOBJECT_CREATE',$this,$user,$langs,$conf);
// if ($result < 0) { $error++; $this->errors=$interface->errors; }
// // End call triggers
}
}
if (! $error) {
$result = $this->setPriceOnAffiliateThirdparty($user, $forceupdateaffiliate);
if ($result < 0) {
$error ++;
}
}
// Commit or rollback
if ($error) {
foreach ( $this->errors as $errmsg ) {
dol_syslog(get_class($this) . "::create " . $errmsg, LOG_ERR);
$this->error .= ($this->error ? ', ' . $errmsg : $errmsg);
}
$this->db->rollback();
return - 1 * $error;
} else {
$this->db->commit();
return $this->id;
}
}
/**
* Load object in memory from the database
*
* @param int $id object
* @return int <0 if KO, >0 if OK
*/
function fetch($id) {
global $langs;
$sql = "SELECT";
$sql .= " t.rowid,";
$sql .= " t.entity,";
$sql .= " t.datec,";
$sql .= " t.tms,";
$sql .= " t.fk_product,";
$sql .= " t.fk_soc,";
$sql .= " t.price,";
$sql .= " t.price_ttc,";
$sql .= " t.price_min,";
$sql .= " t.price_min_ttc,";
$sql .= " t.price_base_type,";
$sql .= " t.tva_tx,";
$sql .= " t.recuperableonly,";
$sql .= " t.localtax1_tx,";
$sql .= " t.localtax2_tx,";
$sql .= " t.fk_user,";
$sql .= " t.import_key";
$sql .= " FROM " . MAIN_DB_PREFIX . "product_customer_price as t";
$sql .= " WHERE t.rowid = " . $id;
dol_syslog(get_class($this) . "::fetch", LOG_DEBUG);
$resql = $this->db->query($sql);
if ($resql) {
if ($this->db->num_rows($resql)) {
$obj = $this->db->fetch_object($resql);
$this->id = $obj->rowid;
$this->entity = $obj->entity;
$this->datec = $this->db->jdate($obj->datec);
$this->tms = $this->db->jdate($obj->tms);
$this->fk_product = $obj->fk_product;
$this->fk_soc = $obj->fk_soc;
$this->price = $obj->price;
$this->price_ttc = $obj->price_ttc;
$this->price_min = $obj->price_min;
$this->price_min_ttc = $obj->price_min_ttc;
$this->price_base_type = $obj->price_base_type;
$this->tva_tx = $obj->tva_tx;
$this->recuperableonly = $obj->recuperableonly;
$this->localtax1_tx = $obj->localtax1_tx;
$this->localtax2_tx = $obj->localtax2_tx;
$this->fk_user = $obj->fk_user;
$this->import_key = $obj->import_key;
}
$this->db->free($resql);
return 1;
} else {
$this->error = "Error " . $this->db->lasterror();
return - 1;
}
}
/**
* Load all objects in memory from database
*
* @param string $sortorder order
* @param string $sortfield field
* @param int $limit page
* @param int $offset offset
* @param array $filter output
* @return int <0 if KO, >0 if OK
*/
function fetch_all($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, $filter = array()) {
global $langs;
$sql = "SELECT";
$sql .= " t.rowid,";
$sql .= " t.entity,";
$sql .= " t.datec,";
$sql .= " t.tms,";
$sql .= " t.fk_product,";
$sql .= " t.fk_soc,";
$sql .= " t.price,";
$sql .= " t.price_ttc,";
$sql .= " t.price_min,";
$sql .= " t.price_min_ttc,";
$sql .= " t.price_base_type,";
$sql .= " t.tva_tx,";
$sql .= " t.recuperableonly,";
$sql .= " t.localtax1_tx,";
$sql .= " t.localtax2_tx,";
$sql .= " t.fk_user,";
$sql .= " t.import_key,";
$sql .= " soc.nom as socname,";
$sql .= " prod.ref as prodref";
$sql .= " FROM " . MAIN_DB_PREFIX . "product_customer_price as t ";
$sql .= " ," . MAIN_DB_PREFIX . "product as prod ";
$sql .= " ," . MAIN_DB_PREFIX . "societe as soc ";
$sql .= " WHERE soc.rowid=t.fk_soc ";
$sql .= " AND prod.rowid=t.fk_product ";
$sql .= " AND prod.entity IN (" . getEntity('product', 1) . ")";
// Manage filter
if (count($filter) > 0) {
foreach ( $filter as $key => $value ) {
if (strpos($key, 'date')) // To allow $filter['YEAR(s.dated)']=>$year
{
$sql .= ' AND ' . $key . ' = \'' . $value . '\'';
} elseif ($key == 'soc.nom') {
$sql .= ' AND ' . $key . ' LIKE \'%' . $value . '%\'';
} else {
$sql .= ' AND ' . $key . ' = ' . $value;
}
}
}
if (! empty($sortfield)) {
$sql .= " ORDER BY " . $sortfield . ' ' . $sortorder;
}
if (! empty($limit)) {
$sql .= ' ' . $this->db->plimit($limit + 1, $offset);
}
dol_syslog(get_class($this) . "::fetch_all", LOG_DEBUG);
$resql = $this->db->query($sql);
if ($resql) {
$this->lines = array ();
$num = $this->db->num_rows($resql);
while ( $obj = $this->db->fetch_object($resql) ) {
$line = new PriceByCustomerLine();
$line->id = $obj->rowid;
$line->entity = $obj->entity;
$line->datec = $this->db->jdate($obj->datec);
$line->tms = $this->db->jdate($obj->tms);
$line->fk_product = $obj->fk_product;
$line->fk_soc = $obj->fk_soc;
$line->price = $obj->price;
$line->price_ttc = $obj->price_ttc;
$line->price_min = $obj->price_min;
$line->price_min_ttc = $obj->price_min_ttc;
$line->price_base_type = $obj->price_base_type;
$line->tva_tx = $obj->tva_tx;
$line->recuperableonly = $obj->recuperableonly;
$line->localtax1_tx = $obj->localtax1_tx;
$line->localtax2_tx = $obj->localtax2_tx;
$line->fk_user = $obj->fk_user;
$line->import_key = $obj->import_key;
$line->socname = $obj->socname;
$line->prodref = $obj->prodref;
$this->lines [] = $line;
}
$this->db->free($resql);
return $num;
} else {
$this->error = "Error " . $this->db->lasterror();
return - 1;
}
}
/**
* Load all objects in memory from database
*
* @param string $sortorder order
* @param string $sortfield field
* @param int $limit page
* @param int $offset offset
* @param array $filter output
* @return int <0 if KO, >0 if OK
*/
function fetch_all_log($sortorder, $sortfield, $limit, $offset, $filter = array()) {
global $langs;
$sql = "SELECT";
$sql .= " t.rowid,";
$sql .= " t.entity,";
$sql .= " t.datec,";
$sql .= " t.fk_product,";
$sql .= " t.fk_soc,";
$sql .= " t.price,";
$sql .= " t.price_ttc,";
$sql .= " t.price_min,";
$sql .= " t.price_min_ttc,";
$sql .= " t.price_base_type,";
$sql .= " t.tva_tx,";
$sql .= " t.recuperableonly,";
$sql .= " t.localtax1_tx,";
$sql .= " t.localtax2_tx,";
$sql .= " t.fk_user,";
$sql .= " t.import_key,";
$sql .= " soc.nom as socname,";
$sql .= " prod.ref as prodref";
$sql .= " FROM " . MAIN_DB_PREFIX . "product_customer_price_log as t ";
$sql .= " ," . MAIN_DB_PREFIX . "product as prod ";
$sql .= " ," . MAIN_DB_PREFIX . "societe as soc ";
$sql .= " WHERE soc.rowid=t.fk_soc ";
$sql .= " AND prod.rowid=t.fk_product ";
$sql .= " AND prod.entity IN (" . getEntity('product', 1) . ")";
// Manage filter
if (count($filter) > 0) {
foreach ( $filter as $key => $value ) {
if (strpos($key, 'date')) // To allow $filter['YEAR(s.dated)']=>$year
{
$sql .= ' AND ' . $key . ' = \'' . $value . '\'';
} elseif ($key == 'soc.nom') {
$sql .= ' AND ' . $key . ' LIKE \'%' . $value . '%\'';
} else {
$sql .= ' AND ' . $key . ' = ' . $value;
}
}
}
if (! empty($sortfield)) {
$sql .= " ORDER BY " . $sortfield . ' ' . $sortorder;
}
if (! empty($limit)) {
$sql .= ' ' . $this->db->plimit($limit + 1, $offset);
}
dol_syslog(get_class($this) . "::fetch_all_log", LOG_DEBUG);
$resql = $this->db->query($sql);
if ($resql) {
$this->lines = array ();
$num = $this->db->num_rows($resql);
while ( $obj = $this->db->fetch_object($resql) ) {
$line = new PriceByCustomerLine();
$line->id = $obj->rowid;
$line->entity = $obj->entity;
$line->datec = $this->db->jdate($obj->datec);
$line->tms = $this->db->jdate($obj->tms);
$line->fk_product = $obj->fk_product;
$line->fk_soc = $obj->fk_soc;
$line->price = $obj->price;
$line->price_ttc = $obj->price_ttc;
$line->price_min = $obj->price_min;
$line->price_min_ttc = $obj->price_min_ttc;
$line->price_base_type = $obj->price_base_type;
$line->tva_tx = $obj->tva_tx;
$line->recuperableonly = $obj->recuperableonly;
$line->localtax1_tx = $obj->localtax1_tx;
$line->localtax2_tx = $obj->localtax2_tx;
$line->fk_user = $obj->fk_user;
$line->import_key = $obj->import_key;
$line->socname = $obj->socname;
$line->prodref = $obj->prodref;
$this->lines [] = $line;
}
$this->db->free($resql);
return $num;
} else {
$this->error = "Error " . $this->db->lasterror();
return - 1;
}
}
/**
* Update object into database
*
* @param User $user that modifies
* @param int $notrigger triggers after, 1=disable triggers
* @param int $forceupdateaffiliate update price on each soc child
* @return int <0 if KO, >0 if OK
*/
function update($user = 0, $notrigger = 0, $forceupdateaffiliate = 0) {
global $conf, $langs;
$error = 0;
// Clean parameters
if (isset($this->entity))
$this->entity = trim($this->entity);
if (isset($this->fk_product))
$this->fk_product = trim($this->fk_product);
if (isset($this->fk_soc))
$this->fk_soc = trim($this->fk_soc);
if (isset($this->price))
$this->price = trim($this->price);
if (isset($this->price_ttc))
$this->price_ttc = trim($this->price_ttc);
if (isset($this->price_min))
$this->price_min = trim($this->price_min);
if (isset($this->price_min_ttc))
$this->price_min_ttc = trim($this->price_min_ttc);
if (isset($this->price_base_type))
$this->price_base_type = trim($this->price_base_type);
if (isset($this->tva_tx))
$this->tva_tx = trim($this->tva_tx);
if (isset($this->recuperableonly))
$this->recuperableonly = trim($this->recuperableonly);
if (isset($this->localtax1_tx))
$this->localtax1_tx = trim($this->localtax1_tx);
if (isset($this->localtax2_tx))
$this->localtax2_tx = trim($this->localtax2_tx);
if (isset($this->fk_user))
$this->fk_user = trim($this->fk_user);
if (isset($this->import_key))
$this->import_key = trim($this->import_key);
// Check parameters
// Put here code to add a control on parameters values
if ($this->price != '' || $this->price == 0) {
if ($this->price_base_type == 'TTC') {
$this->price_ttc = price2num($this->price, 'MU');
$this->price = price2num($this->price) / (1 + ($this->tva_tx / 100));
$this->price = price2num($this->price, 'MU');
if ($this->price_min != '' || $this->price_min == 0) {
$this->price_min_ttc = price2num($this->price_min, 'MU');
$this->price_min = price2num($this->price_min) / (1 + ($this->tva_tx / 100));
$this->price_min = price2num($this->price_min, 'MU');
} else {
$this->price_min = 0;
$this->price_min_ttc = 0;
}
} else {
$this->price = price2num($this->price, 'MU');
$this->price_ttc = ($this->recuperableonly != 1) ? price2num($this->price) * (1 + ($this->tva_tx / 100)) : $this->price;
$this->price_ttc = price2num($this->price_ttc, 'MU');
if ($this->price_min != '' || $this->price_min == 0) {
$this->price_min = price2num($this->price_min, 'MU');
$this->price_min_ttc = price2num($this->price_min) * (1 + ($this->tva_tx / 100));
$this->price_min_ttc = price2num($this->price_min_ttc, 'MU');
// print 'X'.$newminprice.'-'.$price_min;
} else {
$this->price_min = 0;
$this->price_min_ttc = 0;
}
}
}
// Do a copy of current record into log table
// Insert request
$sql = "INSERT INTO " . MAIN_DB_PREFIX . "product_customer_price_log(";
$sql .= "entity,";
$sql .= "datec,";
$sql .= "fk_product,";
$sql .= "fk_soc,";
$sql .= "price,";
$sql .= "price_ttc,";
$sql .= "price_min,";
$sql .= "price_min_ttc,";
$sql .= "price_base_type,";
$sql .= "tva_tx,";
$sql .= "recuperableonly,";
$sql .= "localtax1_tx,";
$sql .= "localtax2_tx,";
$sql .= "fk_user,";
$sql .= "import_key";
$sql .= ") ";
$sql .= "SELECT";
$sql .= " t.entity,";
$sql .= " t.datec,";
$sql .= " t.fk_product,";
$sql .= " t.fk_soc,";
$sql .= " t.price,";
$sql .= " t.price_ttc,";
$sql .= " t.price_min,";
$sql .= " t.price_min_ttc,";
$sql .= " t.price_base_type,";
$sql .= " t.tva_tx,";
$sql .= " t.recuperableonly,";
$sql .= " t.localtax1_tx,";
$sql .= " t.localtax2_tx,";
$sql .= " t.fk_user,";
$sql .= " t.import_key";
$sql .= " FROM " . MAIN_DB_PREFIX . "product_customer_price as t";
$sql .= " WHERE t.rowid = " . $this->id;
$this->db->begin();
dol_syslog(get_class($this) . "::update", LOG_DEBUG);
$resql = $this->db->query($sql);
if (! $resql) {
$error ++;
$this->errors [] = "Error " . $this->db->lasterror();
}
// Update request
$sql = "UPDATE " . MAIN_DB_PREFIX . "product_customer_price SET";
$sql .= " entity=" . $conf->entity . ",";
$sql .= " datec='" . $this->db->idate(dol_now()) . "',";
$sql .= " tms=" . (dol_strlen($this->tms) != 0 ? "'" . $this->db->idate($this->tms) . "'" : 'null') . ",";
$sql .= " fk_product=" . (isset($this->fk_product) ? $this->fk_product : "null") . ",";
$sql .= " fk_soc=" . (isset($this->fk_soc) ? $this->fk_soc : "null") . ",";
$sql .= " price=" . (isset($this->price) ? $this->price : "null") . ",";
$sql .= " price_ttc=" . (isset($this->price_ttc) ? $this->price_ttc : "null") . ",";
$sql .= " price_min=" . (isset($this->price_min) ? $this->price_min : "null") . ",";
$sql .= " price_min_ttc=" . (isset($this->price_min_ttc) ? $this->price_min_ttc : "null") . ",";
$sql .= " price_base_type=" . (isset($this->price_base_type) ? "'" . $this->db->escape($this->price_base_type) . "'" : "null") . ",";
$sql .= " tva_tx=" . (isset($this->tva_tx) ? $this->tva_tx : "null") . ",";
$sql .= " recuperableonly=" . (isset($this->recuperableonly) ? $this->recuperableonly : "null") . ",";
$sql .= " localtax1_tx=" . (isset($this->localtax1_tx) ? $this->localtax1_tx : "null") . ",";
$sql .= " localtax2_tx=" . (isset($this->localtax2_tx) ? $this->localtax2_tx : "null") . ",";
$sql .= " fk_user=" . $user->id . ",";
$sql .= " import_key=" . (isset($this->import_key) ? "'" . $this->db->escape($this->import_key) . "'" : "null") . "";
$sql .= " WHERE rowid=" . $this->id;
dol_syslog(get_class($this) . "::update", LOG_DEBUG);
$resql = $this->db->query($sql);
if (! $resql) {
$error ++;
$this->errors [] = "Error " . $this->db->lasterror();
}
if (! $error) {
if (! $notrigger) {
// Uncomment this and change MYOBJECT to your own tag if you
// want this action calls a trigger.
// // Call triggers
// include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
// $interface=new Interfaces($this->db);
// $result=$interface->run_triggers('MYOBJECT_MODIFY',$this,$user,$langs,$conf);
// if ($result < 0) { $error++; $this->errors=$interface->errors; }
// // End call triggers
}
}
if (! $error) {
$result = $this->setPriceOnAffiliateThirdparty($user, $forceupdateaffiliate);
if ($result < 0) {
$error ++;
}
}
// Commit or rollback
if ($error) {
foreach ( $this->errors as $errmsg ) {
dol_syslog(get_class($this) . "::update " . $errmsg, LOG_ERR);
$this->error .= ($this->error ? ', ' . $errmsg : $errmsg);
}
$this->db->rollback();
return - 1 * $error;
} else {
$this->db->commit();
return 1;
}
}
/**
* Force update price on child price
*
* @param User $user that modifies
* @param int $forceupdateaffiliate update price on each soc child
* @return int <0 if KO, >0 if OK
*/
function setPriceOnAffiliateThirdparty($user, $forceupdateaffiliate) {
$error = 0;
// Find all susidiaries
$sql = "SELECT s.rowid";
$sql .= " FROM " . MAIN_DB_PREFIX . "societe as s";
$sql .= " WHERE s.parent = " . $this->fk_soc;
$sql .= " AND s.entity IN (" . getEntity('societe', 1) . ")";
dol_syslog(get_class($this) . "::setPriceOnAffiliateThirdparty", LOG_DEBUG);
$resql = $this->db->query($sql);
if ($resql) {
$this->lines = array ();
$num = $this->db->num_rows($resql);
while ( ($obj = $this->db->fetch_object($resql)) && (empty($error)) ) {
// find if there is an existing line for the product and the subsidiaries
$prodsocprice = new Productcustomerprice($this->db);
$filter = array (
't.fk_product' => $this->fk_product,'t.fk_soc' => $obj->rowid
);
$result = $prodsocprice->fetch_all('', '', 0, 0, $filter);
if ($result < 0) {
$error ++;
$this->error = $prodsocprice->error;
} else {
// There is one line
if (count($prodsocprice->lines) > 0) {
// If force update => Update
if (! empty($forceupdateaffiliate)) {
$prodsocpriceupd = new Productcustomerprice($this->db);
$prodsocpriceupd->fetch($prodsocprice->lines [0]->id);
$prodsocpriceupd->price = $this->price;
$prodsocpriceupd->price_min = $this->price_min;
$prodsocpriceupd->price_base_type = $this->price_base_type;
$prodsocpriceupd->tva_tx = $this->tva_tx;
$prodsocpriceupd->recuperableonly = $this->recuperableonly;
$resultupd = $prodsocpriceupd->update($user, 0, $forceupdateaffiliate);
if ($result < 0) {
$error ++;
$this->error = $prodsocpriceupd->error;
}
}
} else {
// If line do not exits then create it
$prodsocpricenew = new Productcustomerprice($this->db);
$prodsocpricenew->fk_soc = $obj->rowid;
$prodsocpricenew->fk_product = $this->fk_product;
$prodsocpricenew->price = $this->price;
$prodsocpricenew->price_min = $this->price_min;
$prodsocpricenew->price_base_type = $this->price_base_type;
$prodsocpricenew->tva_tx = $this->tva_tx;
$prodsocpricenew->recuperableonly = $this->recuperableonly;
$resultupd = $prodsocpricenew->create($user, 0, $forceupdateaffiliate);
if ($result < 0) {
$error ++;
$this->error = $prodsocpriceupd->error;
}
}
}
}
$this->db->free($resql);
if (empty($error)) {
return 1;
} else {
return - 1;
}
} else {
$this->error = "Error " . $this->db->lasterror();
return - 1;
}
}
/**
* Delete object in database
*
* @param User $user that deletes
* @param int $notrigger triggers after, 1=disable triggers
* @return int <0 if KO, >0 if OK
*/
function delete($user, $notrigger = 0) {
global $conf, $langs;
$error = 0;
$this->db->begin();
if (! $error) {
if (! $notrigger) {
// Uncomment this and change MYOBJECT to your own tag if you
// want this action calls a trigger.
// // Call triggers
// include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
// $interface=new Interfaces($this->db);
// $result=$interface->run_triggers('MYOBJECT_DELETE',$this,$user,$langs,$conf);
// if ($result < 0) { $error++; $this->errors=$interface->errors; }
// // End call triggers
}
}
if (! $error) {
$sql = "DELETE FROM " . MAIN_DB_PREFIX . "product_customer_price";
$sql .= " WHERE rowid=" . $this->id;
dol_syslog(get_class($this) . "::delete", LOG_DEBUG);
$resql = $this->db->query($sql);
if (! $resql) {
$error ++;
$this->errors [] = "Error " . $this->db->lasterror();
}
}
// Commit or rollback
if ($error) {
foreach ( $this->errors as $errmsg ) {
dol_syslog(get_class($this) . "::delete " . $errmsg, LOG_ERR);
$this->error .= ($this->error ? ', ' . $errmsg : $errmsg);
}
$this->db->rollback();
return - 1 * $error;
} else {
$this->db->commit();
return 1;
}
}
/**
* Load an object from its id and create a new one in database
*
* @param int $fromid of object to clone
* @return int id of clone
*/
function createFromClone($fromid) {
global $user, $langs;
$error = 0;
$object = new Productcustomerprice($this->db);
$object->context['createfromclone']='createfromclone';
$this->db->begin();
// Load source object
$object->fetch($fromid);
$object->id = 0;
$object->statut = 0;
// Clear fields
// ...
// Create clone
$result = $object->create($user);
// Other options
if ($result < 0) {
$this->error = $object->error;
$error ++;
}
if (! $error) {
}
unset($object->context['createfromclone']);
// End
if (! $error) {
$this->db->commit();
return $object->id;
} else {
$this->db->rollback();
return - 1;
}
}
/**
* Initialise object with example values
* Id must be 0 if object instance is a specimen
*
* @return void
*/
function initAsSpecimen() {
$this->id = 0;
$this->entity = '';
$this->datec = '';
$this->tms = '';
$this->fk_product = '';
$this->fk_soc = '';
$this->price = '';
$this->price_ttc = '';
$this->price_min = '';
$this->price_min_ttc = '';
$this->price_base_type = '';
$this->tva_tx = '';
$this->recuperableonly = '';
$this->localtax1_tx = '';
$this->localtax2_tx = '';
$this->fk_user = '';
$this->import_key = '';
}
}
/**
* File of class to manage predefined price products or services by customer lines
*/
class PriceByCustomerLine
{
var $id;
var $entity;
var $datec = '';
var $tms = '';
var $fk_product;
var $fk_soc;
var $price;
var $price_ttc;
var $price_min;
var $price_min_ttc;
var $price_base_type;
var $tva_tx;
var $recuperableonly;
var $localtax1_tx;
var $localtax2_tx;
var $fk_user;
var $import_key;
var $socname;
var $prodref;
}