New: early development of multi-company module

This commit is contained in:
Regis Houssin 2009-04-30 09:37:55 +00:00
parent 432632a6e9
commit d4f8716a89
13 changed files with 245 additions and 124 deletions

View File

@ -1,7 +1,8 @@
<?php
/* Copyright (C) 2002-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2004-2007 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2005 Marc Barilley / Ocebo <marc@ocebo.com>
/* Copyright (C) 2002-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2004-2007 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2005 Marc Barilley / Ocebo <marc@ocebo.com>
* Copyright (C) 2005-2009 Regis Houssin <regis@dolibarr.fr>
*
* 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
@ -42,12 +43,12 @@ class PaiementFourn
var $amount;
var $total;
var $author;
var $paiementid; // Type de paiement. Stock� dans fk_paiement
// de llx_paiement qui est li� aux types de
var $paiementid; // Type de paiement. Stocke dans fk_paiement
// de llx_paiement qui est lie aux types de
//paiement de llx_c_paiement
var $num_paiement; // Num�ro du CHQ, VIR, etc...
var $num_paiement; // Numero du CHQ, VIR, etc...
var $bank_account; // Id compte bancaire du paiement
var $bank_line; // Id de la ligne d'�criture bancaire
var $bank_line; // Id de la ligne d'ecriture bancaire
var $note;
var $statut; //Status of payment. 0 = unvalidated; 1 = validated
// fk_paiement dans llx_paiement est l'id du type de paiement (7 pour CHQ, ...)
@ -57,7 +58,7 @@ class PaiementFourn
/**
* \brief Constructeur de la classe
* \param DB handler acc�s base de donn�es
* \param DB handler acces base de donnees
*/
function PaiementFourn($DB)
@ -210,9 +211,9 @@ class PaiementFourn
/**
* \brief Supprime un paiement ainsi que les lignes qu'il a g�n�r� dans comptes
* Si le paiement porte sur un �criture compte qui est rapproch�e, on refuse
* Si le paiement porte sur au moins une facture � "pay�e", on refuse
* \brief Supprime un paiement ainsi que les lignes qu'il a genere dans comptes
* Si le paiement porte sur un ecriture compte qui est rapprochee, on refuse
* Si le paiement porte sur au moins une facture a "payee", on refuse
* \return int <0 si ko, >0 si ok
*/
function delete()
@ -221,14 +222,14 @@ class PaiementFourn
$this->db->begin();
// V�rifier si paiement porte pas sur une facture � l'�tat pay�e
// Verifier si paiement porte pas sur une facture a l'etat payee
// Si c'est le cas, on refuse la suppression
$billsarray=$this->getBillsArray('paye=1');
if (is_array($billsarray))
{
if (sizeof($billsarray))
{
$this->error='Impossible de supprimer un paiement portant sur au moins une facture � l\'�tat pay�';
$this->error='Impossible de supprimer un paiement portant sur au moins une facture a l\'etat paye';
$this->db->rollback();
return -1;
}
@ -239,7 +240,7 @@ class PaiementFourn
return -2;
}
// V�rifier si paiement ne porte pas sur ecriture bancaire rapproch�e
// Verifier si paiement ne porte pas sur ecriture bancaire rapprochee
// Si c'est le cas, on refuse le delete
if ($bank_line_id)
{
@ -247,7 +248,7 @@ class PaiementFourn
$accline->fetch($bank_line_id);
if ($accline->rappro)
{
$this->error='Impossible de supprimer un paiement qui a g�n�r� une �criture qui a �t� rapproch�e';
$this->error='Impossible de supprimer un paiement qui a genere une ecriture qui a ete rapprochee';
$this->db->rollback();
return -3;
}
@ -269,7 +270,7 @@ class PaiementFourn
return -3;
}
// Supprimer l'�criture bancaire si paiement li� � �criture
// Supprimer l'ecriture bancaire si paiement lie a ecriture
if ($bank_line_id)
{
$accline = new AccountLine($this->db);
@ -294,7 +295,7 @@ class PaiementFourn
}
/**
* \brief Mise a jour du lien entre le paiement et la ligne g�n�r�e dans llx_bank
* \brief Mise a jour du lien entre le paiement et la ligne generee dans llx_bank
* \param id_bank Id compte bancaire
*/
function update_fk_bank($id_bank)
@ -413,8 +414,8 @@ class PaiementFourn
}
/**
* \brief Retourne le libell� du statut d'une facture (brouillon, valid�e, abandonn�e, pay�e)
* \param mode 0=libell� long, 1=libell� court, 2=Picto + Libell� court, 3=Picto, 4=Picto + Libell� long, 5=Libell� court + Picto
* \brief Retourne le libelle du statut d'une facture (brouillon, validee, abandonnee, payee)
* \param mode 0=libelle long, 1=libelle court, 2=Picto + Libelle court, 3=Picto, 4=Picto + Libelle long, 5=Libelle court + Picto
* \return string Libelle
*/
function getLibStatut($mode=0)
@ -423,10 +424,10 @@ class PaiementFourn
}
/**
* \brief Renvoi le libell� d'un statut donne
* \brief Renvoi le libelle d'un statut donne
* \param status Statut
* \param mode 0=libell� long, 1=libell� court, 2=Picto + Libell� court, 3=Picto, 4=Picto + Libell� long, 5=Libell� court + Picto
* \return string Libell� du statut
* \param mode 0=libelle long, 1=libelle court, 2=Picto + Libelle court, 3=Picto, 4=Picto + Libelle long, 5=Libelle court + Picto
* \return string Libelle du statut
*/
function LibStatut($status,$mode=0)
{
@ -485,7 +486,7 @@ class PaiementFourn
$text=$this->ref; // Sometimes ref contains label
if (eregi('^\((.*)\)$',$text,$reg))
{
// Label générique car entre parenthèses. On l'affiche en le traduisant
// Label g诩rique car entre parenth粥s. On l'affiche en le traduisant
if ($reg[1]=='paiement') $reg[1]='Payment';
$text=$langs->trans($reg[1]);
}
@ -505,7 +506,9 @@ class PaiementFourn
{
if(!empty($num) && $this->statut!=1)
{
$sql = 'UPDATE '.MAIN_DB_PREFIX.'paiementfourn SET num_paiement = \''.$this->db->escape($num).'\' WHERE rowid = '.$this->id;
$sql = "UPDATE ".MAIN_DB_PREFIX."paiementfourn";
$sql.= " SET num_paiement = '".$this->db->escape($num)."'";
$sql.= " WHERE rowid = ".$this->id;
dol_syslog("PaiementFourn::update_num sql=".$sql);
$result = $this->db->query($sql);
@ -532,7 +535,10 @@ class PaiementFourn
{
if(!empty($date) && $this->statut!=1)
{
$sql = 'UPDATE '.MAIN_DB_PREFIX.'paiementfourn SET datep = '.$this->db->idate($date).' WHERE rowid = '.$this->id;
$sql = "UPDATE ".MAIN_DB_PREFIX."paiementfourn";
$sql.= " SET datep = ".$this->db->idate($date);
$sql.= " WHERE rowid = ".$this->id;
dol_syslog("PaiementFourn::update_date sql=".$sql);
$result = $this->db->query($sql);
if ($result)

View File

@ -82,13 +82,14 @@ class CommandeFournisseur extends Commande
global $conf;
$sql = "SELECT c.rowid, c.ref, c.date_creation, c.fk_soc, c.fk_user_author, c.fk_statut, c.amount_ht, c.total_ht, c.total_ttc, c.tva,";
$sql .= " ".$this->db->pdate("c.date_commande")." as date_commande, c.fk_projet as fk_project, c.remise_percent, c.source, c.fk_methode_commande,";
$sql .= " c.note, c.note_public, c.model_pdf,";
$sql .= " cm.libelle as methode_commande";
$sql .= " FROM ".MAIN_DB_PREFIX."commande_fournisseur as c";
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_methode_commande_fournisseur as cm ON cm.rowid = c.fk_methode_commande";
if ($ref) $sql.= " WHERE c.ref='".$ref."'";
else $sql.= " WHERE c.rowid=".$id;
$sql.= " ".$this->db->pdate("c.date_commande")." as date_commande, c.fk_projet as fk_project, c.remise_percent, c.source, c.fk_methode_commande,";
$sql.= " c.note, c.note_public, c.model_pdf,";
$sql.= " cm.libelle as methode_commande";
$sql.= " FROM ".MAIN_DB_PREFIX."commande_fournisseur as c";
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."c_methode_commande_fournisseur as cm ON cm.rowid = c.fk_methode_commande";
$sql.= " WHERE c.entity = ".$conf->entity;
if ($ref) $sql.= " AND c.ref='".$ref."'";
else $sql.= " AND c.rowid=".$id;
dol_syslog("CommandeFournisseur::fetch sql=".$sql,LOG_DEBUG);
$resql = $this->db->query($sql) ;
@ -255,8 +256,8 @@ class CommandeFournisseur extends Commande
}
$sql = 'UPDATE '.MAIN_DB_PREFIX."commande_fournisseur";
$sql.= " SET ref='$num', fk_statut = 1, date_valid=".$this->db->idate(mktime()).", fk_user_valid=$user->id";
$sql.= " WHERE rowid = $this->id AND fk_statut = 0";
$sql.= " SET ref='".$num."', fk_statut = 1, date_valid=".$this->db->idate(mktime()).", fk_user_valid = ".$user->id;
$sql.= " WHERE rowid = ".$this->id." AND fk_statut = 0";
$resql=$this->db->query($sql);
if ($resql)
@ -364,8 +365,8 @@ class CommandeFournisseur extends Commande
/**
* \brief Retourne le libell<EFBFBD> du statut d'une commande (brouillon, valid<EFBFBD>e, abandonn<EFBFBD>e, pay<EFBFBD>e
* \param mode 0=libell<EFBFBD> long, 1=libell<EFBFBD> court, 2=Picto + Libell<EFBFBD> court, 3=Picto, 4=Picto + Libell<EFBFBD> long
* \brief Retourne le libelle du statut d'une commande (brouillon, validee, abandonnee, payee
* \param mode 0=libelle long, 1=libelle court, 2=Picto + Libelle court, 3=Picto, 4=Picto + Libelle long
* \return string Libelle
*/
function getLibStatut($mode=0)
@ -374,10 +375,10 @@ class CommandeFournisseur extends Commande
}
/**
* \brief Renvoi le libell<EFBFBD> d'un statut donn<EFBFBD>
* \brief Renvoi le libelle d'un statut donne
* \param statut Id statut
* \param mode 0=libell<EFBFBD> long, 1=libell<EFBFBD> court, 2=Picto + Libell<EFBFBD> court, 3=Picto, 4=Picto + Libell<EFBFBD> long, 5=Libell<EFBFBD> court + Picto
* \return string Libell<EFBFBD> du statut
* \param mode 0=libelle long, 1=libelle court, 2=Picto + Libelle court, 3=Picto, 4=Picto + Libelle long, 5=Libelle court + Picto
* \return string Libelle du statut
*/
function LibStatut($statut,$mode=0)
{
@ -705,8 +706,26 @@ class CommandeFournisseur extends Commande
/* On positionne en mode brouillon la commande */
$this->brouillon = 1;
$sql = "INSERT INTO ".MAIN_DB_PREFIX."commande_fournisseur (ref, fk_soc, date_creation, fk_user_author, fk_statut, source, model_pdf) ";
$sql .= " VALUES ('',".$this->socid.", ".$this->db->idate(mktime()).", ".$user->id.",0,0,'".$conf->global->COMMANDE_SUPPLIER_ADDON_PDF."')";
$sql = "INSERT INTO ".MAIN_DB_PREFIX."commande_fournisseur (";
$sql.= "ref";
$sql.= ", entity";
$sql.= ", fk_soc";
$sql.= ", date_creation";
$sql.= ", fk_user_author";
$sql.= ", fk_statut";
$sql.= ", source";
$sql.= ", model_pdf";
$sql.= ") ";
$sql.= " VALUES (";
$sql.= "''";
$sql.= ", ".$conf->entity;
$sql.= ", ".$this->socid;
$sql.= ", ".$this->db->idate(mktime());
$sql.= ", ".$user->id;
$sql.= ", 0";
$sql.= ", 0";
$sql.= ", '".$conf->global->COMMANDE_SUPPLIER_ADDON_PDF."'";
$sql.= ")";
dol_syslog("CommandeFournisseur::Create sql=".$sql);
if ( $this->db->query($sql) )
@ -940,7 +959,7 @@ class CommandeFournisseur extends Commande
{
$error = -1;
}
// Si module stock g<EFBFBD>r<EFBFBD> et que expedition faite depuis un entrepot
// Si module stock gere et que expedition faite depuis un entrepot
if (!$error && $conf->stock->enabled && $entrepot)
{
$mouv = new MouvementStock($this->db);
@ -1059,8 +1078,9 @@ class CommandeFournisseur extends Commande
*/
function get_methodes_commande()
{
$sql = "SELECT rowid, libelle FROM ".MAIN_DB_PREFIX."c_methode_commande_fournisseur";
$sql .= " WHERE active = 1";
$sql = "SELECT rowid, libelle";
$sql.= " FROM ".MAIN_DB_PREFIX."c_methode_commande_fournisseur";
$sql.= " WHERE active = 1";
if ($this->db->query($sql))
{
@ -1109,7 +1129,7 @@ class CommandeFournisseur extends Commande
$sql = "UPDATE ".MAIN_DB_PREFIX."commande_fournisseur";
$sql.= " SET fk_statut = ".$statut;
$sql.= " WHERE rowid = ".$this->id;
$sql.= " AND (fk_statut = 3 OR fk_statut = 4)";
$sql.= " AND fk_statut IN (3,4)";
dol_syslog("CommandeFournisseur::Livraison sql=".$sql);
$resql=$this->db->query($sql);
@ -1141,9 +1161,9 @@ class CommandeFournisseur extends Commande
return $result ;
}
/** \brief Cr<EFBFBD><EFBFBD> la commande depuis une propale existante
\param user Utilisateur qui cr<EFBFBD>e
\param propale_id id de la propale qui sert de mod<EFBFBD>le
/** \brief Cree la commande depuis une propale existante
\param user Utilisateur qui cree
\param propale_id id de la propale qui sert de modele
*/
function updateFromCommandeClient($user, $idc, $comclientid)
{
@ -1219,13 +1239,16 @@ class CommandeFournisseur extends Commande
*/
function ReadApprobators()
{
global $conf;
$this->approbs = array();
$sql = "SELECT u.name, u.firstname, u.email";
$sql .= " FROM ".MAIN_DB_PREFIX."user as u";
$sql .= " , ".MAIN_DB_PREFIX."user_rights as ur";
$sql .= " WHERE u.rowid = ur.fk_user";
$sql .= " AND ur.fk_id = 184";
$sql.= " FROM ".MAIN_DB_PREFIX."user as u";
$sql.= " , ".MAIN_DB_PREFIX."user_rights as ur";
$sql.= " WHERE u.rowid = ur.fk_user";
$sql.= " AND u.entity = ".$conf->entity;
$sql.= " AND ur.fk_id = 184";
$resql = $this->db->query($sql);
if ($resql)
@ -1345,18 +1368,24 @@ class CommandeFournisseur extends Commande
/**
* \brief Initialise la commande avec valeurs fictives al<EFBFBD>atoire
* Sert <EFBFBD> g<EFBFBD>n<EFBFBD>rer une commande pour l'aperu des mod<EFBFBD>les ou demo
* \brief Initialise la commande avec valeurs fictives aleatoire
* Sert a generer une commande pour l'aperu des modeles ou demo
*/
function initAsSpecimen()
{
global $user,$langs;
global $user,$langs,$conf;
dol_syslog("CommandeFournisseur::initAsSpecimen");
// Charge tableau des id de soci<EFBFBD>t<EFBFBD> socids
// Charge tableau des id de societe socids
$socids = array();
$sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."societe WHERE fournisseur=1 LIMIT 10";
$sql = "SELECT rowid";
$sql.= " FROM ".MAIN_DB_PREFIX."societe";
$sql.= " WHERE fournisseur=1";
$sql.= " AND entity = ".$conf->entity;
$sql.= " LIMIT 10";
$resql = $this->db->query($sql);
if ($resql)
{
@ -1373,7 +1402,12 @@ class CommandeFournisseur extends Commande
// Charge tableau des produits prodids
$prodids = array();
$sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."product WHERE envente=1";
$sql = "SELECT rowid";
$sql.= " FROM ".MAIN_DB_PREFIX."product";
$sql.= " WHERE envente = 1";
$sql.= " AND entity = ".$conf->entity;
$resql = $this->db->query($sql);
if ($resql)
{
@ -1387,7 +1421,7 @@ class CommandeFournisseur extends Commande
}
}
// Initialise param<EFBFBD>tres
// Initialise parametres
$this->id=0;
$this->ref = 'SPECIMEN';
$this->specimen=1;

View File

@ -107,7 +107,7 @@ class FactureFournisseur extends Facture
*/
function create($user)
{
global $langs;
global $langs,$conf;
// Clear parameters
if (empty($this->date)) $this->date=gmmktime();
@ -122,13 +122,29 @@ class FactureFournisseur extends Facture
if (! $remise) $remise = 0 ;
$totalht = ($amount - $remise);
$sql = 'INSERT INTO '.MAIN_DB_PREFIX.'facture_fourn (facnumber, libelle, fk_soc, datec, datef,';
$sql.= ' note, note_public, fk_user_author, date_lim_reglement) ';
$sql.= " VALUES ('".addslashes($number)."','".addslashes($this->libelle)."',";
$sql.= " ".$this->socid.", ".$this->db->idate(gmmktime()).",'".$this->db->idate($this->date)."',";
$sql.= " '".addslashes($this->note)."',";
$sql.= " '".addslashes($this->note_public)."',";
$sql.= " ".$user->id.",'".$this->db->idate($this->date_echeance)."');";
$sql = "INSERT INTO ".MAIN_DB_PREFIX."facture_fourn (";
$sql.= "facnumber";
$sql.= ", entity";
$sql.= ", libelle";
$sql.= ", fk_soc";
$sql.= ", datec";
$sql.= ", datef";
$sql.= ", note";
$sql.= ", note_public";
$sql.= ", fk_user_author";
$sql.= ", date_lim_reglement";
$sql.= ")";
$sql.= " VALUES (";
$sql.= "'".addslashes($number)."'";
$sql.= ", ".$conf->entity;
$sql.= ", '".addslashes($this->libelle)."'";
$sql.= ", ".$this->socid;
$sql.= ", ".$this->db->idate(gmmktime());
$sql.= ", '".$this->db->idate($this->date)."'";
$sql.= ", '".addslashes($this->note)."'";
$sql.= ", '".addslashes($this->note_public)."'";
$sql.= ", ".$user->id.",'".$this->db->idate($this->date_echeance)."'";
$sql.= ")";
dol_syslog("FactureFournisseur::create sql=".$sql, LOG_DEBUG);
$resql=$this->db->query($sql);
@ -377,8 +393,8 @@ class FactureFournisseur extends Facture
/**
* \brief Tag la facture comme pay<EFBFBD>e compl<EFBFBD>tement
* \param user Objet utilisateur qui modifie l'<EFBFBD>tat
* \brief Tag la facture comme payee completement
* \param user Objet utilisateur qui modifie l'etat
* \return int <0 si ko, >0 si ok
*/
function set_payed($user)
@ -386,6 +402,7 @@ class FactureFournisseur extends Facture
$sql = 'UPDATE '.MAIN_DB_PREFIX.'facture_fourn';
$sql.= ' SET paye = 1';
$sql.= ' WHERE rowid = '.$this->id;
$resql = $this->db->query($sql);
if (! $resql)
{
@ -409,8 +426,8 @@ class FactureFournisseur extends Facture
$this->db->begin();
$sql = "UPDATE ".MAIN_DB_PREFIX."facture_fourn";
$sql.= " SET fk_statut = 1, fk_user_valid = ".$user->id;
$sql.= " WHERE rowid = ".$this->id;
$sql.= " SET fk_statut = 1, fk_user_valid = ".$user->id;
$sql.= " WHERE rowid = ".$this->id;
dol_syslog("FactureFournisseur::set_valid sql=".$sql, LOG_DEBUG);
$resql = $this->db->query($sql);
@ -660,7 +677,7 @@ class FactureFournisseur extends Facture
$this->user_validation = $vuser;
}
$this->date_creation = $obj->datec;
//$this->date_validation = $obj->datev; \todo La date de validation n'est pas encore g<EFBFBD>r<EFBFBD>e
//$this->date_validation = $obj->datev; \todo La date de validation n'est pas encore geree
}
$this->db->free($result);
}
@ -685,12 +702,10 @@ class FactureFournisseur extends Facture
$this->nbtodo=$this->nbtodolate=0;
$sql = 'SELECT ff.rowid, ff.date_lim_reglement as datefin';
$sql.= ' FROM '.MAIN_DB_PREFIX.'facture_fourn as ff';
$sql.= ', '.MAIN_DB_PREFIX.'societe as s';
if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
$sql.= ' WHERE ff.paye=0';
$sql.= ' AND ff.fk_statut > 0';
$sql.= " AND ff.fk_soc = s.rowid";
$sql.= " AND s.entity = ".$conf->entity;
$sql.= " AND ff.entity = ".$conf->entity;
if ($user->societe_id) $sql.=' AND ff.fk_soc = '.$user->societe_id;
if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= " AND ff.fk_soc = sc.fk_soc AND sc.fk_user = ".$user->id;
@ -739,16 +754,22 @@ class FactureFournisseur extends Facture
/**
* \brief Initialise la facture avec valeurs fictives al<EFBFBD>atoire
* Sert <EFBFBD> g<EFBFBD>n<EFBFBD>rer une facture pour l'aperu des mod<EFBFBD>les ou demo
* \brief Initialise la facture avec valeurs fictives aleatoire
* Sert a generer une facture pour l'aperu des modeles ou demo
*/
function initAsSpecimen()
{
global $user,$langs;
global $user,$langs,$conf;
// Charge tableau des id de societe socids
$socids = array();
$sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."societe WHERE fournisseur=1 LIMIT 10";
$sql = "SELECT rowid";
$sql.= " FROM ".MAIN_DB_PREFIX."societe";
$sql.= " WHERE fournisseur = 1";
$sql.= " AND entity = ".$conf->entity;
$sql.= " LIMIT 10";
$resql = $this->db->query($sql);
if ($resql)
{
@ -765,7 +786,12 @@ class FactureFournisseur extends Facture
// Charge tableau des produits prodids
$prodids = array();
$sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."product WHERE envente=1";
$sql = "SELECT rowid";
$sql.= " FROM ".MAIN_DB_PREFIX."product";
$sql.= " WHERE envente = 1";
$sql.= " AND entity = ".$conf->entity;
$resql = $this->db->query($sql);
if ($resql)
{

View File

@ -1,6 +1,7 @@
<?php
/* Copyright (C) 2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2006 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2009 Regis Houssin <regis@dolibarr.fr>
*
* 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
@ -144,10 +145,13 @@ class ProductFournisseur extends Product
*/
function remove_product_fournisseur_price($rowid)
{
global $conf;
$this->db->begin();
$sql = "DELETE FROM ".MAIN_DB_PREFIX."product_fournisseur_price";
$sql.= " WHERE rowid = ".$rowid;
dol_syslog("ProductFournisseur::remove_product_fournisseur_price sql=".$sql);
$resql = $this->db->query($sql);
if ($resql)
@ -157,6 +161,8 @@ class ProductFournisseur extends Product
$sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur as pf";
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product_fournisseur_price as pfp ON pfp.fk_product_fournisseur = pf.rowid";
$sql.= " WHERE pfp.rowid IS NULL";
$sql.= " AND pf.entity = ".$conf->entity;
dol_syslog("ProductFournisseur::remove_product_fournisseur_price sql=".$sql);
$resql = $this->db->query($sql);
if ($resql)
@ -169,6 +175,7 @@ class ProductFournisseur extends Product
$sql = "DELETE FROM ".MAIN_DB_PREFIX."product_fournisseur";
$sql.= " WHERE rowid = ".$rowidpf;
dol_syslog("ProductFournisseur::remove_product_fournisseur_price sql=".$sql);
$resql2 = $this->db->query($sql);
if (! $resql2)
@ -331,13 +338,16 @@ class ProductFournisseur extends Product
*/
function UpdateBuyPriceByFournRef($id_fourn, $product_fourn_ref, $qty, $buyprice, $user, $price_base_type='HT')
{
global $conf;
$result=0;
// Recherche id produit pour cette ref et fournisseur
$sql = "SELECT fk_product";
$sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur";
$sql.= " WHERE fk_soc ='".$id_fourn."'";
$sql.= " AND ref_fourn='".$product_fourn_ref."'";
$sql.= " WHERE fk_soc = '".$id_fourn."'";
$sql.= " AND ref_fourn = '".$product_fourn_ref."'";
$sql.= " AND entity = ".$conf->entity;
if ($this->db->query($sql))
{
@ -360,10 +370,13 @@ class ProductFournisseur extends Product
*/
function fetch_fourn_data($fournid)
{
global $conf;
$sql = "SELECT rowid, ref_fourn";
$sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur ";
$sql.= " WHERE fk_product = ".$this->id;
$sql.= " AND fk_soc = ".$fournid;
$sql.= " AND entity = ".$conf->entity;
dol_syslog("Product::fetch_fourn_data sql=".$sql);
$result = $this->db->query($sql) ;
@ -391,8 +404,10 @@ class ProductFournisseur extends Product
{
$sql = "SELECT pfp.rowid, pfp.price, pfp.quantity, pfp.unitprice";
$sql.= ", pf.rowid as product_fourn_id, pf.fk_soc, pf.ref_fourn, pf.fk_product";
$sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur_price as pfp, ".MAIN_DB_PREFIX."product_fournisseur as pf";
$sql.= " WHERE pfp.rowid = ".$rowid." AND pf.rowid = pfp.fk_product_fournisseur";
$sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur_price as pfp";
$sql.= ", ".MAIN_DB_PREFIX."product_fournisseur as pf";
$sql.= " WHERE pfp.rowid = ".$rowid;
$sql.= " AND pf.rowid = pfp.fk_product_fournisseur";
dol_syslog("Product::fetch_product_fournisseur_price sql=".$sql, LOG_DEBUG);
$resql = $this->db->query($sql) ;

View File

@ -1,6 +1,6 @@
<?php
/* Copyright (C) 2005-2008 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2005-2006 Regis Houssin <regis@dolibarr.fr>
* Copyright (C) 2005-2009 Regis Houssin <regis@dolibarr.fr>
*
* 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
@ -21,7 +21,7 @@
/**
* \file htdocs/includes/modules/supplier_order/mod_commande_fournisseur_muguet.php
* \ingroup commande
* \brief Fichier contenant la classe du mod<EFBFBD>le de num<EFBFBD>rotation de r<EFBFBD>f<EFBFBD>rence de commande fournisseur Muguet
* \brief Fichier contenant la classe du modele de numerotation de reference de commande fournisseur Muguet
* \version $Id$
*/
@ -29,7 +29,7 @@ require_once(DOL_DOCUMENT_ROOT ."/includes/modules/supplier_order/modules_comman
/** \class mod_commande_fournisseur_muguet
\brief Classe du mod<EFBFBD>le de num<EFBFBD>rotation de r<EFBFBD>f<EFBFBD>rence de commande fournisseur Muguet
\brief Classe du modele de numerotation de reference de commande fournisseur Muguet
*/
class mod_commande_fournisseur_muguet extends ModeleNumRefSuppliersOrders
{
@ -63,10 +63,13 @@ class mod_commande_fournisseur_muguet extends ModeleNumRefSuppliersOrders
*/
function canBeActivated()
{
global $conf;
$coyymm='';
$sql = "SELECT MAX(ref)";
$sql.= " FROM ".MAIN_DB_PREFIX."commande_fournisseur";
$sql.= " WHERE entity = ".$conf->entity;
$resql=$db->query($sql);
if ($resql)
{
@ -91,15 +94,16 @@ class mod_commande_fournisseur_muguet extends ModeleNumRefSuppliersOrders
*/
function getNextValue($objsoc=0,$object='')
{
global $db;
global $db,$conf;
// D'abord on recupere la valeur max (reponse immediate car champ indexe)
$posindice=8;
$sql = "SELECT MAX(0+SUBSTRING(ref,".$posindice.")) as max";
$sql.= " FROM ".MAIN_DB_PREFIX."commande_fournisseur";
$sql.= " WHERE ref like '".$this->prefix."%'";
$resql=$db->query($sql);
$sql.= " WHERE ref like '".$this->prefix."%'";
$sql.= " AND entity = ".$conf->entity;
$resql=$db->query($sql);
if ($resql)
{
$obj = $db->fetch_object($resql);
@ -116,7 +120,7 @@ class mod_commande_fournisseur_muguet extends ModeleNumRefSuppliersOrders
}
/** \brief Renvoie la r<EFBFBD>f<EFBFBD>rence de commande suivante non utilis<EFBFBD>e
/** \brief Renvoie la reference de commande suivante non utilisee
* \param objsoc Object third party
* \param object Object
* \return string Texte descripif

View File

@ -1,7 +1,7 @@
<?php
/* Copyright (C) 2003-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2004-2008 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2005-2007 Regis Houssin <regis@dolibarr.fr>
* Copyright (C) 2005-2009 Regis Houssin <regis@dolibarr.fr>
*
* 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
@ -31,7 +31,7 @@ require_once(DOL_DOCUMENT_ROOT ."/includes/modules/supplier_order/modules_comman
/**
\class mod_commande_fournisseur_orchidee
\brief Classe du modèle de numérotation de référence de commande fournisseur Orchidee
\brief Classe du modèle de numerotation de référence de commande fournisseur Orchidee
*/
class mod_commande_fournisseur_orchidee extends ModeleNumRefSuppliersOrders
{
@ -40,7 +40,7 @@ class mod_commande_fournisseur_orchidee extends ModeleNumRefSuppliersOrders
var $nom = 'Orchidee';
/** \brief Renvoi la description du modele de numérotation
/** \brief Renvoi la description du modele de numerotation
* \return string Texte descripif
*/
function info()
@ -78,7 +78,7 @@ class mod_commande_fournisseur_orchidee extends ModeleNumRefSuppliersOrders
return $texte;
}
/** \brief Renvoi un exemple de numérotation
/** \brief Renvoi un exemple de numerotation
* \return string Example
*/
function getExample()
@ -123,8 +123,8 @@ class mod_commande_fournisseur_orchidee extends ModeleNumRefSuppliersOrders
}
/** \brief Renvoie la référence de commande suivante non utilisée
* \param objsoc Objet société
/** \brief Renvoie la référence de commande suivante non utilisee
* \param objsoc Objet societe
* \param commande Objet commande
* \return string Texte descripif
*/

View File

@ -2,6 +2,7 @@
/* Copyright (C) 2003-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2004-2005 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2004 Eric Seigne <eric.seigne@ryxeo.com>
* Copyright (C) 2005-2009 Regis Houssin <regis@dolibarr.fr>
* Copyright (C) 2006 Andre Cianfarani <acianfa@free.fr>
*
* This program is free software; you can redistribute it and/or modify
@ -41,7 +42,7 @@ class ModelePDFSuppliersOrders extends FPDF
var $error='';
/**
\brief Renvoi le dernier message d'erreur de cr<EFBFBD>ation de PDF de commande
\brief Renvoi le dernier message d'erreur de creation de PDF de commande
*/
function pdferror()
{
@ -49,15 +50,19 @@ class ModelePDFSuppliersOrders extends FPDF
}
/**
* \brief Renvoi la liste des mod<EFBFBD>les actifs
* \brief Renvoi la liste des modeles actifs
*/
function liste_modeles($db)
{
global $conf;
$type='supplier_order';
$liste=array();
$sql ="SELECT nom as id, nom as lib";
$sql.=" FROM ".MAIN_DB_PREFIX."document_model";
$sql.=" WHERE type = '".$type."'";
$sql = "SELECT nom as id, nom as lib";
$sql.= " FROM ".MAIN_DB_PREFIX."document_model";
$sql.= " WHERE type = '".$type."'";
$sql.= " AND entity = ".$conf->entity;
$resql = $db->query($sql);
if ($resql)
@ -85,7 +90,7 @@ class ModelePDFSuppliersOrders extends FPDF
/**
\class ModeleNumRefSuppliersOrders
\brief Classe m<EFBFBD>re des mod<EFBFBD>les de num<EFBFBD>rotation des r<EFBFBD>f<EFBFBD>rences de commandes fournisseurs
\brief Classe mere des modeles de numerotation des references de commandes fournisseurs
*/
class ModeleNumRefSuppliersOrders
@ -100,7 +105,7 @@ class ModeleNumRefSuppliersOrders
return true;
}
/** \brief Renvoi la description par defaut du modele de num<EFBFBD>rotation
/** \brief Renvoi la description par defaut du modele de numerotation
* \return string Texte descripif
*/
function info()
@ -120,8 +125,8 @@ class ModeleNumRefSuppliersOrders
return $langs->trans("NoExample");
}
/** \brief Test si les num<EFBFBD>ros d<EFBFBD>j<EFBFBD> en vigueur dans la base ne provoquent pas de
* de conflits qui empechera cette num<EFBFBD>rotation de fonctionner.
/** \brief Test si les numeros deja en vigueur dans la base ne provoquent pas de
* de conflits qui empechera cette numerotation de fonctionner.
* \return boolean false si conflit, true si ok
*/
function canBeActivated()
@ -129,7 +134,7 @@ class ModeleNumRefSuppliersOrders
return true;
}
/** \brief Renvoi prochaine valeur attribu<EFBFBD>e
/** \brief Renvoi prochaine valeur attribuee
* \return string Valeur
*/
function getNextValue()
@ -156,9 +161,9 @@ class ModeleNumRefSuppliersOrders
/**
* \brief Create object on disk
* \param db objet base de donn<EFBFBD>e
* \param db objet base de donnee
* \param deliveryid id object
* \param modele force le modele <EFBFBD> utiliser ('' to not force)
* \param modele force le modele a utiliser ('' to not force)
* \param outputlangs objet lang a utiliser pour traduction
* \return int 0 si KO, 1 si OK
*/
@ -169,7 +174,7 @@ function supplier_order_pdf_create($db, $comid, $modele,$outputlangs)
$dir = DOL_DOCUMENT_ROOT."//includes/modules/supplier_order/pdf/";
// Positionne modele sur le nom du modele de commande fournisseur <EFBFBD> utiliser
// Positionne modele sur le nom du modele de commande fournisseur a utiliser
if (! strlen($modele))
{
if (defined("COMMANDE_SUPPLIER_ADDON_PDF") && COMMANDE_SUPPLIER_ADDON_PDF)

View File

@ -25,6 +25,8 @@ ALTER TABLE llx_mailing ADD COLUMN entity integer DEFAULT 1 NOT NULL AFTER titre
ALTER TABLE llx_categorie ADD COLUMN entity integer DEFAULT 1 NOT NULL AFTER label;
ALTER TABLE llx_propal ADD COLUMN entity integer DEFAULT 1 NOT NULL AFTER ref;
ALTER TABLE llx_commande ADD COLUMN entity integer DEFAULT 1 NOT NULL AFTER ref;
ALTER TABLE llx_commande_fournisseur ADD COLUMN entity integer DEFAULT 1 NOT NULL AFTER ref;
ALTER TABLE llx_product_fournisseur ADD COLUMN entity integer DEFAULT 1 NOT NULL AFTER ref_fourn;
ALTER TABLE llx_rights_def DROP PRIMARY KEY;
ALTER TABLE llx_user_param DROP INDEX fk_user;
@ -38,6 +40,9 @@ ALTER TABLE llx_menu DROP INDEX idx_menu_uk_menu;
ALTER TABLE llx_categorie DROP INDEX uk_categorie_ref;
ALTER TABLE llx_propal DROP INDEX ref;
ALTER TABLE llx_commande DROP INDEX ref;
ALTER TABLE llx_commande_fournisseur DROP INDEX uk_commande_fournisseur_ref;
ALTER TABLE llx_product_fournisseur DROP INDEX fk_product;
ALTER TABLE llx_product_fournisseur DROP INDEX fk_soc;
ALTER TABLE llx_rights_def ADD PRIMARY KEY (id, entity);
ALTER TABLE llx_user_param ADD UNIQUE INDEX uk_user_param (fk_user,param,entity);
@ -50,4 +55,8 @@ ALTER TABLE llx_document_model ADD UNIQUE INDEX uk_document_model (nom, type, en
ALTER TABLE llx_menu ADD UNIQUE INDEX idx_menu_uk_menu (menu_handler, fk_menu, url, entity);
ALTER TABLE llx_categorie ADD UNIQUE INDEX uk_categorie_ref (label, type, entity);
ALTER TABLE llx_propal ADD UNIQUE INDEX uk_propal_ref (ref, entity);
ALTER TABLE llx_commande ADD UNIQUE INDEX uk_commande_ref (ref, entity);
ALTER TABLE llx_commande ADD UNIQUE INDEX uk_commande_ref (ref, entity);
ALTER TABLE llx_commande_fournisseur ADD UNIQUE INDEX uk_commande_fournisseur_ref (ref, fk_soc, entity);
ALTER TABLE llx_product_fournisseur ADD UNIQUE INDEX uk_product_fournisseur_ref (ref_fourn, fk_soc, entity);
ALTER TABLE llx_product_fournisseur ADD INDEX idx_product_fourn_fk_product (fk_product, entity);
ALTER TABLE llx_product_fournisseur ADD INDEX idx_product_fourn_fk_soc (fk_soc, entity);

View File

@ -1,5 +1,6 @@
-- ============================================================================
-- Copyright (C) 2006-2007 Laurent Destailleur <eldy@users.sourceforge.net>
-- Copyright (C) 2009 Regis Houssin <regis@dolibarr.fr>
--
-- 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
@ -22,7 +23,7 @@
-- Supprimme orphelins pour permettre montée de la clé
-- V4 DELETE llx_commande_fournisseur FROM llx_commande_fournisseur LEFT JOIN llx_societe ON llx_commande_fournisseur.fk_soc = llx_societe.rowid WHERE llx_societe.rowid IS NULL;
ALTER TABLE llx_commande_fournisseur ADD UNIQUE INDEX uk_commande_fournisseur_ref (ref, fk_soc);
ALTER TABLE llx_commande_fournisseur ADD UNIQUE INDEX uk_commande_fournisseur_ref (ref, fk_soc, entity);
ALTER TABLE llx_commande_fournisseur ADD INDEX idx_commande_fournisseur_fk_soc (fk_soc);
ALTER TABLE llx_commande_fournisseur ADD CONSTRAINT fk_commande_fournisseur_fk_soc FOREIGN KEY (fk_soc) REFERENCES llx_societe (rowid);

View File

@ -24,16 +24,17 @@ create table llx_commande_fournisseur
rowid integer AUTO_INCREMENT PRIMARY KEY,
tms timestamp,
fk_soc integer NOT NULL,
fk_projet integer DEFAULT 0, -- projet auquel est rattache la commande
ref varchar(30) NOT NULL, -- order number
fk_projet integer DEFAULT 0, -- projet auquel est rattache la commande
ref varchar(30) NOT NULL, -- order number
entity integer DEFAULT 1 NOT NULL, -- multi company id
date_creation datetime, -- date de creation
date_valid datetime, -- date de validation
date_cloture datetime, -- date de cloture
date_commande date, -- date de la commande
fk_user_author integer, -- createur de la commande
fk_user_valid integer, -- valideur de la commande
fk_user_cloture integer, -- auteur cloture
date_creation datetime, -- date de creation
date_valid datetime, -- date de validation
date_cloture datetime, -- date de cloture
date_commande date, -- date de la commande
fk_user_author integer, -- createur de la commande
fk_user_valid integer, -- valideur de la commande
fk_user_cloture integer, -- auteur cloture
source smallint NOT NULL,
fk_statut smallint default 0,
amount_ht real default 0,
@ -48,3 +49,11 @@ create table llx_commande_fournisseur
fk_methode_commande integer default 0
)type=innodb;
--
-- List of codes for the field entity
--
-- 1 : first company order
-- 2 : second company order
-- 3 : etc...
--

View File

@ -22,5 +22,6 @@
ALTER TABLE llx_product ADD UNIQUE uk_product_ref (ref, entity);
ALTER TABLE llx_product ADD INDEX idx_product_barcode (barcode);
ALTER TABLE llx_product ADD INDEX idx_product_import_key (import_key);

View File

@ -1,6 +1,7 @@
-- ============================================================================
-- Copyright (C) 2002-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
-- Copyright (C) 2004-2005 Laurent Destailleur <eldy@users.sourceforge.net>
-- Copyright (C) 2005-2009 Regis Houssin <regis@dolibarr.fr>
--
-- 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
@ -20,6 +21,7 @@
-- ============================================================================
ALTER TABLE llx_product_fournisseur ADD INDEX idx_product_fourn_fk_product (fk_product);
ALTER TABLE llx_product_fournisseur ADD UNIQUE INDEX uk_product_fournisseur_ref (ref_fourn, fk_soc, entity);
ALTER TABLE llx_product_fournisseur ADD INDEX idx_product_fourn_fk_soc (fk_soc);
ALTER TABLE llx_product_fournisseur ADD INDEX idx_product_fourn_fk_product (fk_product, entity);
ALTER TABLE llx_product_fournisseur ADD INDEX idx_product_fourn_fk_soc (fk_soc, entity);

View File

@ -1,6 +1,7 @@
-- ============================================================================
-- Copyright (C) 2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
-- Copyright (C) 2009 Laurent Destailleur <eldy@users.sourceforge.net>
-- Copyright (C) 2009 Regis Houssin <regis@dolibarr.fr>
--
-- 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
@ -27,6 +28,14 @@ create table llx_product_fournisseur
fk_product integer,
fk_soc integer,
ref_fourn varchar(30),
entity integer DEFAULT 1 NOT NULL, -- multi company id
fk_user_author integer
)type=innodb;
--
-- List of codes for the field entity
--
-- 1 : first company product
-- 2 : second company product
-- 3 : etc...
--