Skip to content

Commit

Permalink
Add insert, update and delete methods to line class
Browse files Browse the repository at this point in the history
Cleanup properties
Add insert, line and delete methods
  • Loading branch information
fappels committed Oct 15, 2017
1 parent 51264d4 commit 907ae36
Showing 1 changed file with 345 additions and 9 deletions.
354 changes: 345 additions & 9 deletions htdocs/expedition/class/expedition.class.php
Expand Up @@ -2235,13 +2235,30 @@ public static function replaceThirdparty(DoliDB $db, $origin_id, $dest_id)
*/
class ExpeditionLigne extends CommonObjectLine
{
var $db;
public $element='expeditiondet';
public $table_element='expeditiondet';

public $fk_origin_line;

/**
* Id of shipment
* @var int
*/
public $fk_expedition;

var $db;

// From llx_expeditiondet
var $qty;
var $qty_shipped;
var $fk_product;
var $detail_batch;
/**
* Id of warehouse
* @var int
*/
public $entrepot_id;


// From llx_commandedet or llx_propaldet
var $qty_asked;
Expand All @@ -2258,10 +2275,7 @@ class ExpeditionLigne extends CommonObjectLine
var $total_localtax1; // Total Local tax 1
var $total_localtax2; // Total Local tax 2

public $element='expeditiondet';
public $table_element='expeditiondet';

public $fk_origin_line;


// Deprecated
/**
Expand All @@ -2280,15 +2294,337 @@ class ExpeditionLigne extends CommonObjectLine
*/
var $libelle;

/**
* Constructor
*
* @param DoliDB $db Database handler
*/
function __construct($db)
{
$this->db=$db;
}

/**
* Constructor
* Insert line into database
*
* @param DoliDB $db Database handler
* @param User $user User that modify
* @param int $notrigger 1 = disable triggers
* @return int <0 if KO, line id >0 if OK
*/
function __construct($db)
function insert($user=null, $notrigger=0)
{
$this->db=$db;
global $langs, $conf;

$error=0;

// Check parameters
if (empty($this->fk_expedition) || empty($this->fk_origin_line) || empty($this->qty))
{
$this->errors[] = 'ErrorMandatoryParametersNotProvided';
return -1;
}
// Clean parameters
if (empty($this->entrepot_id)) $this->entrepot_id='null';

$this->db->begin();

$sql = "INSERT INTO ".MAIN_DB_PREFIX."expeditiondet (";
$sql.= "fk_expedition";
$sql.= ", fk_entrepot";
$sql.= ", fk_origin_line";
$sql.= ", qty";
$sql.= ") VALUES (";
$sql.= $this->id;
$sql.= ", ".$this->entrepot_id;
$sql.= ", ".$this->origin_line_id;
$sql.= ", ".$this->qty;
$sql.= ")";

dol_syslog(get_class($this)."::insert", LOG_DEBUG);
$resql = $this->db->query($sql);
if ($resql)
{
$this->id = $this->db->last_insert_id(MAIN_DB_PREFIX."expeditiondet");
if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) // For avoid conflicts if trigger used
{
$this->id=$this->rowid;
$result=$this->insertExtraFields();
if ($result < 0)
{
$error++;
}
}

if (! $error && ! $notrigger)
{
// Call trigger
$result=$this->call_trigger('LINESHIPMENT_INSERT',$user);
if ($result < 0) $error++;
// End call triggers
}

if (!$error) {
$this->db->commit();
return $this->id;
}

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
{
$error++;
}

if (! $error && empty($conf->global->MAIN_EXTRAFIELDS_DISABLED) && is_array($array_options) && count($array_options)>0) // For avoid conflicts if trigger used
{
$expeditionline = new ExpeditionLigne($this->db);
$expeditionline->array_options=$array_options;
$expeditionline->id= $this->db->last_insert_id(MAIN_DB_PREFIX.$expeditionline->table_element);
$result=$expeditionline->insertExtraFields();
if ($result < 0)
{
$this->error[]=$expeditionline->error;
$error++;
}
}

if (! $error) return $line_id;
else return -1;

// ////////////////////

dol_syslog(get_class($this)."::insert", LOG_DEBUG);
$resql=$this->db->query($sql);
if ($resql)
{
$this->rowid=$this->db->last_insert_id(MAIN_DB_PREFIX.'commandedet');


}
else
{
$this->error=$this->db->error();
$this->db->rollback();
return -2;
}
}

/**
* Delete shipment line.
*
* @return int >0 if OK, <0 if KO
*/
function delete()
{
global $conf;

$this->db->begin();

// delete batch expedition line
if ($conf->productbatch->enabled)
{
$sql = "DELETE FROM ".MAIN_DB_PREFIX."expeditiondet_batch";
$sql.= " WHERE fk_expeditiondet = ".$this->id;

if (!$this->db->query($sql))
{
$this->errors[]=$this->db->lasterror()." - sql=$sql";
$this->db->rollback();
return -2;
}
}

$sql = "DELETE FROM ".MAIN_DB_PREFIX."expeditiondet";
$sql.= " WHERE rowid = ".$this->id;

if ( $this->db->query($sql))
{
// Remove extrafields
if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) // For avoid conflicts if trigger used
{
$result=$this->deleteExtraFields();
if ($result < 0)
{
$this->errors[]=$this->error;
$this->db->rollback();
return -4;
}
else
{
$this->db->commit();
return 1;
}
}
else
{
$this->db->commit();
return 1;
}
}
else
{
$this->errors[]=$this->db->lasterror()." - sql=$sql";
$this->db->rollback();
return -3;
}
}

/**
* Update a line in database
*
* @return int < 0 if KO, > 0 if OK
*/
function update()
{
global $conf;

dol_syslog(get_class($this)."::update id=$this->id, entrepot_id=$this->entrepot_id, product_id=$this->fk_product, qty=$this->qty");

// Add a protection to refuse deleting if shipment is not in draft status
if (! isset($this->id) || ! isset($this->entrepot_id))
{
dol_syslog(get_class($this).'::update missing line id and/or warehouse id', LOG_ERR);
$this->errors[]='ErrorBadParameters';
return -1;
}

$this->db->begin();

// Clean parameters
if (empty($this->qty)) $this->qty=0;
$qty=price2num($this->qty);
$remainingQty = 0;
$batch = null;
$batch_id = null;
if (is_array($this->detail_batch))
{
if (count($this->detail_batch) > 1)
{
dol_syslog(get_class($this).'::update only possible for one batch', LOG_ERR);
$this->errors[]='ErrorBadParameters';
return -7;
}
else
{
$batch = $this->detail_batch[0]->batch;
$batch_id = $this->detail_batch[0]->fk_origin_stock;
}
}
else
{
$batch = $this->detail_batch->batch;
$batch_id = $this->detail_batch->fk_origin_stock;
}

// update lot

if (!empty($batch) && $conf->productbatch->enabled)
{
if (empty($batch_id) || empty($this->fk_product)) {
dol_syslog(get_class($this).'::update missing fk_origin_stock (batch_id) and/or fk_product', LOG_ERR);
$this->errors[]='ErrorBadParameters';
return -8;
}

// fetch remaining lot qty
require_once DOL_DOCUMENT_ROOT.'/expedition/class/expeditionbatch.class.php';
if (($lotArray = ExpeditionLineBatch::fetchAll($this->db, $this->id)) < 0)
{
$this->errors[]=$this->db->lasterror()." - ExpeditionLineBatch::fetchAll";
$this->db->rollback();
return -4;
}
foreach ($lotArray as $lot)
{
if ($batch != $lot->batch)
{
$remainingQty += $lot->dluo_qty;
}
}

//fetch lot details

// fetch from product_lot
require_once DOL_DOCUMENT_ROOT.'/product/stock/class/productlot.class.php';
$lot = new Productlot($this->db);
if ($lot->fetch(0,$this->fk_product,$batch) < 0)
{
$this->errors[] = $lot->errors;
return -3;
}

// delete lot expedition line
$sql = "DELETE FROM ".MAIN_DB_PREFIX."expeditiondet_batch";
$sql.= " WHERE fk_expeditiondet = ".$this->id;
$sql.= " AND batch = '".$this->db->escape($batch)."'";

if (!$this->db->query($sql))
{
$this->errors[]=$this->db->lasterror()." - sql=$sql";
$this->db->rollback();
return -2;
}

if ($qty > 0) {
if (isset($lot->id))
{
$shipmentLot = new ExpeditionLineBatch($this->db);
$shipmentLot->batch = $lot->batch;
$shipmentLot->eatby = $lot->eatby;
$shipmentLot->sellby = $lot->sellby;
$shipmentLot->entrepot_id = $this->entrepot_id;
$shipmentLot->dluo_qty = $qty;
$shipmentLot->fk_origin_stock = $batch_id;
if ($shipmentLot->create($this->id) < 0)
{
$this->errors[]=$shipmentLot->errors;
$this->db->rollback();
return -6;
}
}
}
}

// update line
$sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element." SET";
$sql.= " fk_entrepot = ".$this->entrepot_id;
$sql.= " , qty = ".($qty + $remainingQty);
$sql.= " WHERE rowid = ".$this->id;

if (!$this->db->query($sql))
{
$this->errors[]=$this->db->lasterror()." - sql=$sql";
$this->db->rollback();
return -5;
}

if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) // For avoid conflicts if trigger used
{
$this->id=$this->rowid;
$result=$this->insertExtraFields();
if ($result < 0)
{
$this->errors[]=$this->error;
$this->db->rollback();
return -4;
}
else
{
$this->db->commit();
return 1;
}
}
else
{
$this->db->commit();
return 1;
}
}
}

0 comments on commit 907ae36

Please sign in to comment.