45require_once DOL_DOCUMENT_ROOT.
'/core/class/commonobject.class.php';
46require_once DOL_DOCUMENT_ROOT.
'/core/class/commonincoterm.class.php';
47require_once DOL_DOCUMENT_ROOT.
'/core/class/commonsocialnetworks.class.php';
48require_once DOL_DOCUMENT_ROOT.
'/core/class/commonpeople.class.php';
49require_once DOL_DOCUMENT_ROOT.
'/core/lib/company.lib.php';
50require_once DOL_DOCUMENT_ROOT.
'/multicurrency/class/multicurrency.class.php';
66 public $TRIGGER_PREFIX =
'COMPANY';
71 public $module =
'societe';
76 public $element =
'societe';
81 public $table_element =
'societe';
86 public $fk_element =
'fk_soc';
91 public $fieldsforcombobox =
'nom,name_alias';
96 protected $childtables = array(
97 'supplier_proposal' => array(
'name' =>
'SupplierProposal'),
98 'propal' => array(
'name' =>
'Proposal'),
99 'commande' => array(
'name' =>
'Order'),
100 'facture' => array(
'name' =>
'Invoice'),
101 'facture_rec' => array(
'name' =>
'RecurringInvoiceTemplate'),
102 'contrat' => array(
'name' =>
'Contract'),
103 'fichinter' => array(
'name' =>
'Fichinter'),
104 'facture_fourn' => array(
'name' =>
'SupplierInvoice'),
105 'commande_fournisseur' => array(
'name' =>
'SupplierOrder'),
106 'projet' => array(
'name' =>
'Project'),
107 'expedition' => array(
'name' =>
'Shipment'),
108 'prelevement_lignes' => array(
'name' =>
'DirectDebitRecord'),
109 'adherent' => array(
'name' =>
'Member')
116 protected $childtablesoncascade = array(
118 'product_fournisseur_price',
119 'product_customer_price_log',
120 'product_customer_price',
121 '@Contact:/contact/class/contact.class.php:fk_soc',
126 'societe_remise_except',
127 'societe_commerciaux',
137 public $picto =
'company';
143 public $restrictiononfksoc = 1;
149 public $SupplierCategories = array();
155 public $prefixCustomerIsRequired;
186 public $fields = array(
187 'rowid' => array(
'type' =>
'integer',
'label' =>
'TechnicalID',
'enabled' => 1,
'visible' => -2,
'noteditable' => 1,
'notnull' => 1,
'index' => 1,
'position' => 1,
'comment' =>
'Id',
'css' =>
'left'),
188 'parent' => array(
'type' =>
'integer',
'label' =>
'Parent',
'enabled' => 1,
'visible' => -1,
'position' => 20),
189 'tms' => array(
'type' =>
'timestamp',
'label' =>
'DateModification',
'enabled' => 1,
'visible' => -1,
'notnull' => 1,
'position' => 25),
190 'datec' => array(
'type' =>
'datetime',
'label' =>
'DateCreation',
'enabled' => 1,
'visible' => -1,
'position' => 30),
191 'nom' => array(
'type' =>
'varchar(128)',
'length' => 128,
'label' =>
'Nom',
'enabled' => 1,
'visible' => -1,
'position' => 35,
'showoncombobox' => 1,
'csslist' =>
'tdoverflowmax150'),
192 'name_alias' => array(
'type' =>
'varchar(128)',
'label' =>
'Name alias',
'enabled' => 1,
'visible' => -1,
'position' => 36,
'showoncombobox' => 2),
193 'entity' => array(
'type' =>
'integer',
'label' =>
'Entity',
'default' =>
'1',
'enabled' => 1,
'visible' => -2,
'notnull' => 1,
'position' => 40,
'index' => 1),
194 'ref_ext' => array(
'type' =>
'varchar(255)',
'label' =>
'RefExt',
'enabled' => 1,
'visible' => 0,
'position' => 45),
195 'code_client' => array(
'type' =>
'varchar(24)',
'label' =>
'CustomerCode',
'enabled' => 1,
'visible' => -1,
'position' => 55),
196 'code_fournisseur' => array(
'type' =>
'varchar(24)',
'label' =>
'SupplierCode',
'enabled' => 1,
'visible' => -1,
'position' => 60),
197 'code_compta' => array(
'type' =>
'varchar(24)',
'label' =>
'CustomerAccountancyCode',
'enabled' => 1,
'visible' => -1,
'position' => 65),
198 'code_compta_fournisseur' => array(
'type' =>
'varchar(24)',
'label' =>
'SupplierAccountancyCode',
'enabled' => 1,
'visible' => -1,
'position' => 70),
199 'address' => array(
'type' =>
'varchar(255)',
'label' =>
'Address',
'enabled' => 1,
'visible' => -1,
'position' => 75),
200 'zip' => array(
'type' =>
'varchar(25)',
'label' =>
'Zip',
'enabled' => 1,
'visible' => -1,
'position' => 80),
201 'town' => array(
'type' =>
'varchar(50)',
'label' =>
'Town',
'enabled' => 1,
'visible' => -1,
'position' => 85),
202 'fk_departement' => array(
'type' =>
'integer',
'label' =>
'State',
'enabled' => 1,
'visible' => -1,
'position' => 90),
203 'fk_pays' => array(
'type' =>
'integer:Ccountry:core/class/ccountry.class.php',
'label' =>
'Country',
'enabled' => 1,
'visible' => -1,
'position' => 95),
204 'phone' => array(
'type' =>
'varchar(20)',
'label' =>
'Phone',
'enabled' => 1,
'visible' => -1,
'position' => 100),
205 'phone_mobile' => array(
'type' =>
'varchar(20)',
'label' =>
'PhoneMobile',
'enabled' => 1,
'visible' => -1,
'position' => 102),
206 'fax' => array(
'type' =>
'varchar(20)',
'label' =>
'Fax',
'enabled' => 1,
'visible' => -1,
'position' => 105),
207 'url' => array(
'type' =>
'varchar(255)',
'label' =>
'Url',
'enabled' => 1,
'visible' => -1,
'position' => 110),
208 'email' => array(
'type' =>
'varchar(128)',
'label' =>
'Email',
'enabled' => 1,
'visible' => -1,
'position' => 115),
209 'socialnetworks' => array(
'type' =>
'text',
'label' =>
'Socialnetworks',
'enabled' => 1,
'visible' => -1,
'position' => 120),
210 'fk_effectif' => array(
'type' =>
'integer',
'label' =>
'Workforce',
'enabled' => 1,
'visible' => -1,
'position' => 170),
211 'fk_typent' => array(
'type' =>
'integer',
'label' =>
'ThirdPartyType',
'enabled' => 1,
'visible' => -1,
'position' => 175,
'csslist' =>
'minwidth200'),
212 'fk_forme_juridique' => array(
'type' =>
'integer',
'label' =>
'JuridicalStatus',
'enabled' => 1,
'visible' => -1,
'position' => 180),
213 'birth' => array(
'type' =>
'date',
'label' =>
'CompanyBirthDate',
'enabled' => 1,
'visible' => -1,
'position' => 182),
214 'fk_currency' => array(
'type' =>
'varchar(3)',
'label' =>
'Currency',
'enabled' => 1,
'visible' => -1,
'position' => 185),
215 'siren' => array(
'type' =>
'varchar(128)',
'label' =>
'Idprof1',
'enabled' => 1,
'visible' => -1,
'position' => 190),
216 'siret' => array(
'type' =>
'varchar(128)',
'label' =>
'Idprof2',
'enabled' => 1,
'visible' => -1,
'position' => 195),
217 'ape' => array(
'type' =>
'varchar(128)',
'label' =>
'Idprof3',
'enabled' => 1,
'visible' => -1,
'position' => 200),
218 'idprof4' => array(
'type' =>
'varchar(128)',
'label' =>
'Idprof4',
'enabled' => 1,
'visible' => -1,
'position' => 205),
219 'idprof5' => array(
'type' =>
'varchar(128)',
'label' =>
'Idprof5',
'enabled' => 1,
'visible' => -1,
'position' => 206),
220 'idprof6' => array(
'type' =>
'varchar(128)',
'label' =>
'Idprof6',
'enabled' => 1,
'visible' => -1,
'position' => 207),
221 'tva_intra' => array(
'type' =>
'varchar(20)',
'label' =>
'VATIntra',
'enabled' => 1,
'visible' => -1,
'position' => 210),
222 'euid' => array(
'type' =>
'varchar(20)',
'label' =>
'EUIDShort',
'enabled' => 1,
'visible' => -1,
'position' => 213),
223 'capital' => array(
'type' =>
'double(24,8)',
'label' =>
'Capital',
'enabled' => 1,
'visible' => -1,
'position' => 215),
224 'fk_stcomm' => array(
'type' =>
'integer',
'label' =>
'CommercialStatus',
'enabled' => 1,
'visible' => -1,
'notnull' => 1,
'position' => 220),
225 'note_public' => array(
'type' =>
'html',
'label' =>
'NotePublic',
'enabled' => 1,
'visible' => 0,
'position' => 225),
226 'note_private' => array(
'type' =>
'html',
'label' =>
'NotePrivate',
'enabled' => 1,
'visible' => 0,
'position' => 230),
227 'client' => array(
'type' =>
'tinyint(4)',
'label' =>
'Customer',
'enabled' => 1,
'visible' => -1,
'position' => 240),
228 'fournisseur' => array(
'type' =>
'tinyint(4)',
'label' =>
'Supplier',
'enabled' => 1,
'visible' => -1,
'position' => 245),
229 'supplier_account' => array(
'type' =>
'varchar(32)',
'label' =>
'Supplier account',
'enabled' => 1,
'visible' => -1,
'position' => 250),
230 'fk_prospectlevel' => array(
'type' =>
'varchar(12)',
'label' =>
'ProspectLevel',
'enabled' => 1,
'visible' => -1,
'position' => 255),
231 'customer_bad' => array(
'type' =>
'tinyint(4)',
'label' =>
'Customer bad',
'enabled' => 1,
'visible' => -1,
'position' => 260),
232 'customer_rate' => array(
'type' =>
'double',
'label' =>
'Customer rate',
'enabled' => 1,
'visible' => -1,
'position' => 265),
233 'supplier_rate' => array(
'type' =>
'double',
'label' =>
'Supplier rate',
'enabled' => 1,
'visible' => -1,
'position' => 270),
234 'fk_user_creat' => array(
'type' =>
'integer:User:user/class/user.class.php',
'label' =>
'UserAuthor',
'enabled' => 1,
'visible' => -2,
'position' => 275),
235 'fk_user_modif' => array(
'type' =>
'integer:User:user/class/user.class.php',
'label' =>
'UserModif',
'enabled' => 1,
'visible' => -2,
'notnull' => -1,
'position' => 280),
238 'mode_reglement' => array(
'type' =>
'smallint(6)',
'label' =>
'Mode reglement',
'enabled' => 1,
'visible' => -1,
'position' => 295),
239 'cond_reglement' => array(
'type' =>
'tinyint(4)',
'label' =>
'Cond reglement',
'enabled' => 1,
'visible' => -1,
'position' => 300),
240 'deposit_percent' => array(
'type' =>
'varchar(63)',
'label' =>
'DepositPercent',
'enabled' => 1,
'visible' => -1,
'position' => 301),
241 'mode_reglement_supplier' => array(
'type' =>
'integer',
'label' =>
'Mode reglement supplier',
'enabled' => 1,
'visible' => -1,
'position' => 305),
242 'cond_reglement_supplier' => array(
'type' =>
'integer',
'label' =>
'Cond reglement supplier',
'enabled' => 1,
'visible' => -1,
'position' => 308),
243 'outstanding_limit' => array(
'type' =>
'double(24,8)',
'label' =>
'OutstandingBill',
'enabled' => 1,
'visible' => -1,
'position' => 310,
'isameasure' => 1),
244 'order_min_amount' => array(
'type' =>
'double(24,8)',
'label' =>
'Order min amount',
'enabled' =>
'isModEnabled("order") && getDolGlobalInt("ORDER_MANAGE_MIN_AMOUNT")',
'visible' => -1,
'position' => 315,
'isameasure' => 1),
245 'supplier_order_min_amount' => array(
'type' =>
'double(24,8)',
'label' =>
'Supplier order min amount',
'enabled' =>
'isModEnabled("order") && getDolGlobalInt("ORDER_MANAGE_MIN_AMOUNT")',
'visible' => -1,
'position' => 320,
'isameasure' => 1),
246 'fk_shipping_method' => array(
'type' =>
'integer',
'label' =>
'ShippingMode',
'enabled' => 1,
'visible' => -1,
'position' => 330),
247 'tva_assuj' => array(
'type' =>
'tinyint(4)',
'label' =>
'VATIsUsed',
'enabled' => 1,
'visible' => -1,
'position' => 335),
248 'localtax1_assuj' => array(
'type' =>
'tinyint(4)',
'label' =>
'LocalTax1IsUsed',
'enabled' => 1,
'visible' => -1,
'position' => 340),
249 'localtax1_value' => array(
'type' =>
'double(6,3)',
'label' =>
'LocalTax1 value',
'enabled' => 1,
'visible' => -1,
'position' => 345),
250 'localtax2_assuj' => array(
'type' =>
'tinyint(4)',
'label' =>
'LocalTax2IsUsed',
'enabled' => 1,
'visible' => -1,
'position' => 350),
251 'localtax2_value' => array(
'type' =>
'double(6,3)',
'label' =>
'LocalTax2 value',
'enabled' => 1,
'visible' => -1,
'position' => 355),
252 'vat_reverse_charge' => array(
'type' =>
'tinyint(4)',
'label' =>
'Vat reverse charge',
'enabled' => 1,
'visible' => -1,
'position' => 335),
253 'barcode' => array(
'type' =>
'varchar(255)',
'label' =>
'Barcode',
'enabled' => 1,
'visible' => -1,
'position' => 360),
254 'price_level' => array(
'type' =>
'integer',
'label' =>
'Price level',
'enabled' =>
'getDolGlobalString("PRODUIT_MULTIPRICES") || getDolGlobalString("PRODUIT_CUSTOMER_PRICES_BY_QTY_MULTIPRICES") || getDolGlobalString("PRODUIT_CUSTOMER_PRICES_AND_MULTIPRICES")',
'visible' => -1,
'position' => 365),
255 'default_lang' => array(
'type' =>
'varchar(6)',
'label' =>
'Default lang',
'enabled' => 1,
'visible' => -1,
'position' => 370),
256 'canvas' => array(
'type' =>
'varchar(32)',
'label' =>
'Canvas',
'enabled' => 1,
'visible' => -1,
'position' => 375),
257 'fk_barcode_type' => array(
'type' =>
'integer',
'label' =>
'Fk barcode type',
'enabled' => 1,
'visible' => -1,
'position' => 405),
258 'webservices_url' => array(
'type' =>
'varchar(255)',
'label' =>
'Webservices url',
'enabled' => 1,
'visible' => -1,
'position' => 410),
259 'webservices_key' => array(
'type' =>
'varchar(128)',
'label' =>
'Webservices key',
'enabled' => 1,
'visible' => -1,
'position' => 415),
260 'fk_incoterms' => array(
'type' =>
'integer',
'label' =>
'Fk incoterms',
'enabled' => 1,
'visible' => -1,
'position' => 425),
261 'location_incoterms' => array(
'type' =>
'varchar(255)',
'label' =>
'Location incoterms',
'enabled' => 1,
'visible' => -1,
'position' => 430),
262 'model_pdf' => array(
'type' =>
'varchar(255)',
'label' =>
'Model pdf',
'enabled' => 1,
'visible' => 0,
'position' => 435),
263 'last_main_doc' => array(
'type' =>
'varchar(255)',
'label' =>
'LastMainDoc',
'enabled' => 1,
'visible' => -1,
'position' => 270),
264 'fk_multicurrency' => array(
'type' =>
'integer',
'label' =>
'Fk multicurrency',
'enabled' => 1,
'visible' => -1,
'position' => 440),
265 'multicurrency_code' => array(
'type' =>
'varchar(255)',
'label' =>
'Multicurrency code',
'enabled' => 1,
'visible' => -1,
'position' => 445),
266 'fk_account' => array(
'type' =>
'integer',
'label' =>
'PaymentBankAccount',
'enabled' => 1,
'visible' => -1,
'position' => 450),
267 'fk_warehouse' => array(
'type' =>
'integer',
'label' =>
'Warehouse',
'enabled' => 1,
'visible' => -1,
'position' => 455),
268 'logo' => array(
'type' =>
'varchar(255)',
'label' =>
'Logo',
'enabled' => 1,
'visible' => -1,
'position' => 400),
269 'logo_squarred' => array(
'type' =>
'varchar(255)',
'label' =>
'Logo squarred',
'enabled' => 1,
'visible' => -1,
'position' => 401),
270 'status' => array(
'type' =>
'tinyint(4)',
'label' =>
'Status',
'enabled' => 1,
'visible' => -1,
'position' => 500),
271 'import_key' => array(
'type' =>
'varchar(14)',
'label' =>
'ImportId',
'enabled' => 1,
'visible' => -2,
'position' => 1000),
324 public $departement_code;
349 public $phone_mobile;
496 public $socialobject;
506 public $tva_assuj = 1;
521 public $vat_reverse_charge = 0;
527 public $localtax1_assuj;
531 public $localtax1_value;
535 public $localtax2_assuj;
539 public $localtax2_value;
554 public $typent_id = 0;
569 public $effectif_id = 0;
573 public $forme_juridique_code = 0;
578 public $forme_juridique;
587 public $remise_percent;
591 public $remise_supplier_percent;
596 public $mode_reglement_id;
600 public $cond_reglement_id;
604 public $deposit_percent;
608 public $mode_reglement_supplier_id;
612 public $cond_reglement_supplier_id;
616 public $transport_mode_supplier_id;
621 public $fk_prospectlevel;
633 public $user_modification;
640 public $user_creation;
652 public $prospect = 0;
670 public $code_fournisseur;
676 public $code_compta_client;
682 public $accountancy_code_customer_general;
688 public $accountancy_code_customer;
694 public $code_compta_fournisseur;
700 public $accountancy_code_supplier_general;
706 public $accountancy_code_supplier;
712 public $code_compta_product;
725 public $note_private;
743 public $stcomm_picto;
749 public $status_prospect_label;
760 public $outstanding_limit;
765 public $order_min_amount;
770 public $supplier_order_min_amount;
776 public $commercial_id;
788 public $default_lang;
819 public $webservices_url;
825 public $webservices_key;
845 public $logo_squarred;
850 public $logo_squarred_small;
855 public $logo_squarred_mini;
860 public $accountancy_code_sell;
865 public $accountancy_code_buy;
870 public $currency_code;
876 public $fk_multicurrency;
881 public $multicurrency_code;
887 public $fk_warehouse;
900 public $partnerships = array();
906 public $bank_account;
916 const STATUS_CEASED = 0;
917 const STATUS_INACTIVITY = 1;
958 'code_compta' =>
'code_compta_client',
960 + parent::deprecatedProperties();
974 $this->ismultientitymanaged = 1;
975 $this->isextrafieldmanaged = 1;
978 $this->fournisseur = 0;
979 $this->typent_id = 0;
980 $this->effectif_id = 0;
981 $this->forme_juridique_code = 0;
982 $this->tva_assuj = 1;
983 $this->vat_reverse_charge = 0;
987 $this->fields[
'address'][
'showoncombobox'] =
getDolGlobalInt(
'COMPANY_SHOW_ADDRESS_SELECTLIST');
988 $this->fields[
'zip'][
'showoncombobox'] =
getDolGlobalInt(
'COMPANY_SHOW_ADDRESS_SELECTLIST');
989 $this->fields[
'town'][
'showoncombobox'] =
getDolGlobalInt(
'COMPANY_SHOW_ADDRESS_SELECTLIST');
1005 global $langs,
$conf;
1010 if (empty($this->
status)) {
1013 $this->
name = $this->
name ? trim($this->
name) : trim((
string) $this->nom);
1015 $this->nom = $this->name;
1017 if (empty($this->client)) {
1020 if (empty($this->fournisseur)) {
1021 $this->fournisseur = 0;
1023 $this->import_key = trim((
string) $this->import_key);
1025 $this->code_compta_client = trim($this->code_compta_client ??
'');
1027 $this->accountancy_code_customer_general = trim($this->accountancy_code_customer_general ??
'');
1028 if ($this->accountancy_code_customer_general ===
'-1') {
1029 $this->accountancy_code_customer_general =
'';
1031 $this->accountancy_code_customer = trim((
string) $this->code_compta_client);
1032 $this->accountancy_code_supplier_general = trim($this->accountancy_code_supplier_general ??
'');
1033 if ($this->accountancy_code_supplier_general ===
'-1') {
1034 $this->accountancy_code_supplier_general =
'';
1036 $this->accountancy_code_supplier = trim((
string) $this->code_compta_fournisseur);
1037 $this->accountancy_code_buy = trim((
string) $this->accountancy_code_buy);
1038 $this->accountancy_code_sell = trim((
string) $this->accountancy_code_sell);
1040 if (!empty($this->multicurrency_code)) {
1043 if (empty($this->fk_multicurrency)) {
1044 $this->multicurrency_code =
'';
1045 $this->fk_multicurrency = 0;
1052 if (empty($this->date_creation)) {
1053 $this->date_creation = $now;
1059 if ($this->code_client == -1 || $this->code_client ===
'auto') {
1060 $this->get_codeclient($this, 0);
1062 if ($this->code_fournisseur ==
'-1' || $this->code_fournisseur ===
'auto') {
1063 $this->get_codefournisseur($this, 1);
1068 $result = $this->
verify();
1073 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"societe (";
1075 $sql .=
", name_alias";
1078 $sql .=
", fk_user_creat";
1079 $sql .=
", fk_typent";
1082 $sql .=
", ref_ext";
1083 $sql .=
", fk_stcomm";
1084 $sql .=
", fk_incoterms";
1085 $sql .=
", location_incoterms";
1086 $sql .=
", import_key";
1087 $sql .=
", fk_multicurrency";
1088 $sql .=
", multicurrency_code";
1091 $sql .=
", vat_reverse_charge";
1092 $sql .=
", accountancy_code_buy";
1093 $sql .=
", accountancy_code_sell";
1095 $sql .=
") VALUES ('".$this->db->escape($this->name).
"',";
1096 $sql .=
" '".$this->db->escape($this->name_alias).
"',";
1097 $sql .=
" ".((int) $this->entity).
",";
1098 $sql .=
" '".$this->db->idate($this->date_creation).
"'";
1099 $sql .=
", ".(!empty($user->id) ? ((int) $user->id) :
"null");
1100 $sql .=
", ".(!empty($this->typent_id) ? ((int) $this->typent_id) :
"null");
1101 $sql .=
", ".(!empty($this->canvas) ?
"'".$this->db->escape($this->canvas).
"'" :
"null");
1102 $sql .=
", ".((int) $this->
status);
1103 $sql .=
", ".(!empty($this->ref_ext) ?
"'".$this->db->escape($this->ref_ext).
"'" :
"null");
1105 $sql .=
", ".(int) $this->fk_incoterms;
1106 $sql .=
", '".$this->db->escape($this->location_incoterms).
"'";
1107 $sql .=
", ".(!empty($this->import_key) ?
"'".$this->db->escape($this->import_key).
"'" :
"null");
1108 $sql .=
", ".(int) $this->fk_multicurrency;
1109 $sql .=
", '".$this->db->escape($this->multicurrency_code).
"'";
1110 $sql .=
", ".(empty($this->ip) ?
"null" :
"'".$this->db->escape($this->ip).
"'");
1112 $sql .=
", ".(empty($this->vat_reverse_charge) ?
'0' :
'1');
1113 $sql .=
", '" . $this->db->escape($this->accountancy_code_buy) .
"'";
1114 $sql .=
", '" . $this->db->escape($this->accountancy_code_sell) .
"'";
1118 dol_syslog(get_class($this).
"::create", LOG_DEBUG);
1120 $result = $this->db->query($sql);
1122 $this->
id = $this->db->last_insert_id(MAIN_DB_PREFIX.
"societe");
1124 $ret = $this->
update($this->
id, $user, 0, 1, 1,
'add');
1127 if ($this->commercial_id !=
'' && $this->commercial_id != -1) {
1129 } elseif (!$user->hasRight(
'societe',
'client',
'voir')) {
1137 $result = $this->call_trigger(
'COMPANY_CREATE', $user);
1148 dol_syslog(get_class($this).
"::Create success id=".$this->
id);
1149 $this->db->commit();
1152 dol_syslog(get_class($this).
"::Create echec update ".$this->error.(empty($this->errors) ?
'' :
' '.implode(
',', $this->errors)), LOG_ERR);
1153 $this->db->rollback();
1157 if ($this->db->lasterrno() ==
'DB_ERROR_RECORD_ALREADY_EXISTS') {
1158 $this->error = $langs->trans(
"ErrorCompanyNameAlreadyExists", $this->name);
1161 $this->error = $this->db->lasterror();
1164 $this->db->rollback();
1168 $this->db->rollback();
1169 dol_syslog(get_class($this).
"::Create fails verify ".implode(
',', $this->errors), LOG_WARNING);
1192 require_once DOL_DOCUMENT_ROOT.
'/contact/class/contact.class.php';
1193 $contact =
new Contact($this->db);
1195 $contact->name = $this->name_bis;
1196 $contact->firstname = $this->firstname;
1197 $contact->civility_id = $this->civility_id;
1198 $contact->socid = $this->id;
1199 $contact->statut = 1;
1200 $contact->status = 1;
1202 $contact->country_id = $this->country_id;
1203 $contact->state_id = $this->state_id;
1204 $contact->address = $this->address;
1205 $contact->email = $this->email;
1206 $contact->zip = $this->zip;
1207 $contact->town = $this->town;
1209 $contact->phone_pro = $this->phone;
1214 $contactId = $contact->create($user, $notrigger);
1215 if ($contactId < 0) {
1218 dol_syslog(get_class($this).
"::create_individual ERROR:".$this->error, LOG_ERR);
1221 if (empty($error) && is_array($tags) && !empty($tags)) {
1222 $result = $contact->setCategories($tags);
1226 dol_syslog(get_class($this).
"::create_individual Affect Tag ERROR:".$this->error, LOG_ERR);
1227 $contactId = $result;
1231 if (empty($error) &&
isModEnabled(
'mailing') && !empty($contact->email) && isset($no_email)) {
1232 $result = $contact->setNoEmail($no_email);
1235 dol_syslog(get_class($this).
"::create_individual set mailing status ERROR:".$this->error, LOG_ERR);
1236 $contactId = $result;
1240 if (empty($error)) {
1241 dol_syslog(get_class($this).
"::create_individual success");
1242 $this->db->commit();
1244 $this->db->rollback();
1261 $this->errors = array();
1265 $this->nom = $this->name;
1268 $this->errors[] =
'ErrorBadThirdPartyName';
1272 if ($this->client) {
1274 if ($rescode != 0 && $rescode != -5) {
1275 if ($rescode == -1) {
1276 $this->errors[] =
'ErrorBadCustomerCodeSyntax';
1277 } elseif ($rescode == -2) {
1278 $this->errors[] =
'ErrorCustomerCodeRequired';
1279 } elseif ($rescode == -3) {
1280 $this->errors[] =
'ErrorCustomerCodeAlreadyUsed';
1281 } elseif ($rescode == -4) {
1282 $this->errors[] =
'ErrorPrefixRequired';
1284 $this->errors[] =
'ErrorUnknownOnCustomerCodeCheck';
1291 if ($this->fournisseur) {
1293 if ($rescode != 0 && $rescode != -5) {
1294 if ($rescode == -1) {
1295 $this->errors[] =
'ErrorBadSupplierCodeSyntax';
1296 } elseif ($rescode == -2) {
1297 $this->errors[] =
'ErrorSupplierCodeRequired';
1298 } elseif ($rescode == -3) {
1299 $this->errors[] =
'ErrorSupplierCodeAlreadyUsed';
1300 } elseif ($rescode == -4) {
1301 $this->errors[] =
'ErrorPrefixRequired';
1303 $this->errors[] =
'ErrorUnknownOnSupplierCodeCheck';
1310 $array_to_check = array(
'IDPROF1',
'IDPROF2',
'IDPROF3',
'IDPROF4',
'IDPROF5',
'IDPROF6',
'EMAIL',
'TVA_INTRA',
'EUID',
'ACCOUNTANCY_CODE_CUSTOMER',
'ACCOUNTANCY_CODE_SUPPLIER');
1311 foreach ($array_to_check as $key) {
1312 $keymin = strtolower($key);
1313 $keyfield_db = $keymin;
1314 if ($key ==
'ACCOUNTANCY_CODE_CUSTOMER') {
1315 $keymin =
'code_compta_client';
1316 $keyfield_db =
'code_compta';
1317 } elseif ($key ==
'ACCOUNTANCY_CODE_SUPPLIER') {
1318 $keymin =
'code_compta_fournisseur';
1319 $keyfield_db =
'code_compta_fournisseur';
1321 $i = (int) preg_replace(
'/[^0-9]/',
'', $key);
1322 $vallabel = $this->$keymin;
1327 if ($mysoc->country_id > 0 && $this->country_id ==
$mysoc->country_id) {
1328 $idprof_mandatory =
'SOCIETE_'.$key.
'_MANDATORY';
1330 $langs->load(
"errors");
1332 $this->errors[] = $langs->trans(
"ErrorProdIdIsMandatory", $langs->transcountry(
'ProfId'.$i, $this->country_code)).
' ('.$langs->trans(
"ForbiddenBySetupRules").
')';
1339 if ($this->
id_prof_exists($keymin, $vallabel, ($this->
id > 0 ? $this->
id : 0))) {
1340 $langs->load(
"errors");
1342 $this->errors[] = $langs->transcountry(
'ProfId'.$i, $this->country_code).
" ".$langs->trans(
"ErrorProdIdAlreadyExist", $vallabel).
' ('.$langs->trans(
"ForbiddenBySetupRules").
')';
1346 if ($key ==
'EMAIL') {
1349 $langs->load(
"errors");
1351 $this->errors[] = $langs->trans(
"ErrorBadEMail", $this->
email).
' ('.$langs->trans(
"ForbiddenBySetupRules").
')';
1356 if ($this->
id_prof_exists($keymin, $vallabel, ($this->
id > 0 ? $this->
id : 0))) {
1357 $langs->load(
"errors");
1359 $this->errors[] = $langs->trans(
'Email').
" ".$langs->trans(
"ErrorProdIdAlreadyExist", $vallabel).
' ('.$langs->trans(
"ForbiddenBySetupRules").
')';
1362 } elseif ($key ==
'TVA_INTRA') {
1365 if ($this->
id_prof_exists($keymin, $vallabel, ($this->
id > 0 ? $this->
id : 0))) {
1366 $langs->load(
"errors");
1368 $this->errors[] = $langs->trans(
'VATIntra').
" ".$langs->trans(
"ErrorProdIdAlreadyExist", $vallabel).
' ('.$langs->trans(
"ForbiddenBySetupRules").
')';
1371 if ($this->tva_assuj && !$vallabel &&
getDolGlobalString(
'SOCIETE_VAT_INTRA_MANDATORY')) {
1372 $langs->load(
"errors");
1374 $this->errors[] = $langs->trans(
"ErrorProdIdIsMandatory", $langs->trans(
'VATIntra')).
' ('.$langs->trans(
"ForbiddenBySetupRules").
')';
1376 } elseif ($key ==
'EUID') {
1379 if ($this->
id_prof_exists($keymin, $vallabel, ($this->
id > 0 ? $this->
id : 0))) {
1380 $langs->load(
"errors");
1382 $this->errors[] = $langs->trans(
'EUIDShort').
" ".$langs->trans(
"ErrorProdIdAlreadyExist", $vallabel).
' ('.$langs->trans(
"ForbiddenBySetupRules").
')';
1387 if (
getDolGlobalString(
'SOCIETE_EUID_MANDATORY') && (!isset($vallabel) || trim($vallabel) ===
'')) {
1388 $langs->load(
"errors");
1390 $this->errors[] = $langs->trans(
"ErrorProdIdIsMandatory", $langs->trans(
'EUIDShort')).
' ('.$langs->trans(
"ForbiddenBySetupRules").
')';
1392 } elseif ($key ==
'ACCOUNTANCY_CODE_CUSTOMER' && !empty($this->client)) {
1395 if ($this->
id_prof_exists($keyfield_db, $vallabel, ($this->
id > 0 ? $this->
id : 0))) {
1396 $langs->loadLangs(array(
"errors",
'compta'));
1398 $this->errors[] = $langs->trans(
'CustomerAccountancyCodeShort') .
" " . $langs->trans(
"ErrorProdIdAlreadyExist", $vallabel) .
' (' . $langs->trans(
"ForbiddenBySetupRules") .
')';
1403 if (
getDolGlobalString(
'SOCIETE_ACCOUNTANCY_CODE_CUSTOMER_MANDATORY') && (!isset($vallabel) || trim($vallabel) ===
'')) {
1404 $langs->loadLangs(array(
"errors",
'compta'));
1406 $this->errors[] = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
'CustomerAccountancyCodeShort')) .
' (' . $langs->trans(
"ForbiddenBySetupRules") .
')';
1408 } elseif ($key ==
'ACCOUNTANCY_CODE_SUPPLIER' && !empty($this->fournisseur)) {
1411 if ($this->
id_prof_exists($keyfield_db, $vallabel, ($this->
id > 0 ? $this->
id : 0))) {
1412 $langs->loadLangs(array(
"errors",
'compta'));
1414 $this->errors[] = $langs->trans(
'SupplierAccountancyCodeShort') .
" " . $langs->trans(
"ErrorProdIdAlreadyExist", $vallabel) .
' (' . $langs->trans(
"ForbiddenBySetupRules") .
')';
1419 if (
getDolGlobalString(
'SOCIETE_ACCOUNTANCY_CODE_SUPPLIER_MANDATORY') && (!isset($vallabel) || trim($vallabel) ===
'')) {
1420 $langs->loadLangs(array(
"errors",
'compta'));
1422 $this->errors[] = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
'SupplierAccountancyCodeShort')) .
' (' . $langs->trans(
"ForbiddenBySetupRules") .
')';
1447 public function update($id,
User $user, $call_trigger = 1, $allowmodcodeclient = 0, $allowmodcodefournisseur = 0, $action =
'update', $nosyncmember = 1)
1449 global $langs,
$conf, $hookmanager;
1451 require_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
1456 if (empty($this->country_id) && !empty($this->country_code)) {
1457 $this->country_id =
dol_getIdFromCode($this->db, $this->country_code,
'c_country',
'code',
'rowid');
1460 if (empty($this->country_id) && !empty($this->country_code)) {
1461 $country_id =
getCountry($this->country_code,
'3');
1462 $this->country_id = is_int($country_id) ? $country_id : 0;
1467 dol_syslog(get_class($this).
"::Update id=".$id.
" call_trigger=".$call_trigger.
" allowmodcodeclient=".$allowmodcodeclient.
" allowmodcodefournisseur=".$allowmodcodefournisseur);
1473 $this->entity = ((isset($this->entity) && is_numeric($this->entity)) ? $this->entity :
$conf->entity);
1474 $this->
name = $this->
name ? trim($this->
name) : trim((
string) $this->nom);
1475 $this->nom = $this->name;
1476 $this->name_alias = trim((
string) $this->name_alias);
1477 $this->ref_ext = (empty($this->ref_ext) ?
'' : trim($this->ref_ext));
1479 $this->zip = trim((
string) $this->zip);
1480 $this->town = trim((
string) $this->town);
1481 $this->state_id = (is_numeric($this->state_id)) ? (
int) $this->state_id : 0;
1482 $this->country_id = ($this->country_id > 0) ? $this->country_id : 0;
1483 $this->phone = trim((
string) $this->phone);
1484 $this->phone = preg_replace(
"/\s/",
"", $this->phone);
1485 $this->phone = preg_replace(
"/\./",
"", $this->phone);
1486 $this->phone_mobile = trim((
string) $this->phone_mobile);
1487 $this->phone_mobile = preg_replace(
"/\s/",
"", $this->phone_mobile);
1488 $this->phone_mobile = preg_replace(
"/\./",
"", $this->phone_mobile);
1489 $this->fax = trim((
string) $this->fax);
1490 $this->fax = preg_replace(
"/\s/",
"", $this->fax);
1491 $this->fax = preg_replace(
"/\./",
"", $this->fax);
1493 $this->url = $this->url ?
clean_url($this->url, 0) :
'';
1494 $this->note_private = (empty($this->note_private) ?
'' : trim($this->note_private));
1495 $this->note_public = (empty($this->note_public) ?
'' : trim($this->note_public));
1496 $this->idprof1 = trim((
string) $this->idprof1);
1497 $this->idprof2 = trim((
string) $this->idprof2);
1498 $this->idprof3 = trim((
string) $this->idprof3);
1499 $this->idprof4 = trim((
string) $this->idprof4);
1500 $this->idprof5 = (!empty($this->idprof5) ? trim($this->idprof5) :
'');
1501 $this->idprof6 = (!empty($this->idprof6) ? trim($this->idprof6) :
'');
1502 $this->prefix_comm = trim((
string) $this->prefix_comm);
1503 $this->outstanding_limit =
price2num($this->outstanding_limit);
1504 $this->order_min_amount =
price2num($this->order_min_amount);
1505 $this->supplier_order_min_amount =
price2num($this->supplier_order_min_amount);
1506 $this->tva_assuj = (is_numeric($this->tva_assuj)) ? (
int) trim((
string) $this->tva_assuj) : 0;
1507 $this->tva_intra = trim((
string) $this->tva_intra);
1508 $this->vat_reverse_charge = empty($this->vat_reverse_charge) ? 0 : 1;
1509 $this->euid = trim((
string) $this->euid);
1511 if (empty($this->
status)) {
1515 if (!empty($this->multicurrency_code)) {
1518 if (empty($this->fk_multicurrency)) {
1519 $this->multicurrency_code =
'';
1520 $this->fk_multicurrency = 0;
1524 $this->localtax1_assuj = (int) trim((
string) $this->localtax1_assuj);
1525 $this->localtax2_assuj = (int) trim((
string) $this->localtax2_assuj);
1527 $this->localtax1_value = trim($this->localtax1_value);
1528 $this->localtax2_value = trim($this->localtax2_value);
1530 $this->capital = (!is_null($this->capital) && (
string) $this->capital !=
'') ? (float)
price2num(trim((
string) $this->capital)) :
null;
1532 $this->effectif_id = (int) $this->effectif_id;
1533 $this->forme_juridique_code = (int) $this->forme_juridique_code;
1536 $this->barcode = trim((
string) $this->barcode);
1539 if ($this->code_client == -1 || $this->code_client ===
'auto') {
1540 $this->get_codeclient($this, 0);
1542 if ($this->code_fournisseur ==
'-1' || $this->code_fournisseur ===
'auto') {
1543 $this->get_codefournisseur($this, 1);
1546 $this->accountancy_code_customer_general = trim((
string) $this->accountancy_code_customer_general);
1547 if ($this->accountancy_code_customer_general ===
'-1') {
1548 $this->accountancy_code_customer_general =
'';
1550 $this->code_compta_client = trim((
string) $this->code_compta_client);
1551 $this->accountancy_code_supplier_general = trim((
string) $this->accountancy_code_supplier_general);
1552 if ($this->accountancy_code_supplier_general ===
'-1') {
1553 $this->accountancy_code_supplier_general =
'';
1555 $this->code_compta_fournisseur = trim((
string) $this->code_compta_fournisseur);
1558 if (!is_numeric($this->client) && !is_numeric($this->fournisseur)) {
1559 $langs->load(
"errors");
1560 $this->error = $langs->trans(
"BadValueForParameterClientOrSupplier");
1565 if (!empty($allowmodcodeclient) && !empty($this->client)) {
1567 if (empty($this->code_compta_client)) {
1578 if (!empty($allowmodcodefournisseur) && !empty($this->fournisseur)) {
1580 if (empty($this->code_compta_fournisseur)) {
1591 $this->webservices_url = empty($this->webservices_url) ?
'' :
clean_url($this->webservices_url, 0);
1592 $this->webservices_key = trim((
string) $this->webservices_key);
1594 $this->accountancy_code_buy = (empty($this->accountancy_code_buy) ?
'' : trim($this->accountancy_code_buy));
1595 $this->accountancy_code_sell = (empty($this->accountancy_code_sell) ?
'' : trim($this->accountancy_code_sell));
1598 $this->fk_incoterms = (int) $this->fk_incoterms;
1599 $this->location_incoterms = trim((
string) $this->location_incoterms);
1606 if ($action !=
'add' && $action !=
'merge') {
1609 $result = $this->
verify();
1613 if (is_array($this->errors)) {
1614 if (in_array(
'ErrorBadCustomerCodeSyntax', $this->errors) && is_object($this->oldcopy) && $this->oldcopy->code_client == $this->code_client) {
1615 if (($key = array_search(
'ErrorBadCustomerCodeSyntax', $this->errors)) !==
false) {
1616 unset($this->errors[$key]);
1619 if (in_array(
'ErrorBadSupplierCodeSyntax', $this->errors) && is_object($this->oldcopy) && $this->oldcopy->code_fournisseur == $this->code_fournisseur) {
1620 if (($key = array_search(
'ErrorBadSupplierCodeSyntax', $this->errors)) !==
false) {
1621 unset($this->errors[$key]);
1624 if (empty($this->errors)) {
1631 dol_syslog(get_class($this).
"::update verify ok or not done");
1633 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"societe SET ";
1634 $sql .=
"entity = ".((int) $this->entity);
1635 $sql .=
",nom = '".$this->db->escape($this->
name).
"'";
1636 $sql .=
",name_alias = '".$this->db->escape($this->name_alias).
"'";
1637 $sql .=
",ref_ext = ".(!empty($this->ref_ext) ?
"'".$this->db->escape($this->ref_ext).
"'" :
"null");
1638 $sql .=
",address = '".$this->db->escape($this->address).
"'";
1640 $sql .=
",zip = ".(!empty($this->zip) ?
"'".$this->db->escape($this->zip).
"'" :
"null");
1641 $sql .=
",town = ".(!empty($this->town) ?
"'".$this->db->escape($this->town).
"'" :
"null");
1643 $sql .=
",fk_departement = ".((!empty($this->state_id) && $this->state_id > 0) ? ((
int) $this->state_id) :
'null');
1644 $sql .=
",fk_pays = ".((!empty($this->country_id) && $this->country_id > 0) ? ((
int) $this->country_id) :
'null');
1646 $sql .=
",phone = ".(!empty($this->phone) ?
"'".$this->db->escape($this->phone).
"'" :
"null");
1647 $sql .=
",phone_mobile = ".(!empty($this->phone_mobile) ?
"'".$this->db->escape($this->phone_mobile).
"'" :
"null");
1648 $sql .=
",fax = ".(!empty($this->fax) ?
"'".$this->db->escape($this->fax).
"'" :
"null");
1649 $sql .=
",email = ".(!empty($this->email) ?
"'".$this->db->escape($this->email).
"'" :
"null");
1650 $sql .=
",socialnetworks = '".$this->db->escape(json_encode($this->socialnetworks)).
"'";
1651 $sql .=
",url = ".(!empty($this->url) ?
"'".$this->db->escape($this->url).
"'" :
"null");
1653 $sql .=
",parent = ".($this->parent > 0 ? $this->parent :
"null");
1655 $sql .=
",note_private = ".(!empty($this->note_private) ?
"'".$this->db->escape($this->note_private).
"'" :
"null");
1656 $sql .=
",note_public = ".(!empty($this->note_public) ?
"'".$this->db->escape($this->note_public).
"'" :
"null");
1658 $sql .=
",siren = '".$this->db->escape($this->idprof1).
"'";
1659 $sql .=
",siret = '".$this->db->escape($this->idprof2).
"'";
1660 $sql .=
",ape = '".$this->db->escape($this->idprof3).
"'";
1661 $sql .=
",idprof4 = '".$this->db->escape($this->idprof4).
"'";
1662 $sql .=
",idprof5 = '".$this->db->escape($this->idprof5).
"'";
1663 $sql .=
",idprof6 = '".$this->db->escape($this->idprof6).
"'";
1665 $sql .=
",tva_assuj = ".($this->tva_assuj !=
'' ?
"'".$this->db->escape((
string) $this->tva_assuj).
"'" :
"null");
1666 $sql .=
",tva_intra = '".$this->db->escape($this->tva_intra).
"'";
1668 $sql .=
",vat_reverse_charge = " . ($this->vat_reverse_charge !=
'' ?
"'" . $this->db->escape((
string) $this->vat_reverse_charge) .
"'" : 0);
1670 $sql .=
",euid = '".$this->db->escape($this->euid).
"'";
1671 $sql .=
",status = ".((int) $this->
status);
1674 $sql .=
",localtax1_assuj = ".($this->localtax1_assuj !=
'' ?
"'".$this->db->escape((
string) $this->localtax1_assuj).
"'" :
"null");
1675 $sql .=
",localtax2_assuj = ".($this->localtax2_assuj !=
'' ?
"'".$this->db->escape((
string) $this->localtax2_assuj).
"'" :
"null");
1676 if ($this->localtax1_assuj == 1) {
1677 if ($this->localtax1_value !=
'') {
1678 $sql .=
", localtax1_value = ".((float) $this->localtax1_value);
1680 $sql .=
", localtax1_value = 0.000";
1683 $sql .=
",localtax1_value =0.000";
1686 if ($this->localtax2_assuj == 1) {
1687 if ($this->localtax2_value !=
'') {
1688 $sql .=
",localtax2_value = ".((float) $this->localtax2_value);
1690 $sql .=
",localtax2_value = 0.000";
1693 $sql .=
",localtax2_value = 0.000";
1696 $sql .=
",capital = ".($this->capital ===
null ?
"null" : (float) $this->capital);
1698 $sql .=
",prefix_comm = ".(!empty($this->prefix_comm) ?
"'".$this->db->escape($this->prefix_comm).
"'" :
"null");
1700 $sql .=
",fk_effectif = ".($this->effectif_id > 0 ? ((int) $this->effectif_id) :
"null");
1701 if (isset($this->stcomm_id)) {
1702 $sql .=
",fk_stcomm=".(int) $this->stcomm_id;
1704 if (isset($this->typent_id)) {
1705 $sql .=
",fk_typent = ".($this->typent_id > 0 ? ((int) $this->typent_id) :
"0");
1708 $sql .=
",fk_forme_juridique = ".(!empty($this->forme_juridique_code) ?
"'".$this->db->escape((
string) $this->forme_juridique_code).
"'" :
"null");
1709 $sql .=
",birth = ".(!empty($this->birth) ?
"'".$this->db->idate($this->birth).
"'" :
"null");
1711 $sql .=
",mode_reglement = ".(!empty($this->mode_reglement_id) ?
"'".$this->db->escape((
string) $this->mode_reglement_id).
"'" :
"null");
1712 $sql .=
",cond_reglement = ".(!empty($this->cond_reglement_id) ?
"'".$this->db->escape((
string) $this->cond_reglement_id).
"'" :
"null");
1713 $sql .=
",deposit_percent = ".(!empty($this->deposit_percent) ?
"'".$this->db->escape((
string) $this->deposit_percent).
"'" :
"null");
1714 $sql .=
",transport_mode = ".(!empty($this->transport_mode_id) ?
"'".$this->db->escape((
string) $this->transport_mode_id).
"'" :
"null");
1715 $sql .=
",mode_reglement_supplier = ".(!empty($this->mode_reglement_supplier_id) ?
"'".$this->db->escape((
string) $this->mode_reglement_supplier_id).
"'" :
"null");
1716 $sql .=
",cond_reglement_supplier = ".(!empty($this->cond_reglement_supplier_id) ?
"'".$this->db->escape((
string) $this->cond_reglement_supplier_id).
"'" :
"null");
1717 $sql .=
",transport_mode_supplier = ".(!empty($this->transport_mode_supplier_id) ?
"'".$this->db->escape((
string) $this->transport_mode_supplier_id).
"'" :
"null");
1718 $sql .=
",fk_shipping_method = ".(!empty($this->shipping_method_id) ?
"'".$this->db->escape((
string) $this->shipping_method_id).
"'" :
"null");
1719 $sql .=
",fk_account = ".($this->fk_account > 0 ? (int) $this->fk_account :
"null");
1721 $sql .=
",client = ".(!empty($this->client) ? $this->client : 0);
1722 $sql .=
",fournisseur = ".(!empty($this->fournisseur) ? $this->fournisseur : 0);
1723 $sql .=
",barcode = ".(!empty($this->barcode) ?
"'".$this->db->escape($this->barcode).
"'" :
"null");
1724 $sql .=
",default_lang = ".(!empty($this->default_lang) ?
"'".$this->db->escape($this->default_lang).
"'" :
"null");
1725 $sql .=
",logo = ".(!empty($this->logo) ?
"'".$this->db->escape($this->logo).
"'" :
"null");
1726 $sql .=
",logo_squarred = ".(!empty($this->logo_squarred) ?
"'".$this->db->escape($this->logo_squarred).
"'" :
"null");
1727 $sql .=
",outstanding_limit= ".($this->outstanding_limit !=
'' ? $this->outstanding_limit :
'null');
1728 $sql .=
",order_min_amount= ".($this->order_min_amount !=
'' ? $this->order_min_amount :
'null');
1729 $sql .=
",supplier_order_min_amount= ".($this->supplier_order_min_amount !=
'' ? $this->supplier_order_min_amount :
'null');
1730 $sql .=
",fk_prospectlevel='".$this->db->escape($this->fk_prospectlevel).
"'";
1732 $sql .=
", accountancy_code_buy = '" . $this->db->escape($this->accountancy_code_buy) .
"'";
1733 $sql .=
", accountancy_code_sell= '" . $this->db->escape($this->accountancy_code_sell) .
"'";
1735 $sql .=
", accountancy_code_customer_general = ".(!empty($this->accountancy_code_customer_general) ?
"'".$this->db->escape($this->accountancy_code_customer_general).
"'" :
"null");
1736 $sql .=
", code_compta = ".(!empty($this->code_compta_client) ?
"'".$this->db->escape($this->code_compta_client).
"'" :
"null");
1740 $sql .=
", accountancy_code_supplier_general = ".(!empty($this->accountancy_code_supplier_general) ?
"'".$this->db->escape($this->accountancy_code_supplier_general).
"'" :
"null");
1741 $sql .=
", code_compta_fournisseur = ".(($this->code_compta_fournisseur !=
"") ?
"'".$this->db->escape($this->code_compta_fournisseur).
"'" :
"null");
1744 $sql .=
",webservices_url = ".(!empty($this->webservices_url) ?
"'".$this->db->escape($this->webservices_url).
"'" :
"null");
1745 $sql .=
",webservices_key = ".(!empty($this->webservices_key) ?
"'".$this->db->escape($this->webservices_key).
"'" :
"null");
1748 $sql .=
", fk_incoterms = ".((int) $this->fk_incoterms);
1749 $sql .=
", location_incoterms = ".(!empty($this->location_incoterms) ?
"'".$this->db->escape($this->location_incoterms).
"'" :
"null");
1752 $sql .=
", code_client = ".(!empty($this->code_client) ?
"'".$this->db->escape($this->code_client).
"'" :
"null");
1756 $sql .=
", code_fournisseur = ".(!empty($this->code_fournisseur) ?
"'".$this->db->escape($this->code_fournisseur).
"'" :
"null");
1758 $sql .=
", fk_user_modif = ".($user->id > 0 ? $user->id :
"null");
1759 $sql .=
", fk_multicurrency = ".(int) $this->fk_multicurrency;
1760 $sql .=
", multicurrency_code = '".$this->db->escape($this->multicurrency_code).
"'";
1761 $sql .=
", model_pdf = '".$this->db->escape($this->model_pdf).
"'";
1762 $sql .=
" WHERE rowid = ".(int) $id;
1764 $resql = $this->db->query($sql);
1766 if (is_object($this->oldcopy)) {
1767 if ($this->oldcopy->country_id != $this->country_id) {
1768 unset($this->country_code);
1769 unset($this->country);
1771 if ($this->oldcopy->state_id != $this->state_id) {
1772 unset($this->state_code);
1773 unset($this->state);
1776 unset($this->country_code);
1777 unset($this->country);
1778 unset($this->state_code);
1779 unset($this->state);
1782 $nbrowsaffected = $this->db->affected_rows($resql);
1784 if ($nbrowsaffected) {
1787 require_once DOL_DOCUMENT_ROOT.
'/adherents/class/adherent.class.php';
1789 dol_syslog(get_class($this).
"::update update linked member");
1791 $lmember =
new Adherent($this->db);
1792 $result = $lmember->fetch(0,
'0', $this->
id);
1795 $lmember->company = $this->name;
1798 $lmember->address = $this->address;
1799 $lmember->zip = $this->zip;
1800 $lmember->town = $this->town;
1801 $lmember->email = $this->email;
1802 $lmember->socialnetworks = $this->socialnetworks;
1803 $lmember->phone = $this->phone;
1804 $lmember->state_id = $this->state_id;
1805 $lmember->country_id = $this->country_id;
1806 $lmember->default_lang = $this->default_lang;
1808 $result = $lmember->update($user, 0, 1, 1, 1);
1811 dol_syslog(get_class($this).
"::update ".$this->error, LOG_ERR);
1814 } elseif ($result < 0) {
1815 $this->error = $lmember->error;
1825 $this->db->query(
"DELETE FROM ".MAIN_DB_PREFIX.
"societe_perentity WHERE fk_soc = ".((
int) $this->id).
" AND entity = ".((
int)
$conf->entity));
1827 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"societe_perentity (";
1830 $sql .=
", vat_reverse_charge";
1831 $sql .=
", accountancy_code_customer_general";
1832 $sql .=
", accountancy_code_customer";
1833 $sql .=
", accountancy_code_supplier_general";
1834 $sql .=
", accountancy_code_supplier";
1835 $sql .=
", accountancy_code_buy";
1836 $sql .=
", accountancy_code_sell";
1837 $sql .=
") VALUES (";
1839 $sql .=
", ".((int)
$conf->entity);
1840 $sql .=
", ".(empty($this->vat_reverse_charge) ?
'0' :
'1');
1841 $sql .=
", '".$this->db->escape($this->accountancy_code_customer_general).
"'";
1842 $sql .=
", '".$this->db->escape($this->code_compta_client).
"'";
1843 $sql .=
", '".$this->db->escape($this->accountancy_code_supplier_general).
"'";
1844 $sql .=
", '".$this->db->escape($this->code_compta_fournisseur).
"'";
1845 $sql .=
", '".$this->db->escape($this->accountancy_code_buy).
"'";
1846 $sql .=
", '".$this->db->escape($this->accountancy_code_sell).
"'";
1848 $result = $this->db->query($sql);
1851 $this->error =
'ErrorFailedToUpdateAccountancyForEntity';
1870 if (!$error && $call_trigger) {
1872 $result = $this->call_trigger(
'COMPANY_MODIFY', $user);
1880 dol_syslog(get_class($this).
"::Update success");
1881 $this->db->commit();
1884 $this->db->rollback();
1888 if ($this->db->errno() ==
'DB_ERROR_RECORD_ALREADY_EXISTS') {
1890 $this->error = $langs->trans(
"ErrorDuplicateField");
1893 $this->error = $this->db->lasterror();
1896 $this->db->rollback();
1900 $this->db->rollback();
1901 dol_syslog(get_class($this).
"::Update fails verify ".implode(
',', $this->errors), LOG_WARNING);
1925 public function fetch($rowid, $ref =
'', $ref_ext =
'', $barcode =
'', $idprof1 =
'', $idprof2 =
'', $idprof3 =
'', $idprof4 =
'', $idprof5 =
'', $idprof6 =
'', $email =
'', $ref_alias =
'', $is_client = 0, $is_supplier = 0)
1930 if (empty($rowid) && empty($ref) && empty($ref_ext) && empty($barcode) && empty($idprof1) && empty($idprof2) && empty($idprof3) && empty($idprof4) && empty($idprof5) && empty($idprof6) && empty($email) && empty($ref_alias)) {
1934 $sql =
'SELECT s.rowid, s.nom as name, s.name_alias, s.entity, s.ref_ext, s.address, s.datec as date_creation, s.prefix_comm';
1935 $sql .=
', s.status, s.fk_warehouse';
1936 $sql .=
', s.price_level';
1937 $sql .=
', GREATEST(s.tms, sef.tms) as date_modification, s.fk_user_creat, s.fk_user_modif';
1938 $sql .=
', s.phone, s.phone_mobile, s.fax, s.email';
1939 $sql .=
', s.socialnetworks';
1940 $sql .=
', s.url, s.zip, s.town, s.note_private, s.note_public, s.client, s.fournisseur';
1941 $sql .=
', s.siren as idprof1, s.siret as idprof2, s.ape as idprof3, s.idprof4, s.idprof5, s.idprof6';
1942 $sql .=
', s.capital, s.tva_intra, s.euid';
1943 $sql .=
', s.fk_typent as typent_id';
1944 $sql .=
', s.fk_effectif as effectif_id';
1945 $sql .=
', s.fk_forme_juridique as forme_juridique_code';
1946 $sql .=
', s.birth';
1947 $sql .=
', s.webservices_url, s.webservices_key, s.model_pdf, s.last_main_doc';
1949 $sql .=
', s.accountancy_code_customer_general, s.code_compta';
1950 $sql .=
', s.accountancy_code_supplier_general, s.code_compta_fournisseur';
1951 $sql .=
', s.accountancy_code_buy, s.accountancy_code_sell';
1952 $sql .=
', s.vat_reverse_charge as soc_vat_reverse_charge';
1954 $sql .=
', spe.accountancy_code_customer_general, spe.accountancy_code_customer as code_compta';
1955 $sql .=
', spe.accountancy_code_supplier_general, spe.accountancy_code_supplier as code_compta_fournisseur';
1956 $sql .=
', spe.accountancy_code_buy, spe.accountancy_code_sell';
1957 $sql .=
', spe.vat_reverse_charge as spe_vat_reverse_charge';
1959 $sql .=
', s.code_client, s.code_fournisseur, s.parent, s.barcode';
1960 $sql .=
', s.fk_departement as state_id, s.fk_pays as country_id, s.fk_stcomm, s.mode_reglement, s.cond_reglement, s.deposit_percent, s.transport_mode';
1961 $sql .=
', s.fk_account, s.tva_assuj';
1962 $sql .=
', s.mode_reglement_supplier, s.cond_reglement_supplier, s.transport_mode_supplier';
1963 $sql .=
', s.localtax1_assuj, s.localtax1_value, s.localtax2_assuj, s.localtax2_value, s.fk_prospectlevel, s.default_lang, s.logo, s.logo_squarred';
1964 $sql .=
', s.fk_shipping_method';
1965 $sql .=
', s.outstanding_limit, s.import_key, s.canvas, s.fk_incoterms, s.location_incoterms';
1966 $sql .=
', s.order_min_amount, s.supplier_order_min_amount';
1967 $sql .=
', s.fk_multicurrency, s.multicurrency_code';
1968 $sql .=
', fj.libelle as forme_juridique';
1969 $sql .=
', e.libelle as effectif';
1970 $sql .=
', c.code as country_code, c.label as country';
1971 $sql .=
', d.code_departement as state_code, d.nom as state';
1972 $sql .=
', r.rowid as region_id, r.code_region as region_code';
1973 $sql .=
', st.libelle as stcomm, st.picto as stcomm_picto';
1974 $sql .=
', te.code as typent_code';
1975 $sql .=
', i.libelle as label_incoterms';
1977 $sql .=
', s.remise_client, s.remise_supplier';
1979 $sql .=
', sr.remise_client, sr2.remise_supplier';
1981 $sql .=
' FROM '.MAIN_DB_PREFIX.
'societe as s';
1982 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'societe_extrafields as sef ON sef.fk_object=s.rowid';
1984 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"societe_perentity as spe ON spe.fk_soc = s.rowid AND spe.entity = ".((int)
$conf->entity);
1986 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_effectif as e ON s.fk_effectif = e.id';
1987 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_country as c ON s.fk_pays = c.rowid';
1988 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_stcomm as st ON s.fk_stcomm = st.id';
1989 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_forme_juridique as fj ON s.fk_forme_juridique = fj.code';
1990 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_departements as d ON s.fk_departement = d.rowid';
1991 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_regions as r ON d.fk_region = r.code_region ';
1992 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_typent as te ON s.fk_typent = te.id';
1993 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_incoterms as i ON s.fk_incoterms = i.rowid';
1997 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'societe_remise as sr ON sr.rowid = (SELECT MAX(rowid) FROM '.MAIN_DB_PREFIX.
'societe_remise WHERE fk_soc = s.rowid AND entity IN ('.
getEntity(
'discount').
'))';
1998 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'societe_remise_supplier as sr2 ON sr2.rowid = (SELECT MAX(rowid) FROM '.MAIN_DB_PREFIX.
'societe_remise_supplier WHERE fk_soc = s.rowid AND entity IN ('.
getEntity(
'discount').
'))';
2000 $sql .=
' WHERE s.entity IN ('.getEntity($this->element).
')';
2004 $sql .=
' AND s.client > 0';
2007 $sql .=
' AND s.fournisseur > 0';
2011 $sql .=
' AND s.rowid = '.((int) $rowid);
2014 $sql .=
" AND s.nom = '".$this->db->escape($ref).
"'";
2017 $sql .=
" AND s.name_alias = '".$this->db->escape($ref_alias).
"'";
2020 $sql .=
" AND s.ref_ext = '".$this->db->escape($ref_ext).
"'";
2023 $sql .=
" AND s.barcode = '".$this->db->escape($barcode).
"'";
2026 $sql .=
" AND s.siren = '".$this->db->escape($idprof1).
"'";
2029 $sql .=
" AND s.siret = '".$this->db->escape($idprof2).
"'";
2032 $sql .=
" AND s.ape = '".$this->db->escape($idprof3).
"'";
2035 $sql .=
" AND s.idprof4 = '".$this->db->escape($idprof4).
"'";
2038 $sql .=
" AND s.idprof5 = '".$this->db->escape($idprof5).
"'";
2041 $sql .=
" AND s.idprof6 = '".$this->db->escape($idprof6).
"'";
2044 $sql .=
" AND s.email = '".$this->db->escape($email).
"'";
2047 $resql = $this->db->query($sql);
2049 $num = $this->db->num_rows($resql);
2051 $this->error =
'Fetch found several records. Rename one of thirdparties to avoid duplicate.';
2055 $obj = $this->db->fetch_object($resql);
2057 $this->
id = $obj->rowid;
2058 $this->entity = $obj->entity;
2059 $this->canvas = $obj->canvas;
2061 $this->
ref = $obj->name;
2062 $this->
name = $obj->name;
2063 $this->nom = $obj->name;
2064 $this->name_alias = $obj->name_alias;
2065 $this->ref_ext = $obj->ref_ext;
2067 $this->date_creation = $this->db->jdate($obj->date_creation);
2068 $this->date_modification = $this->db->jdate($obj->date_modification);
2069 $this->user_creation_id = $obj->fk_user_creat;
2070 $this->user_modification_id = $obj->fk_user_modif;
2072 $this->
address = $obj->address;
2073 $this->zip = $obj->zip;
2074 $this->town = $obj->town;
2076 $this->country_id = $obj->country_id;
2077 $this->country_code = $obj->country_id ? $obj->country_code :
'';
2078 $this->country = $obj->country_id ? (($langs->transnoentities(
'Country'.$obj->country_code) !=
'Country'.$obj->country_code) ? $langs->transnoentities(
'Country'.$obj->country_code) : $obj->country) :
'';
2080 $this->state_id = $obj->state_id;
2081 $this->state_code = $obj->state_code;
2082 $this->region_id = $obj->region_id;
2083 $this->region_code = $obj->region_code;
2084 $this->state = ($obj->state !=
'-' ? $obj->state :
'');
2086 $transcode = $langs->trans(
'StatusProspect'.$obj->fk_stcomm);
2087 $label = ($transcode !=
'StatusProspect'.$obj->fk_stcomm ? $transcode : $obj->stcomm);
2088 $this->stcomm_id = $obj->fk_stcomm;
2089 $this->status_prospect_label = $label;
2090 $this->stcomm_picto = $obj->stcomm_picto;
2092 $this->
email = $obj->email;
2093 $this->socialnetworks = ($obj->socialnetworks ? (array) json_decode($obj->socialnetworks,
true) : array());
2095 $this->url = $obj->url;
2096 $this->phone = $obj->phone;
2097 $this->phone_mobile = $obj->phone_mobile;
2098 $this->fax = $obj->fax;
2100 $this->parent = $obj->parent;
2102 $this->idprof1 = $obj->idprof1;
2103 $this->idprof2 = $obj->idprof2;
2104 $this->idprof3 = $obj->idprof3;
2105 $this->idprof4 = $obj->idprof4;
2106 $this->idprof5 = $obj->idprof5;
2107 $this->idprof6 = $obj->idprof6;
2109 $this->capital = $obj->capital;
2111 $this->code_client = $obj->code_client;
2112 $this->code_fournisseur = $obj->code_fournisseur;
2114 $this->accountancy_code_customer_general = $obj->accountancy_code_customer_general;
2115 $this->code_compta_client = $obj->code_compta;
2116 $this->accountancy_code_supplier_general = $obj->accountancy_code_supplier_general;
2117 $this->code_compta_fournisseur = $obj->code_compta_fournisseur;
2119 $this->barcode = $obj->barcode;
2121 $this->tva_assuj = $obj->tva_assuj;
2122 $this->tva_intra = $obj->tva_intra;
2124 if (!empty($obj->spe_vat_reverse_charge)) {
2125 $this->vat_reverse_charge = $obj->spe_vat_reverse_charge;
2126 } elseif (!empty($obj->soc_vat_reverse_charge)) {
2127 $this->vat_reverse_charge = $obj->soc_vat_reverse_charge;
2129 $this->vat_reverse_charge = 0;
2131 $this->euid = $obj->euid;
2133 $this->
status = $obj->status;
2136 $this->localtax1_assuj = $obj->localtax1_assuj;
2137 $this->localtax2_assuj = $obj->localtax2_assuj;
2139 $this->localtax1_value = $obj->localtax1_value;
2140 $this->localtax2_value = $obj->localtax2_value;
2142 $this->typent_id = $obj->typent_id;
2143 $this->typent_code = $obj->typent_code;
2145 $this->effectif_id = $obj->effectif_id;
2146 $this->effectif = $obj->effectif_id ? $obj->effectif :
'';
2148 $this->forme_juridique_code = $obj->forme_juridique_code;
2149 $this->forme_juridique = $obj->forme_juridique_code ? $obj->forme_juridique :
'';
2150 $this->birth = $this->db->jdate($obj->birth);
2152 $this->fk_prospectlevel = $obj->fk_prospectlevel;
2154 $this->prefix_comm = $obj->prefix_comm;
2156 $this->remise_percent = $obj->remise_client ?
price2num($obj->remise_client) : 0;
2157 $this->remise_supplier_percent = $obj->remise_supplier;
2159 $this->mode_reglement_id = $obj->mode_reglement;
2160 $this->cond_reglement_id = $obj->cond_reglement;
2161 $this->deposit_percent = $obj->deposit_percent;
2162 $this->transport_mode_id = $obj->transport_mode;
2163 $this->mode_reglement_supplier_id = $obj->mode_reglement_supplier;
2164 $this->cond_reglement_supplier_id = $obj->cond_reglement_supplier;
2165 $this->transport_mode_supplier_id = $obj->transport_mode_supplier;
2166 $this->shipping_method_id = ($obj->fk_shipping_method > 0) ? $obj->fk_shipping_method :
null;
2167 $this->fk_account = $obj->fk_account;
2169 $this->client = $obj->client;
2170 $this->fournisseur = $obj->fournisseur;
2172 $this->note = $obj->note_private;
2173 $this->note_private = $obj->note_private;
2174 $this->note_public = $obj->note_public;
2175 $this->model_pdf = $obj->model_pdf;
2176 $this->default_lang = $obj->default_lang;
2177 $this->logo = $obj->logo;
2178 $this->logo_squarred = $obj->logo_squarred;
2180 $this->webservices_url = $obj->webservices_url;
2181 $this->webservices_key = $obj->webservices_key;
2183 $this->accountancy_code_buy = $obj->accountancy_code_buy;
2184 $this->accountancy_code_sell = $obj->accountancy_code_sell;
2186 $this->outstanding_limit = $obj->outstanding_limit;
2187 $this->order_min_amount = $obj->order_min_amount;
2188 $this->supplier_order_min_amount = $obj->supplier_order_min_amount;
2191 $this->price_level = $obj->price_level;
2194 $this->fk_warehouse = $obj->fk_warehouse;
2196 $this->import_key = $obj->import_key;
2199 $this->fk_incoterms = $obj->fk_incoterms;
2200 $this->location_incoterms = $obj->location_incoterms;
2201 $this->label_incoterms = $obj->label_incoterms;
2204 $this->fk_multicurrency = $obj->fk_multicurrency;
2205 $this->multicurrency_code = $obj->multicurrency_code;
2208 $this->model_pdf = $obj->model_pdf;
2209 $this->last_main_doc = $obj->last_main_doc;
2211 $result = $this->id;
2219 $this->db->free($resql);
2221 $this->error = $this->db->lasterror();
2222 $this->errors[] = $this->db->lasterror();
2228 $this->price_level = 1;
2254 public function findNearest($rowid = 0, $ref =
'', $ref_ext =
'', $barcode =
'', $idprof1 =
'', $idprof2 =
'', $idprof3 =
'', $idprof4 =
'', $idprof5 =
'', $idprof6 =
'', $email =
'', $ref_alias =
'', $is_client = 0, $is_supplier = 0)
2261 dol_syslog(get_class($this).
"::findNearest", LOG_DEBUG);
2262 $tmpthirdparty =
new Societe($this->db);
2265 $result = $tmpthirdparty->fetch($rowid, $ref, $ref_ext, $barcode, $idprof1, $idprof2, $idprof3, $idprof4, $idprof5, $idprof6, $email, $ref_alias, $is_client, $is_supplier);
2271 dol_syslog(
"Thirdparty not found with exact match so we try barcode search", LOG_DEBUG);
2273 $result = $tmpthirdparty->fetch(0,
'',
'', $barcode,
'',
'',
'',
'',
'',
'',
'',
'', $is_client, $is_supplier);
2279 $sqlstart =
"SELECT s.rowid as id FROM ".MAIN_DB_PREFIX.
"societe as s";
2280 $sqlstart .=
' WHERE s.entity IN ('.getEntity($this->element).
')';
2282 $sqlstart .=
' AND s.client > 0';
2285 $sqlstart .=
' AND s.fournisseur > 0';
2289 dol_syslog(
"Thirdparty not found with barcode search so we try profids search", LOG_DEBUG);
2292 $sqlprof .=
" s.siren = '".$this->db->escape($idprof1).
"'";
2298 $sqlprof .=
" s.siret = '".$this->db->escape($idprof2).
"'";
2304 $sqlprof .=
" s.ape = '".$this->db->escape($idprof3).
"'";
2310 $sqlprof .=
" s.idprof4 = '".$this->db->escape($idprof4).
"'";
2316 $sqlprof .=
" s.idprof5 = '".$this->db->escape($idprof5).
"'";
2322 $sqlprof .=
" s.idprof6 = '".$this->db->escape($idprof6).
"'";
2326 $sqlprofquery = $sqlstart .
" AND (".$sqlprof.
" )";
2327 $resql = $this->db->query($sqlprofquery);
2329 $num = $this->db->num_rows($resql);
2331 $this->error =
'Fetch found several records. Rename one of thirdparties to avoid duplicate.';
2335 $obj = $this->db->fetch_object($resql);
2341 $this->error = $this->db->lasterror();
2342 $this->errors[] = $this->db->lasterror();
2351 dol_syslog(
"Thirdparty not found with profids search so we try email search", LOG_DEBUG);
2353 $result = $tmpthirdparty->fetch(0,
'',
'',
'',
'',
'',
'',
'',
'',
'', $email,
'', $is_client, $is_supplier);
2360 dol_syslog(
"Thirdparty not found with email search so we try ref, ref_ext or ref_alias search", LOG_DEBUG);
2363 $sqlref .=
" s.nom = '".$this->db->escape($ref).
"'";
2369 $sqlref .=
" s.name_alias = '".$this->db->escape($ref_alias).
"'";
2375 $sqlref .=
" s.ref_ext = '".$this->db->escape($ref_ext).
"'";
2379 $sqlrefquery = $sqlstart .
" AND (".$sqlref.
" )";
2380 $resql = $this->db->query($sqlrefquery);
2382 $num = $this->db->num_rows($resql);
2384 $this->error =
'Fetch found several records. Rename one of thirdparties to avoid duplicate.';
2388 $obj = $this->db->fetch_object($resql);
2394 $this->error = $this->db->lasterror();
2395 $this->errors[] = $this->db->lasterror();
2410 public function delete($id, $fuser =
null, $call_trigger = 1)
2412 global
$conf, $user;
2414 if (empty($fuser)) {
2418 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
2420 $entity = isset($this->entity) ? $this->entity :
$conf->entity;
2422 dol_syslog(get_class($this).
"::delete", LOG_DEBUG);
2427 if (empty($objectisused)) {
2431 if ($call_trigger) {
2433 $result = $this->call_trigger(
'COMPANY_DELETE', $fuser);
2441 require_once DOL_DOCUMENT_ROOT.
'/categories/class/categorie.class.php';
2443 $toute_categs = array();
2446 $toute_categs[
'customer'] = $static_cat->containing($this->
id, Categorie::TYPE_CUSTOMER);
2447 $toute_categs[
'supplier'] = $static_cat->containing($this->
id, Categorie::TYPE_SUPPLIER);
2450 foreach ($toute_categs as $type => $categs_type) {
2451 foreach ($categs_type as $cat) {
2452 $cat->del_type($this, $type);
2458 foreach ($this->childtablesoncascade as $tabletodelete) {
2459 $deleteFromObject = explode(
':', $tabletodelete, 4);
2460 if (count($deleteFromObject) >= 2) {
2461 $className = str_replace(
'@',
'', $deleteFromObject[0]);
2462 $filepath = $deleteFromObject[1];
2463 $columnName = $deleteFromObject[2];
2465 $child_object =
new $className($this->db);
2466 '@phan-var-force CommonObject $child_object';
2467 $result = $child_object->deleteByParentField($id, $columnName);
2470 $this->errors[] = $child_object->error;
2475 $this->errors[] =
'Cannot include child class file '.$filepath;
2479 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.$tabletodelete;
2480 $sql .=
" WHERE fk_soc = ".((int) $id);
2481 if (!$this->db->query($sql)) {
2483 $this->errors[] = $this->db->lasterror();
2495 dol_syslog(get_class($this).
"::delete error -3 ".$this->error, LOG_ERR);
2501 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"societe";
2502 $sql .=
" SET parent = NULL";
2503 $sql .=
" WHERE parent = ".((int) $id);
2504 if (!$this->db->query($sql)) {
2506 $this->errors[] = $this->db->lasterror();
2513 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"societe_perentity";
2514 $sql .=
" WHERE fk_soc = ".((int) $id);
2515 if (!$this->db->query($sql)) {
2517 $this->errors[] = $this->db->lasterror();
2521 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"societe";
2522 $sql .=
" WHERE rowid = ".((int) $id);
2523 if (!$this->db->query($sql)) {
2525 $this->errors[] = $this->db->lasterror();
2530 $this->db->commit();
2533 if (!empty(
$conf->societe->multidir_output[$entity])) {
2534 $docdir =
$conf->societe->multidir_output[$entity].
"/".$id;
2543 $this->db->rollback();
2547 dol_syslog(
"Can't remove thirdparty with id ".$id.
". There are ".$objectisused.
" children", LOG_WARNING);
2563 dol_syslog(get_class($this).
"::set_as_client is deprecated use setAsCustomer instead", LOG_NOTICE);
2577 if (($this->client == 2 || $this->client == 3) && !
getDolGlobalInt(
'SOCIETE_DISABLE_PROSPECTSCUSTOMERS')) {
2580 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element;
2581 $sql .=
" SET client = ".((int) $newclient);
2582 $sql .=
" WHERE rowid = ".((int) $this->
id);
2584 $resql = $this->db->query($sql);
2586 $this->client = $newclient;
2607 global
$conf, $langs;
2610 $note = trim($note);
2612 $this->error = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"NoteReason"));
2616 dol_syslog(get_class($this).
"::set_remise_client ".$remise.
", ".$note.
", ".$user->id);
2624 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"societe ";
2625 $sql .=
" SET remise_client = '".$this->db->escape((
string) $remise).
"'";
2626 $sql .=
" WHERE rowid = ".((int) $this->
id);
2627 $resql = $this->db->query($sql);
2629 $this->db->rollback();
2630 $this->error = $this->db->error();
2635 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"societe_remise";
2636 $sql .=
" (entity, datec, fk_soc, remise_client, note, fk_user_author)";
2637 $sql .=
" VALUES (".((int)
$conf->entity).
", '".$this->db->idate($now).
"', ".((int) $this->
id).
", '".$this->db->escape((
string) $remise).
"',";
2638 $sql .=
" '".$this->db->escape($note).
"',";
2639 $sql .=
" ".((int) $user->id);
2642 $resql = $this->db->query($sql);
2644 $this->db->rollback();
2645 $this->error = $this->db->lasterror();
2649 $this->db->commit();
2668 global
$conf, $langs;
2671 $note = trim($note);
2673 $this->error = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"NoteReason"));
2677 dol_syslog(get_class($this).
"::set_remise_supplier ".$remise.
", ".$note.
", ".$user->id);
2685 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"societe ";
2686 $sql .=
" SET remise_supplier = ".((float) $remise);
2687 $sql .=
" WHERE rowid = ".((int) $this->
id);
2688 $resql = $this->db->query($sql);
2690 $this->db->rollback();
2691 $this->error = $this->db->error();
2696 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"societe_remise_supplier";
2697 $sql .=
" (entity, datec, fk_soc, remise_supplier, note, fk_user_author)";
2698 $sql .=
" VALUES (".((int)
$conf->entity).
", '".$this->db->idate($now).
"', ".((int) $this->
id).
", ".((float) $remise).
",";
2699 $sql .=
" '".$this->db->escape($note).
"',";
2700 $sql .=
" ".((int) $user->id);
2703 $resql = $this->db->query($sql);
2705 $this->db->rollback();
2706 $this->error = $this->db->lasterror();
2710 $this->db->commit();
2729 public function set_remise_except($remise,
User $user, $desc, $vatrate =
'', $discount_type = 0, $price_base_type =
'HT')
2736 $desc = trim($desc);
2739 if (!($remise > 0)) {
2740 $this->error = $langs->trans(
"ErrorWrongValueForParameter",
"1");
2744 $this->error = $langs->trans(
"ErrorWrongValueForParameter",
"3");
2748 if ($this->
id > 0) {
2754 if (preg_match(
'/\((.*)\)/', $vatrate, $reg)) {
2755 $vat_src_code = $reg[1];
2756 $vatrate = preg_replace(
'/\s*\(.*\)/',
'', $vatrate);
2759 require_once DOL_DOCUMENT_ROOT.
'/core/class/discount.class.php';
2762 $discount->fk_soc = $this->id;
2763 $discount->socid = $this->id;
2765 $discount->discount_type = $discount_type;
2766 $discount->multicurrency_code = $this->multicurrency_code;
2768 $discount->multicurrency_tx = $this->multicurrency_tx;
2772 $discount->generateFromAmount($remise, ($price_base_type ==
'TTC' ? 1 : 0), $vat_tx, $taxes[
'localtax1'], $taxes[
'localtax2'], (
int) $taxes[
'localtax1_type'], (int) $taxes[
'localtax2_type']);
2774 $discount->vat_src_code = $vat_src_code;
2776 $discount->description = $desc;
2778 $result = $discount->create($user);
2782 $this->error = $discount->error;
2801 require_once DOL_DOCUMENT_ROOT.
'/core/class/discount.class.php';
2804 $result = $discountstatic->getAvailableDiscounts($this, $user, $filter, $maxvalue, $discount_type);
2808 $this->error = $discountstatic->error;
2824 $sql =
"SELECT COUNT(f.rowid) as nb, SUM(f.total_ttc) as amount, SUM(f.multicurrency_total_ttc) as multicurrency_amount";
2825 if (!empty($discount_type)) {
2826 $sql .=
" FROM ".$this->db->prefix().
"facture_fourn as f";
2828 $sql .=
" FROM ".$this->db->prefix().
"facture as f";
2830 $sql .=
" WHERE f.entity = ".$conf->entity;
2831 $sql .=
" AND paye = 0 AND fk_statut = 1";
2832 $sql .=
" AND f.type = ".CommonInvoice::TYPE_CREDIT_NOTE;
2833 $sql .=
" AND NOT EXISTS (SELECT rowid FROM ".$this->db->prefix().
"societe_remise_except as rc";
2834 $sql .=
" WHERE rc.discount_type = ".((int) $discount_type);
2835 if (!empty($discount_type)) {
2836 $sql .=
" AND rc.fk_invoice_supplier = f.rowid";
2838 $sql .=
" AND rc.fk_facture = f.rowid";
2840 $sql .=
" AND rc.fk_soc = ".((int) $this->
id);
2842 $sql .=
" AND f.fk_soc = ".((int) $this->
id);
2844 $resql = $this->db->query($sql);
2846 $obj = $this->db->fetch_object($resql);
2868 $reparray = array();
2870 $sql =
"SELECT u.rowid, u.login, u.lastname, u.firstname, u.office_phone, u.job, u.email, u.statut as status, u.entity, u.photo, u.gender";
2871 $sql .=
", u.office_fax, u.user_mobile, u.personal_mobile";
2872 $sql .=
" FROM ".MAIN_DB_PREFIX.
"societe_commerciaux as sc, ".MAIN_DB_PREFIX.
"user as u";
2875 $sql .=
" WHERE u.rowid IN (SELECT ug.fk_user FROM ".$this->db->prefix().
"usergroup_user as ug WHERE ug.entity IN (".
getEntity(
'usergroup').
"))";
2877 $sql .=
" WHERE entity IN (0, ".((int)
$conf->entity).
")";
2880 $sql .=
" AND u.rowid = sc.fk_user AND sc.fk_soc = ".((int) $this->
id);
2881 if (empty($sortfield)) {
2882 $sortfield =
'u.lastname,u.firstname';
2884 if (empty($sortorder)) {
2885 $sortorder = str_repeat(
'ASC,', count(explode(
',', $sortfield)) - 1) .
'ASC';
2887 $sql .= $this->db->order($sortfield, $sortorder);
2889 $resql = $this->db->query($sql);
2891 $num = $this->db->num_rows($resql);
2894 $obj = $this->db->fetch_object($resql);
2897 $reparray[$i][
'id'] = (int) $obj->rowid;
2898 $reparray[$i][
'lastname'] = $obj->lastname;
2899 $reparray[$i][
'firstname'] = $obj->firstname;
2900 $reparray[$i][
'email'] = $obj->email;
2901 $reparray[$i][
'phone'] = $obj->office_phone;
2902 $reparray[$i][
'office_phone'] = $obj->office_phone;
2903 $reparray[$i][
'office_fax'] = $obj->office_fax;
2904 $reparray[$i][
'user_mobile'] = $obj->user_mobile;
2905 $reparray[$i][
'personal_mobile'] = $obj->personal_mobile;
2906 $reparray[$i][
'job'] = $obj->job;
2907 $reparray[$i][
'statut'] = $obj->status;
2908 $reparray[$i][
'status'] = $obj->status;
2909 $reparray[$i][
'entity'] = $obj->entity;
2910 $reparray[$i][
'login'] = $obj->login;
2911 $reparray[$i][
'photo'] = $obj->photo;
2912 $reparray[$i][
'gender'] = $obj->gender;
2914 $reparray[] = (int) $obj->rowid;
2937 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"societe";
2938 $sql .=
" SET price_level = ".((int) $price_level);
2939 $sql .=
" WHERE rowid = ".((int) $this->
id);
2941 if (!$this->db->query($sql)) {
2946 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"societe_prices";
2947 $sql .=
" (datec, fk_soc, price_level, fk_user_author)";
2948 $sql .=
" VALUES ('".$this->db->idate($now).
"', ".((int) $this->
id).
", ".((int) $price_level).
", ".((int) $user->id).
")";
2950 if (!$this->db->query($sql)) {
2972 if ($this->
id > 0 && $commid > 0) {
2975 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"societe_commerciaux";
2976 $sql .=
" WHERE fk_soc = ".((int) $this->
id).
" AND fk_user = ".((int) $commid);
2978 $resql = $this->db->query($sql);
2980 dol_syslog(get_class($this).
"::add_commercial Error ".$this->db->lasterror());
2985 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"societe_commerciaux";
2986 $sql .=
" (fk_soc, fk_user)";
2987 $sql .=
" VALUES (".((int) $this->
id).
", ".((int) $commid).
")";
2989 $resql = $this->db->query($sql);
2991 dol_syslog(get_class($this).
"::add_commercial Error ".$this->db->lasterror());
2997 $this->context = array(
'commercial_modified' => $commid);
2999 $result = $this->call_trigger(
'COMPANY_LINK_SALE_REPRESENTATIVE', $user);
3006 $this->db->commit();
3009 $this->db->rollback();
3029 $this->context = array(
'commercial_modified' => $commid);
3031 $result = $this->call_trigger(
'COMPANY_UNLINK_SALE_REPRESENTATIVE', $user);
3036 if ($this->
id > 0 && $commid > 0) {
3037 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"societe_commerciaux ";
3038 $sql .=
" WHERE fk_soc = ".((int) $this->
id).
" AND fk_user = ".((int) $commid);
3040 if (!$this->db->query($sql)) {
3042 dol_syslog(get_class($this).
"::del_commercial Erreur");
3062 global
$conf, $langs, $user;
3064 $langs->loadLangs([
'companies',
'commercial']);
3068 $option = $params[
'option'] ??
'';
3069 $nofetch = !empty($params[
'nofetch']);
3071 $noaliasinname = (empty($params[
'noaliasinname']) ? 0 : $params[
'noaliasinname']);
3074 return [
'optimize' => $langs->trans(
"ShowCompany")];
3077 if (!empty($this->logo) && class_exists(
'Form')) {
3078 $photo =
'<div class="photointooltip floatright">';
3079 $photo .=
Form::showphoto(
'societe', $this, 0, 40, 0,
'photoref',
'mini', 0);
3081 $datas[
'photo'] = $photo;
3088 $datas[
'divopen'] =
'<div class="centpercent">';
3090 if ($option ==
'customer' || $option ==
'compta' || $option ==
'category') {
3091 $datas[
'picto'] =
img_picto(
'', $this->picto).
' <u class="paddingrightonly">'.$langs->trans(
"Customer").
'</u>';
3092 } elseif ($option ==
'prospect' && !
getDolGlobalString(
'SOCIETE_DISABLE_PROSPECTS')) {
3093 $datas[
'picto'] =
img_picto(
'', $this->picto).
' <u class="paddingrightonly">'.$langs->trans(
"Prospect").
'</u>';
3094 } elseif ($option ==
'supplier' || $option ==
'category_supplier') {
3095 $datas[
'picto'] =
img_picto(
'', $this->picto).
' <u class="paddingrightonly">'.$langs->trans(
"Supplier").
'</u>';
3096 } elseif ($option ==
'agenda') {
3097 $datas[
'picto'] =
img_picto(
'', $this->picto).
' <u class="paddingrightonly">'.$langs->trans(
"ThirdParty").
'</u>';
3098 } elseif ($option ==
'project') {
3099 $datas[
'picto'] =
img_picto(
'', $this->picto).
' <u class="paddingrightonly">'.$langs->trans(
"ThirdParty").
'</u>';
3100 } elseif ($option ==
'margin') {
3101 $datas[
'picto'] =
img_picto(
'', $this->picto).
' <u class="paddingrightonly">'.$langs->trans(
"ThirdParty").
'</u>';
3102 } elseif ($option ==
'contact') {
3103 $datas[
'picto'] =
img_picto(
'', $this->picto).
' <u class="paddingrightonly">'.$langs->trans(
"ThirdParty").
'</u>';
3104 } elseif ($option ==
'ban') {
3105 $datas[
'picto'] =
img_picto(
'', $this->picto).
' <u class="paddingrightonly">'.$langs->trans(
"ThirdParty").
'</u>';
3109 if (empty($datas[
'picto'])) {
3110 $datas[
'picto'] =
img_picto(
'', $this->picto).
' <u class="paddingrightonly">'.$langs->trans(
"ThirdParty").
'</u>';
3112 if (isset($this->
status)) {
3113 $datas[
'status'] =
' '.$this->getLibStatut(5);
3115 if (isset($this->client) && isset($this->fournisseur)) {
3116 $datas[
'type'] =
' ' . $this->
getTypeUrl(1,
'', 0,
'span');
3119 if (!empty($this->name_alias) && empty($noaliasinname)) {
3122 if (!empty($this->
email)) {
3123 $datas[
'email'] =
'<br>'.img_picto(
'',
'email',
'class="pictofixedwidth"').$this->email;
3125 if (!empty($this->url)) {
3126 $datas[
'url'] =
'<br>'.img_picto(
'',
'globe',
'class="pictofixedwidth"').$this->url;
3128 if (!empty($this->phone) || !empty($this->phone_mobile) || !empty($this->fax)) {
3129 $phonelist = array();
3131 $phonelist[] =
dol_print_phone($this->phone, $this->country_code, $this->
id, 0,
'',
' ',
'phone');
3134 if ($this->phone_mobile) {
3135 $phonelist[] =
dol_print_phone($this->phone_mobile, $this->country_code, $this->
id, 0,
'',
' ',
'mobile');
3138 $phonelist[] =
dol_print_phone($this->fax, $this->country_code, $this->
id, 0,
'',
' ',
'fax');
3140 $datas[
'phonelist'] =
'<br>'.implode(
' ', $phonelist);
3144 $datas[
'address'] =
'<br><b>'.$langs->trans(
"Address").
':</b> '.
dol_format_address($this, 1,
', ', $langs);
3145 } elseif (!empty($this->country_code)) {
3146 $datas[
'address'] =
'<br><b>'.$langs->trans(
'Country').
':</b> '.$this->country_code;
3148 if (!empty($this->tva_intra) || (
getDolGlobalString(
'SOCIETE_SHOW_FIELD_IN_TOOLTIP') && strpos(
$conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP,
'vatnumber') !==
false)) {
3149 $datas[
'vatintra'] =
'<br><b>'.$langs->trans(
'VATIntra').
':</b> '.
dol_escape_htmltag($this->tva_intra);
3152 if (!empty($this->euid) || (
getDolGlobalString(
'SOCIETE_SHOW_FIELD_IN_TOOLTIP') && strpos(
$conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP,
'euid') !==
false)) {
3153 $datas[
'euid'] =
'<br><b>'.$langs->trans(
'EUIDShort').
':</b> '.
dol_escape_htmltag($this->euid);
3157 if (strpos(
$conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP,
'profid1') !==
false && $langs->trans(
'ProfId1'.$this->country_code) !=
'-') {
3158 $datas[
'profid1'] =
'<br><b>'.$langs->trans(
'ProfId1'.$this->country_code).
':</b> '.$this->idprof1;
3160 if (strpos(
$conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP,
'profid2') !==
false && $langs->trans(
'ProfId2'.$this->country_code) !=
'-') {
3161 $datas[
'profid2'] =
'<br><b>'.$langs->trans(
'ProfId2'.$this->country_code).
':</b> '.$this->idprof2;
3163 if (strpos(
$conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP,
'profid3') !==
false && $langs->trans(
'ProfId3'.$this->country_code) !=
'-') {
3164 $datas[
'profid3'] =
'<br><b>'.$langs->trans(
'ProfId3'.$this->country_code).
':</b> '.$this->idprof3;
3166 if (strpos(
$conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP,
'profid4') !==
false && $langs->trans(
'ProfId4'.$this->country_code) !=
'-') {
3167 $datas[
'profid4'] =
'<br><b>'.$langs->trans(
'ProfId4'.$this->country_code).
':</b> '.$this->idprof4;
3169 if (strpos(
$conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP,
'profid5') !==
false && $langs->trans(
'ProfId5'.$this->country_code) !=
'-') {
3170 $datas[
'profid5'] =
'<br><b>'.$langs->trans(
'ProfId5'.$this->country_code).
':</b> '.$this->idprof5;
3172 if (strpos(
$conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP,
'profid6') !==
false && $langs->trans(
'ProfId6'.$this->country_code) !=
'-') {
3173 $datas[
'profid6'] =
'<br><b>'.$langs->trans(
'ProfId6'.$this->country_code).
':</b> '.$this->idprof6;
3177 $datas[
'separator'] =
'<br>';
3179 if (!empty($this->code_client) && ($this->client == 1 || $this->client == 3)) {
3180 $datas[
'customercode'] =
'<br><b>'.$langs->trans(
'CustomerCode').
':</b> '.$this->code_client;
3182 if (
isModEnabled(
'accounting') && ($this->client == 1 || $this->client == 3)) {
3183 $langs->load(
'compta');
3184 $datas[
'accountancycustomercode'] =
'<br><b>'.$langs->trans(
'CustomerAccountancyCode').
':</b> '.$this->code_compta_client;
3187 if (!$nofetch &&
isModEnabled(
'category') && $this->client) {
3188 require_once DOL_DOCUMENT_ROOT .
'/categories/class/categorie.class.php';
3189 $form =
new Form($this->db);
3190 $datas[
'categories_customer'] =
'<br>' . $form->showCategories($this->
id, Categorie::TYPE_CUSTOMER, 1, 1);
3192 if (!empty($this->code_fournisseur) && $this->fournisseur) {
3193 $datas[
'suppliercode'] =
'<br><b>'.$langs->trans(
'SupplierCode').
':</b> '.$this->code_fournisseur;
3195 if (
isModEnabled(
'accounting') && $this->fournisseur) {
3196 $langs->load(
'compta');
3197 $datas[
'accountancysuppliercode'] =
'<br><b>'.$langs->trans(
'SupplierAccountancyCode').
':</b> '.$this->code_compta_fournisseur;
3200 if (!$nofetch &&
isModEnabled(
'category') && $this->fournisseur) {
3201 require_once DOL_DOCUMENT_ROOT .
'/categories/class/categorie.class.php';
3202 $form =
new Form($this->db);
3203 $datas[
'categories_supplier'] =
'<br>' . $form->showCategories($this->
id, Categorie::TYPE_SUPPLIER, 1, 1);
3206 $datas[
'divclose'] =
'</div>';
3224 public function getNomUrl($withpicto = 0, $option =
'', $maxlen = 0, $notooltip = 0, $save_lastsearch_value = -1, $noaliasinname = 0, $target =
'', $morecss =
'')
3226 global
$conf, $langs, $hookmanager, $user;
3228 if (!empty(
$conf->dol_no_mouse_hover)) {
3232 $name = $this->
name ? $this->
name : $this->nom;
3234 if (
getDolGlobalString(
'SOCIETE_ON_SEARCH_AND_LIST_GO_ON_CUSTOMER_OR_SUPPLIER_CARD')) {
3235 if (empty($option) && $this->client > 0) {
3236 $option =
'customer';
3238 if (empty($option) && $this->fournisseur > 0) {
3239 $option =
'supplier';
3245 if (($this->client) && (!empty($this->code_client)) && (
getDolGlobalInt(
'SOCIETE_ADD_REF_IN_LIST') == 1 ||
getDolGlobalInt(
'SOCIETE_ADD_REF_IN_LIST') == 2)) {
3246 $code = $this->code_client.
' - ';
3249 if (($this->fournisseur) && (!empty($this->code_fournisseur)) && (
getDolGlobalInt(
'SOCIETE_ADD_REF_IN_LIST') == 1 ||
getDolGlobalInt(
'SOCIETE_ADD_REF_IN_LIST') == 3)) {
3250 $code .= $this->code_fournisseur.
' - ';
3255 $name = $code.
' '.$name;
3262 if (!empty($this->name_alias) && empty($noaliasinname)) {
3263 $name .=
' ('.$this->name_alias.
')';
3269 'objecttype' => $this->element,
3270 'option' => $option,
3273 $classfortooltip =
'classfortooltip';
3276 $classfortooltip =
'classforajaxtooltip';
3277 $dataparams =
' data-params="'.dol_escape_htmltag(json_encode($params)).
'"';
3286 if ($option ==
'customer' || $option ==
'compta' || $option ==
'category') {
3287 $linkstart =
'<a href="'.DOL_URL_ROOT.
'/comm/card.php?socid='.$this->id;
3288 } elseif ($option ==
'prospect' && !
getDolGlobalString(
'SOCIETE_DISABLE_PROSPECTS')) {
3289 $linkstart =
'<a href="'.DOL_URL_ROOT.
'/comm/card.php?socid='.$this->id;
3290 } elseif ($option ==
'supplier' || $option ==
'category_supplier') {
3291 $linkstart =
'<a href="'.DOL_URL_ROOT.
'/fourn/card.php?socid='.$this->id;
3292 } elseif ($option ==
'agenda') {
3293 $linkstart =
'<a href="'.DOL_URL_ROOT.
'/societe/agenda.php?socid='.$this->id;
3294 } elseif ($option ==
'project') {
3295 $linkstart =
'<a href="'.DOL_URL_ROOT.
'/societe/project.php?socid='.$this->id;
3296 } elseif ($option ==
'margin') {
3297 $linkstart =
'<a href="'.DOL_URL_ROOT.
'/margin/tabs/thirdpartyMargins.php?socid='.$this->
id.
'&type=1';
3298 } elseif ($option ==
'contact') {
3299 $linkstart =
'<a href="'.DOL_URL_ROOT.
'/societe/contact.php?socid='.$this->id;
3300 } elseif ($option ==
'ban') {
3301 $linkstart =
'<a href="'.DOL_URL_ROOT.
'/societe/paymentmodes.php?socid='.$this->id;
3305 if (empty($linkstart)) {
3306 $linkstart =
'<a href="'.DOL_URL_ROOT.
'/societe/card.php?socid='.$this->id;
3310 $linkstart .= (!empty($this->canvas) ?
'&canvas='.$this->canvas :
'');
3312 $add_save_lastsearch_values = ($save_lastsearch_value == 1 ? 1 : 0);
3313 if ($save_lastsearch_value == -1 && isset($_SERVER[
"PHP_SELF"]) && preg_match(
'/list\.php/', $_SERVER[
"PHP_SELF"])) {
3314 $add_save_lastsearch_values = 1;
3316 if ($add_save_lastsearch_values) {
3317 $linkstart .=
'&save_lastsearch_values=1';
3322 if (empty($notooltip)) {
3324 $label = $langs->trans(
"ShowCompany");
3325 $linkclose .=
' alt="'.dolPrintHTMLForAttribute($label).
'"';
3327 $linkclose .= ($label ?
' title="'.dolPrintHTMLForAttribute($label).
'"' :
' title="tocomplete"');
3328 $linkclose .= $dataparams.
' class="'.$classfortooltip.($morecss ?
' '.$morecss :
'').
' refurl'.($withpicto ?
' valignmiddle' :
'').
'"';
3329 $target_value = array(
'_self',
'_blank',
'_parent',
'_top');
3330 if (in_array($target, $target_value)) {
3331 $linkclose .=
' target="'.dol_escape_htmltag($target).
'"';
3334 $linkclose .=
' class="valignmiddle'.($morecss ?
' '.$morecss :
'').
'"';
3336 $linkstart .= $linkclose.
'>';
3339 if (!$user->hasRight(
'societe',
'client',
'voir') && $user->socid > 0 && $this->id != $user->socid) {
3344 $result .= $linkstart;
3346 $result .=
img_object(($notooltip ?
'' : $label), ($this->picto ? $this->picto :
'generic'), (
' class="'.(($withpicto != 2) ?
'paddingright' :
'').
'"'), 0, 0, $notooltip ? 0 : 1);
3348 if ($withpicto != 2) {
3351 $result .= $linkend;
3354 $hookmanager->initHooks(array(
'thirdpartydao'));
3355 $parameters = array(
3357 'getnomurl' => &$result,
3358 'withpicto ' => $withpicto,
3359 'option' => $option,
3360 'maxlen' => $maxlen,
3361 'notooltip' => $notooltip,
3362 'save_lastsearch_value' => $save_lastsearch_value
3364 $reshook = $hookmanager->executeHooks(
'getNomUrl', $parameters, $this, $action);
3366 $result = $hookmanager->resPrint;
3368 $result .= $hookmanager->resPrint;
3383 public function getTypeUrl($withpicto = 0, $option =
'', $notooltip = 0, $tag =
'a')
3388 if (empty($option) || preg_match(
'/prospect/', $option)) {
3389 if (($this->client == 2 || $this->client == 3) && !
getDolGlobalString(
'SOCIETE_DISABLE_PROSPECTS')) {
3390 $s .=
'<'.$tag.
' class="customer-back opacitymedium" title="'.
dolPrintHTMLForAttribute($langs->trans(
"Prospect")).
'"';
3391 $s .= $tag ==
'a' ?
' href="'.DOL_URL_ROOT.
'/comm/card.php?socid='.$this->
id.
'"' :
'';
3392 $s .=
'>'.dol_substr($langs->trans(
"Prospect"), 0, 1).
'</'.$tag.
'>';
3395 if (empty($option) || preg_match(
'/customer/', $option)) {
3396 if (($this->client == 1 || $this->client == 3) && !
getDolGlobalString(
'SOCIETE_DISABLE_CUSTOMERS')) {
3398 $s .= $tag ==
'a' ?
' href="'.DOL_URL_ROOT.
'/comm/card.php?socid='.$this->
id.
'"' :
'';
3399 $s .=
'>'.dol_substr($langs->trans(
"Customer"), 0, 1).
'</'.$tag.
'>';
3402 if (empty($option) || preg_match(
'/supplier/', $option)) {
3405 $s .= $tag ==
'a' ?
' href="'.DOL_URL_ROOT.
'/fourn/card.php?socid='.$this->
id.
'"' :
'';
3406 $s .=
'>'.dol_substr($langs->trans(
"Supplier"), 0, 1).
'</'.$tag.
'>';
3437 $langs->load(
'companies');
3439 $statusType =
'status4';
3441 $statusType =
'status6';
3444 if (empty($this->labelStatus) || empty($this->labelStatusShort)) {
3445 $this->labelStatus[0] = $langs->transnoentitiesnoconv(
"ActivityCeased");
3446 $this->labelStatus[1] = $langs->transnoentitiesnoconv(
"InActivity");
3447 $this->labelStatusShort[0] = $langs->transnoentitiesnoconv(
"ActivityCeased");
3448 $this->labelStatusShort[1] = $langs->transnoentitiesnoconv(
"InActivity");
3451 return dolGetStatus($this->labelStatus[$status], $this->labelStatusShort[$status],
'', $statusType, $mode);
3468 if ($this->
email && $addthirdparty) {
3469 if (empty($this->
name)) {
3470 $this->
name = $this->nom;
3472 $contact_emails[
'thirdparty'] = ($addthirdparty == 2 ?
'<span class="opacitymedium">' :
'').$langs->transnoentitiesnoconv(
"ThirdParty").($addthirdparty == 2 ?
'</span>' :
'').
': '.
dol_trunc($this->
name, 16).
" <".$this->
email.
">";
3476 return $contact_emails;
3492 if (!empty($this->phone)) {
3493 if (empty($this->
name)) {
3494 $this->
name = $this->nom;
3497 $contact_phone[
'thirdparty'] = $langs->transnoentitiesnoconv(
"ThirdParty").
': '.
dol_trunc($this->
name, 16).
" <".$this->phone.
">";
3499 return $contact_phone;
3515 $contact_property = array();
3518 $sql =
"SELECT rowid, email, statut as status, phone_mobile, lastname, poste, firstname";
3519 $sql .=
" FROM ".MAIN_DB_PREFIX.
"socpeople";
3520 $sql .=
" WHERE fk_soc = ".((int) $this->
id);
3521 $sql .=
" AND entity IN (".getEntity($this->element).
")";
3522 $sql .=
" ORDER BY lastname, firstname";
3524 $resql = $this->db->query($sql);
3526 $nump = $this->db->num_rows($resql);
3530 if ($mode ==
'email') {
3536 while ($i < $nump) {
3537 $obj = $this->db->fetch_object($resql);
3538 if ($mode ==
'email') {
3539 $property = $obj->email;
3540 } elseif ($mode ==
'mobile') {
3541 $property = $obj->phone_mobile;
3543 $property = $obj->$mode;
3547 if ($obj->status == 1 || empty($hidedisabled)) {
3548 if (empty($property)) {
3549 if ($mode ==
'email') {
3550 $property = $langs->transnoentitiesnoconv(
"NoEMail");
3551 } elseif ($mode ==
'mobile') {
3552 $property = $langs->transnoentitiesnoconv(
"NoMobilePhone");
3556 if (!empty($obj->poste)) {
3557 $contact_property[$obj->rowid] = trim(
dolGetFirstLastname($obj->firstname, $obj->lastname)).($obj->poste ?
" - ".$obj->poste :
"").(($mode !=
'poste' && $property) ?
" ".$sepa.$property.$sepb :
'');
3559 $contact_property[$obj->rowid] = trim(
dolGetFirstLastname($obj->firstname, $obj->lastname)).(($mode !=
'poste' && $property) ?
" ".$sepa.$property.$sepb :
'');
3568 return $contact_property;
3581 $contacts = array();
3583 $sql =
"SELECT rowid, lastname, firstname FROM ".MAIN_DB_PREFIX.
"socpeople WHERE fk_soc = ".((int) $this->
id);
3584 $resql = $this->db->query($sql);
3586 $nump = $this->db->num_rows($resql);
3589 while ($i < $nump) {
3590 $obj = $this->db->fetch_object($resql);
3610 require_once DOL_DOCUMENT_ROOT.
'/contact/class/contact.class.php';
3611 $contacts = array();
3613 $sql =
"SELECT rowid FROM ".MAIN_DB_PREFIX.
"socpeople WHERE fk_soc = ".((int) $this->
id);
3614 $resql = $this->db->query($sql);
3616 $nump = $this->db->num_rows($resql);
3619 while ($i < $nump) {
3620 $obj = $this->db->fetch_object($resql);
3621 $contact =
new Contact($this->db);
3622 $contact->fetch($obj->rowid);
3623 $contacts[] = $contact;
3644 $contact_property =
'';
3646 if (empty($rowid)) {
3650 $sql =
"SELECT rowid, email, phone_mobile, lastname, firstname";
3651 $sql .=
" FROM ".MAIN_DB_PREFIX.
"socpeople";
3652 $sql .=
" WHERE rowid = ".((int) $rowid);
3654 $resql = $this->db->query($sql);
3656 $nump = $this->db->num_rows($resql);
3659 $obj = $this->db->fetch_object($resql);
3661 if ($mode ==
'email') {
3663 } elseif ($mode ==
'mobile') {
3664 $contact_property = $obj->phone_mobile;
3667 return $contact_property;
3686 require_once DOL_DOCUMENT_ROOT.
'/societe/class/companybankaccount.class.php';
3690 $bac->fetch(0,
'', $this->
id);
3693 if ($mode ==
'label') {
3694 return $bac->getRibLabel(
true);
3695 } elseif ($mode ==
'rum') {
3696 if (empty($bac->rum)) {
3697 require_once DOL_DOCUMENT_ROOT.
'/compta/prelevement/class/bonprelevement.class.php';
3699 $bac->fetch_thirdparty();
3700 $bac->rum = $prelevement->buildRumNumber($bac->thirdparty->code_client, $bac->datec, (
string) $bac->id);
3703 } elseif ($mode ==
'format') {
3704 return $bac->frstrecur;
3706 return 'BadParameterToFunctionDisplayRib';
3722 require_once DOL_DOCUMENT_ROOT.
'/societe/class/companybankaccount.class.php';
3723 $sql =
"SELECT rowid FROM ".MAIN_DB_PREFIX.
"societe_rib WHERE type = 'ban' AND fk_soc = ".((int) $this->
id);
3724 $result = $this->db->query($sql);
3726 $this->error = $this->db->lasterror();
3727 $this->errors[] = $this->db->lasterror();
3730 $num_rows = $this->db->num_rows($result);
3731 $rib_array = array();
3733 while ($obj = $this->db->fetch_object($result)) {
3735 $rib->fetch($obj->rowid);
3736 $rib_array[] = $rib;
3749 require_once DOL_DOCUMENT_ROOT.
'/societe/class/companybankaccount.class.php';
3750 $sql =
"SELECT rowid FROM ".MAIN_DB_PREFIX.
"societe_rib WHERE type = 'ban' AND default_rib = 1 AND fk_soc = ". (int) $this->
id;
3751 $resql = $this->db->query($sql);
3753 $this->error = $this->db->lasterror();
3754 $this->errors[] = $this->db->lasterror();
3757 $num_rows = $this->db->num_rows($resql);
3758 $rib_array = array();
3760 while ($obj = $this->db->fetch_object($resql)) {
3778 public function get_codeclient($objsoc =
null, $type = 0)
3785 $dirsociete = array_merge(array(
'/core/modules/societe/'),
$conf->modules_parts[
'societe']);
3786 foreach ($dirsociete as $dirroot) {
3793 $mod =
new $module($this->db);
3794 '@phan-var-force ModeleThirdPartyCode $mod';
3796 $this->code_client = $mod->getNextValue($objsoc, $type);
3797 $this->prefixCustomerIsRequired = $mod->prefixIsRequired;
3799 dol_syslog(get_class($this).
"::get_codeclient code_client=".$this->code_client.
" module=".$module);
3812 public function get_codefournisseur($objsoc =
null, $type = 1)
3819 $dirsociete = array_merge(array(
'/core/modules/societe/'),
$conf->modules_parts[
'societe']);
3820 foreach ($dirsociete as $dirroot) {
3827 $mod =
new $module($this->db);
3828 '@phan-var-force ModeleThirdPartyCode $mod';
3830 $this->code_fournisseur = $mod->getNextValue($objsoc, $type);
3832 dol_syslog(get_class($this).
"::get_codefournisseur code_fournisseur=".$this->code_fournisseur.
" module=".$module);
3850 $dirsociete = array_merge(array(
'/core/modules/societe/'),
$conf->modules_parts[
'societe']);
3851 foreach ($dirsociete as $dirroot) {
3858 $mod =
new $module($this->db);
3859 '@phan-var-force ModeleThirdPartyCode $mod';
3861 dol_syslog(get_class($this).
"::codeclient_modifiable code_client=".$this->code_client.
" module=".$module);
3862 if ($mod->code_modifiable_null && !$this->code_client) {
3865 if ($mod->code_modifiable_invalide && $this->check_codeclient() < 0) {
3868 if ($mod->code_modifiable) {
3891 $dirsociete = array_merge(array(
'/core/modules/societe/'),
$conf->modules_parts[
'societe']);
3892 foreach ($dirsociete as $dirroot) {
3899 $mod =
new $module($this->db);
3900 '@phan-var-force ModeleThirdPartyCode $mod';
3902 dol_syslog(get_class($this).
"::codefournisseur_modifiable code_founisseur=".$this->code_fournisseur.
" module=".$module);
3903 if ($mod->code_modifiable_null && !$this->code_fournisseur) {
3906 if ($mod->code_modifiable_invalide && $this->check_codefournisseur() < 0) {
3909 if ($mod->code_modifiable) {
3938 $dirsociete = array_merge(array(
'/core/modules/societe/'),
$conf->modules_parts[
'societe']);
3939 foreach ($dirsociete as $dirroot) {
3946 $mod =
new $module($this->db);
3947 '@phan-var-force ModeleThirdPartyCode $mod';
3949 dol_syslog(get_class($this).
"::check_codeclient code_client=".$this->code_client.
" module=".$module);
3950 $result = $mod->verif($this->db, $this->code_client, $this, 0);
3952 $this->error = $mod->error;
3953 $this->errors = $mod->errors;
3980 $dirsociete = array_merge(array(
'/core/modules/societe/'),
$conf->modules_parts[
'societe']);
3981 foreach ($dirsociete as $dirroot) {
3988 $mod =
new $module($this->db);
3989 '@phan-var-force ModeleThirdPartyCode $mod';
3991 dol_syslog(get_class($this).
"::check_codefournisseur code_fournisseur=".$this->code_fournisseur.
" module=".$module);
3992 $result = $mod->verif($this->db, $this->code_fournisseur, $this, 1);
3994 $this->error = $mod->error;
3995 $this->errors = $mod->errors;
4020 $dirsociete = array_merge(array(
'/core/modules/societe/'),
$conf->modules_parts[
'societe']);
4021 foreach ($dirsociete as $dirroot) {
4029 $mod =
new $module();
4030 '@phan-var-force ModeleAccountancyCode $mod';
4033 $result = $mod->get_code($this->db, $this, $type);
4035 if ($type ==
'customer') {
4036 $this->code_compta_client = $mod->code;
4037 } elseif ($type ==
'supplier') {
4038 $this->code_compta_fournisseur = $mod->code;
4043 $this->error =
'ErrorAccountancyCodeNotDefined';
4047 if ($type ==
'customer') {
4048 $this->code_compta_client =
'';
4049 } elseif ($type ==
'supplier') {
4050 $this->code_compta_fournisseur =
'';
4065 dol_syslog(get_class($this).
'::setParent', LOG_DEBUG);
4071 if ($sameparent < 0) {
4074 if ($sameparent == 1) {
4075 setEventMessages(
'ParentCompanyToAddIsAlreadyAChildOfModifiedCompany',
null,
'warnings');
4080 $sql =
'UPDATE '.MAIN_DB_PREFIX.
'societe SET parent = '.($id > 0 ? $id :
'null').
' WHERE rowid = '.((
int) $this->id);
4082 $resql = $this->db->query($sql);
4084 $this->parent = $id;
4104 if ($counter > 100) {
4105 dol_syslog(
"Too high level of parent - child for company. May be an infinite loop ?", LOG_WARNING);
4108 $sql =
'SELECT s.parent';
4109 $sql .=
' FROM '.MAIN_DB_PREFIX.
'societe as s';
4110 $sql .=
' WHERE rowid = '.((int) $idparent);
4111 $resql = $this->db->query($sql);
4113 $obj = $this->db->fetch_object($resql);
4115 if ($obj->parent ==
'') {
4117 } elseif ($obj->parent == $idchild) {
4139 if ($company_id > 0) {
4140 $sql =
"SELECT parent FROM " . MAIN_DB_PREFIX .
"societe WHERE rowid = ".((int) $company_id);
4141 $resql = $this->db->query($sql);
4143 if ($obj = $this->db->fetch_object($resql)) {
4144 $parent = $obj->parent;
4145 if ($parent > 0 && !in_array($parent, $parents)) {
4146 $parents[] = $parent;
4152 $this->db->free($resql);
4154 setEventMessage($langs->trans(
'GetCompanyParentsError', $this->db->lasterror()),
'errors');
4171 $children = array();
4172 if ($company_id > 0) {
4173 $sql =
"SELECT rowid FROM " . MAIN_DB_PREFIX .
"societe WHERE parent = ".((int) $company_id);
4174 $resql = $this->db->query($sql);
4176 while ($obj = $this->db->fetch_object($resql)) {
4177 $child = $obj->rowid;
4178 if ($child > 0 && !in_array($child, $children)) {
4179 $children[] = $child;
4182 $this->db->free($resql);
4269 $sql =
"SELECT COUNT(*) as nb FROM ".MAIN_DB_PREFIX.
"societe WHERE ".$field.
" = '".$this->db->escape($value).
"' AND entity IN (".
getEntity(
'societe').
")";
4271 $sql .=
" AND rowid <> ".$socid;
4273 $resql = $this->db->query($sql);
4275 $obj = $this->db->fetch_object($resql);
4279 print $this->db->error();
4281 $this->db->free($resql);
4302 require_once DOL_DOCUMENT_ROOT.
'/core/lib/profid.lib.php';
4319 global $langs, $hookmanager;
4324 $hookmanager->initHooks(array(
'idprofurl'));
4325 $parameters = array(
'idprof' => $idprof,
'company' => $thirdparty);
4326 $reshook = $hookmanager->executeHooks(
'getIdProfUrl', $parameters, $this, $action);
4327 if (empty($reshook)) {
4333 $strippedIdProf1 = str_replace(
' ',
'', $thirdparty->idprof1);
4334 if ($idprof == 1 && $thirdparty->country_code ==
'FR') {
4335 $url =
'https://annuaire-entreprises.data.gouv.fr/entreprise/'.urlencode($strippedIdProf1);
4337 if ($idprof == 1 && ($thirdparty->country_code ==
'GB' || $thirdparty->country_code ==
'UK')) {
4338 $url =
'https://beta.companieshouse.gov.uk/company/'.urlencode($strippedIdProf1);
4340 if ($idprof == 1 && $thirdparty->country_code ==
'ES') {
4341 $url =
'http://www.e-informa.es/servlet/app/portal/ENTP/screen/SProducto/prod/ETIQUETA_EMPRESA/nif/'.urlencode($strippedIdProf1);
4343 if ($idprof == 1 && $thirdparty->country_code ==
'IN') {
4344 $url =
'http://www.tinxsys.com/TinxsysInternetWeb/dealerControllerServlet?tinNumber='.urlencode($strippedIdProf1).
';&searchBy=TIN&backPage=searchByTin_Inter.jsp';
4346 if ($idprof == 1 && $thirdparty->country_code ==
'DZ') {
4347 $url =
'http://nif.mfdgi.gov.dz/nif.asp?Nif='.urlencode($strippedIdProf1);
4349 if ($idprof == 1 && $thirdparty->country_code ==
'PT') {
4350 $url =
'http://www.nif.pt/'.urlencode($strippedIdProf1);
4354 return '<a target="_blank" rel="noopener noreferrer" href="'.$url.
'">'.$langs->trans(
"Check").
'</a>';
4357 return $hookmanager->resPrint;
4372 $sql =
"SELECT COUNT(*) as numproj FROM ".MAIN_DB_PREFIX.
"projet WHERE fk_soc = ".((int) $this->
id);
4373 $resql = $this->db->query($sql);
4375 $obj = $this->db->fetch_object($resql);
4376 $count = $obj->numproj;
4379 print $this->db->error();
4381 $this->db->free($resql);
4382 return ($count > 0);
4394 $sql =
"SELECT s.rowid, s.nom as name, s.datec, GREATEST(s.tms, sef.tms) as datem,";
4395 $sql .=
" fk_user_creat, fk_user_modif";
4396 $sql .=
" FROM ".MAIN_DB_PREFIX.
"societe as s";
4397 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"societe_extrafields as sef ON sef.fk_object=s.rowid";
4398 $sql .=
" WHERE s.rowid = ".((int) $id);
4400 $result = $this->db->query($sql);
4402 if ($this->db->num_rows($result)) {
4403 $obj = $this->db->fetch_object($result);
4405 $this->
id = $obj->rowid;
4407 $this->user_creation_id = $obj->fk_user_creat;
4408 $this->user_modification_id = $obj->fk_user_modif;
4409 $this->date_creation = $this->db->jdate($obj->datec);
4410 $this->date_modification = empty($obj->datem) ?
'' : $this->db->jdate($obj->datem);
4412 $this->
ref = $obj->name;
4415 $this->db->free($result);
4431 $isACompany =
getDolGlobalInt(
'MAIN_UNKNOWN_CUSTOMERS_ARE_COMPANIES', $defaultvalue);
4434 if (!empty($this->tva_intra)) {
4436 } elseif (!empty($this->idprof1) || !empty($this->idprof2) || !empty($this->idprof3) || !empty($this->idprof4) || !empty($this->idprof5) || !empty($this->idprof6) || !empty($this->euid)) {
4440 if (preg_match(
'/^TE_PRIVATE/', $this->typent_code)) {
4458 require_once DOL_DOCUMENT_ROOT.
'/core/lib/company.lib.php';
4469 require_once DOL_DOCUMENT_ROOT.
'/core/lib/company.lib.php';
4482 $this->SupplierCategories = array();
4483 $sql =
"SELECT rowid, label";
4484 $sql .=
" FROM ".MAIN_DB_PREFIX.
"categorie";
4485 $sql .=
" WHERE type = ".Categorie::TYPE_SUPPLIER;
4487 $resql = $this->db->query($sql);
4489 while ($obj = $this->db->fetch_object($resql)) {
4490 $this->SupplierCategories[$obj->rowid] = $obj->label;
4508 if ($categorie_id > 0 && $this->
id > 0) {
4509 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"categorie_fournisseur (fk_categorie, fk_soc) ";
4510 $sql .=
" VALUES (".((int) $categorie_id).
", ".((int) $this->
id).
")";
4512 if ($resql = $this->db->query($sql)) {
4528 $sql =
"SELECT count(mc.email) as nb";
4529 $sql .=
" FROM ".MAIN_DB_PREFIX.
"mailing_cibles as mc, ".MAIN_DB_PREFIX.
"mailing as m";
4530 $sql .=
" WHERE mc.fk_mailing=m.rowid AND mc.email = '".$this->db->escape($this->
email).
"' ";
4531 $sql .=
" AND m.entity IN (".getEntity($this->element).
") AND mc.statut NOT IN (-1,0)";
4533 $resql = $this->db->query($sql);
4535 $obj = $this->db->fetch_object($resql);
4536 $nb = (int) $obj->nb;
4538 $this->db->free($resql);
4541 $this->error = $this->db->error();
4563 $sql =
"SELECT COUNT(rowid) as nb FROM ".MAIN_DB_PREFIX.
"mailing_unsubscribe WHERE entity IN (".
getEntity(
'mailing', 0).
") AND email = '".$this->db->escape($this->
email).
"'";
4564 $resql = $this->db->query($sql);
4566 $obj = $this->db->fetch_object($resql);
4567 $noemail = $obj->nb;
4568 if (empty($noemail)) {
4570 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"mailing_unsubscribe(email, entity, date_creat) VALUES ('".$this->db->escape($this->
email).
"', ".
getEntity(
'mailing', 0).
", '".$this->db->idate(
dol_now()).
"')";
4571 $resql = $this->db->query($sql);
4574 $this->error = $this->db->lasterror();
4575 $this->errors[] = $this->error;
4580 $this->error = $this->db->lasterror();
4581 $this->errors[] = $this->error;
4585 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"mailing_unsubscribe WHERE email = '".$this->db->escape($this->
email).
"' AND entity IN (".
getEntity(
'mailing', 0).
")";
4586 $resql = $this->db->query($sql);
4589 $this->error = $this->db->lasterror();
4590 $this->errors[] = $this->error;
4594 if (empty($error)) {
4595 $this->no_email = $no_email;
4596 $this->db->commit();
4599 $this->db->rollback();
4616 $sql =
"SELECT COUNT(rowid) as nb FROM ".MAIN_DB_PREFIX.
"mailing_unsubscribe WHERE entity IN (".
getEntity(
'mailing').
") AND email = '".$this->db->escape($this->
email).
"'";
4617 $resql = $this->db->query($sql);
4619 $obj = $this->db->fetch_object($resql);
4620 $this->no_email = $obj->nb;
4623 $this->error = $this->db->lasterror();
4624 $this->errors[] = $this->error;
4644 global $user, $langs;
4646 dol_syslog(get_class($this).
"::create_from_member", LOG_DEBUG);
4647 $fullname = $member->getFullName($langs);
4649 if ($member->morphy ==
'mor') {
4650 if (empty($socname)) {
4651 $socname = $member->company ? $member->company : $member->societe;
4653 if (!empty($fullname) && empty($socalias)) {
4654 $socalias = $fullname;
4656 } elseif (empty($socname) && $member->morphy ==
'phy') {
4657 if (empty($socname)) {
4658 $socname = $fullname;
4660 if (!empty($member->company) && empty($socalias)) {
4661 $socalias = $member->company;
4665 $name = (
string) $socname;
4666 $alias = $socalias ? $socalias :
'';
4670 $this->
name = $name;
4671 $this->name_alias = $alias;
4672 $this->
address = $member->address;
4673 $this->zip = $member->zip;
4674 $this->town = $member->town;
4675 $this->country_code = $member->country_code;
4676 $this->country_id = $member->country_id;
4677 $this->phone = $member->phone;
4678 $this->
email = $member->email;
4679 $this->socialnetworks = $member->socialnetworks;
4680 $this->entity = $member->entity;
4684 $this->code_client = $member->ref;
4686 $this->code_client = ($customercode ? $customercode : -1);
4688 $this->code_fournisseur =
'-1';
4689 $this->typent_code = ($member->morphy ==
'phy' ?
'TE_PRIVATE' : 0);
4690 $this->typent_id = $this->typent_code ?
dol_getIdFromCode($this->db, $this->typent_code,
'c_typent',
'id',
'code') : 0;
4695 $result = $this->
create($user);
4701 $this->name_bis = $member->lastname;
4702 $this->firstname = $member->firstname;
4703 $this->civility_id = (empty($member->civility_code) ? $member->civility_id : $member->civility_code);
4704 $this->civility_code = (empty($member->civility_code) ? $member->civility_id : $member->civility_code);
4706 dol_syslog(
"We ask to create a contact/address too", LOG_DEBUG);
4711 $this->db->rollback();
4716 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"adherent";
4717 $sql .=
" SET fk_soc = ".((int) $this->
id);
4718 $sql .=
" WHERE rowid = ".((int) $member->id);
4720 $resql = $this->db->query($sql);
4722 $this->db->commit();
4725 $this->error = $this->db->error();
4727 $this->db->rollback();
4732 dol_syslog(get_class($this).
"::create_from_member - 2 - ".$this->error.
" - ".implode(
',', $this->errors), LOG_ERR);
4734 $this->db->rollback();
4750 $this->entity =
$conf->entity;
4752 $this->nom = $this->name;
4766 $country_code = $country_label =
'';
4769 $country_id = (is_numeric($tmp[0])) ? (
int) $tmp[0] : 0;
4770 if (!empty($tmp[1])) {
4771 $country_code = $tmp[1];
4772 $country_label = $tmp[2];
4775 dol_syslog(
"Your country setup use an old syntax. Reedit it using setup area.", LOG_WARNING);
4776 include_once DOL_DOCUMENT_ROOT.
'/core/lib/company.lib.php';
4777 $country_code =
getCountry($country_id,
'2', $this->db);
4778 $country_label =
getCountry($country_id,
'', $this->db);
4781 $this->country_id = $country_id;
4782 $this->country_code = $country_code;
4783 $this->country = $country_label;
4784 if (is_object($langs)) {
4785 $this->country = ($langs->trans(
'Country'.$country_code) !=
'Country'.$country_code) ? $langs->trans(
'Country'.$country_code) : $country_label;
4795 $state_id = (int) $tmp[0];
4796 if (!empty($tmp[1])) {
4797 $state_code = $tmp[1];
4798 $state_label = $tmp[2];
4800 dol_syslog(
"Your setup of State has an old syntax (entity=".
$conf->entity.
"). Go in Home - Setup - Organization then Save should remove this error.", LOG_ERR);
4801 include_once DOL_DOCUMENT_ROOT.
'/core/lib/company.lib.php';
4802 $state_code =
getState($state_id,
'2', $this->db);
4803 $state_label =
getState($state_id,
'0', $this->db);
4806 $this->state_id = $state_id;
4807 $this->state_code = $state_code;
4808 $this->state = $state_label;
4809 if (is_object($langs)) {
4810 $this->state = ($langs->trans(
'State'.$state_code) !=
'State'.$state_code) ? $langs->trans(
'State'.$state_code) : $state_label;
4825 $this->socialnetworks = array();
4826 if (!empty($facebook_url)) {
4827 $this->socialnetworks[
'facebook'] = $facebook_url;
4829 if (!empty($twitter_url)) {
4830 $this->socialnetworks[
'twitter'] = $twitter_url;
4832 if (!empty($linkedin_url)) {
4833 $this->socialnetworks[
'linkedin'] = $linkedin_url;
4835 if (!empty($instagram_url)) {
4836 $this->socialnetworks[
'instagram'] = $instagram_url;
4838 if (!empty($youtube_url)) {
4839 $this->socialnetworks[
'youtube'] = $youtube_url;
4841 if (!empty($github_url)) {
4842 $this->socialnetworks[
'github'] = $github_url;
4860 $this->forme_juridique_code =
getDolGlobalInt(
'MAIN_INFO_SOCIETE_FORME_JURIDIQUE');
4867 $this->logo_squarred_small =
getDolGlobalString(
'MAIN_INFO_SOCIETE_LOGO_SQUARRED_SMALL');
4868 $this->logo_squarred_mini =
getDolGlobalString(
'MAIN_INFO_SOCIETE_LOGO_SQUARRED_MINI');
4874 $this->localtax1_assuj = ((isset(
$conf->global->FACTURE_LOCAL_TAX1_OPTION) && (
getDolGlobalString(
'FACTURE_LOCAL_TAX1_OPTION') ==
'1' ||
getDolGlobalString(
'FACTURE_LOCAL_TAX1_OPTION') ==
'localtax1on')) ? 1 : 0);
4875 $this->localtax2_assuj = ((isset(
$conf->global->FACTURE_LOCAL_TAX2_OPTION) && (
getDolGlobalString(
'FACTURE_LOCAL_TAX2_OPTION') ==
'1' ||
getDolGlobalString(
'FACTURE_LOCAL_TAX2_OPTION') ==
'localtax2on')) ? 1 : 0);
4894 $this->
name =
'THIRDPARTY SPECIMEN '.dol_print_date($now,
'dayhourlog');
4895 $this->ref_ext =
'Ref ext';
4896 $this->specimen = 1;
4897 $this->
address =
'21 jump street';
4898 $this->zip =
'99999';
4899 $this->town =
'MyTown';
4900 $this->state_id = 1;
4901 $this->state_code =
'AA';
4902 $this->state =
'MyState';
4903 $this->country_id = 1;
4904 $this->country_code =
'FR';
4905 $this->
email =
'specimen@specimen.com';
4906 $this->socialnetworks = array(
4907 'skype' =>
'skypepseudo',
4908 'twitter' =>
'twitterpseudo',
4909 'facebook' =>
'facebookpseudo',
4910 'linkedin' =>
'linkedinpseudo',
4912 $this->url =
'https://www.specimen.com';
4914 $this->phone =
'0909090901';
4915 $this->phone_mobile =
'0909090901';
4916 $this->fax =
'0909090909';
4918 $this->code_client =
'CC-'.dol_print_date($now,
'dayhourlog');
4919 $this->code_fournisseur =
'SC-'.dol_print_date($now,
'dayhourlog');
4920 $this->typent_code =
'TE_OTHER';
4921 $this->capital = 10000;
4923 $this->prospect = 1;
4924 $this->fournisseur = 1;
4925 $this->tva_assuj = 1;
4927 $this->tva_intra =
'FR1234567';
4928 $this->note_public =
'This is a comment (public)';
4929 $this->note_private =
'This is a comment (private)';
4931 $this->idprof1 =
'idprof1';
4932 $this->idprof2 =
'idprof2';
4933 $this->idprof3 =
'idprof3';
4934 $this->idprof4 =
'idprof4';
4935 $this->idprof5 =
'idprof5';
4936 $this->idprof6 =
'idprof6';
4938 $this->euid =
'FR-RCSXXXX-idprof1';
4951 public function useLocalTax($localTaxNum = 0, $mode = 0, $thirdparty =
null)
4953 if ($mode == 1 && $thirdparty instanceof
Societe) {
4954 if ($localTaxNum == -1) {
4955 return array(1 => ($thirdparty->localtax1_assuj ?
true :
false), 2 => ($thirdparty->localtax2_assuj ?
true :
false));
4956 } elseif ($localTaxNum == 1) {
4957 return $thirdparty->localtax1_assuj ? true :
false;
4958 } elseif ($localTaxNum == 2) {
4959 return $thirdparty->localtax2_assuj ? true :
false;
4963 $sql =
"SELECT t.localtax1, t.localtax2";
4964 $sql .=
" FROM ".MAIN_DB_PREFIX.
"c_tva as t, ".MAIN_DB_PREFIX.
"c_country as c";
4965 $sql .=
" WHERE t.fk_pays = c.rowid AND c.code = '".$this->db->escape($this->country_code).
"'";
4966 $sql .=
" AND t.active = 1";
4967 $sql .=
" AND t.entity IN (".getEntity(
'c_tva').
")";
4968 if (empty($localTaxNum) || $localTaxNum == -1) {
4969 $sql .=
" AND (t.localtax1_type <> '0' OR t.localtax2_type <> '0')";
4970 } elseif ($localTaxNum == 1) {
4971 $sql .=
" AND t.localtax1_type <> '0'";
4972 } elseif ($localTaxNum == 2) {
4973 $sql .=
" AND t.localtax2_type <> '0'";
4976 $resql = $this->db->query($sql);
4978 if ($localTaxNum == -1) {
4979 $obj = $this->db->fetch_object($resql);
4981 return array(1 => ($obj->localtax1 ?
true :
false), 2 => ($obj->localtax2 ?
true :
false));
4983 return array(1 =>
false, 2 =>
false);
4985 return ($this->db->num_rows($resql) > 0);
5000 $sql =
"SELECT t.rowid";
5001 $sql .=
" FROM ".MAIN_DB_PREFIX.
"c_tva as t, ".MAIN_DB_PREFIX.
"c_country as c";
5002 $sql .=
" WHERE t.fk_pays = c.rowid AND c.code = '".$this->db->escape($this->country_code).
"'";
5003 $sql .=
" AND t.active = 1 AND t.recuperableonly = 1";
5004 $sql .=
" AND t.entity IN (".getEntity(
'c_tva').
")";
5007 $resql = $this->db->query($sql);
5009 return ($this->db->num_rows($resql) > 0);
5023 $sql =
"SELECT COUNT(*) as nb";
5024 $sql .=
" FROM ".MAIN_DB_PREFIX.
"c_revenuestamp as r, ".MAIN_DB_PREFIX.
"c_country as c";
5025 $sql .=
" WHERE r.fk_pays = c.rowid AND c.code = '".$this->db->escape($this->country_code).
"'";
5026 $sql .=
" AND r.active = 1";
5029 $resql = $this->db->query($sql);
5031 $obj = $this->db->fetch_object($resql);
5032 return ($obj->nb > 0);
5034 $this->error = $this->db->lasterror();
5062 if ($fk_prospectlevel !=
'') {
5063 $label = $langs->trans(
"ProspectLevel".$fk_prospectlevel);
5065 if ($label ==
"ProspectLevel".$fk_prospectlevel) {
5066 $label = $langs->getLabelFromKey($this->db, $fk_prospectlevel,
'c_prospectlevel',
'code',
'label');
5082 return $this->
LibProspCommStatut((
int) $this->stcomm_id, $mode, $label, $this->stcomm_picto);
5104 $langs->load(
'customers');
5107 if ($status ==
'-1' || $status ==
'ST_NO') {
5108 return img_action($langs->trans(
"StatusProspect-1"),
'-1', $picto,
'class="inline-block valignmiddle"').
' '.$langs->trans(
"StatusProspect-1");
5109 } elseif ($status ==
'0' || $status ==
'ST_NEVER') {
5110 return img_action($langs->trans(
"StatusProspect0"),
'0', $picto,
'class="inline-block valignmiddle"').
' '.$langs->trans(
"StatusProspect0");
5111 } elseif ($status ==
'1' || $status ==
'ST_TODO') {
5112 return img_action($langs->trans(
"StatusProspect1"),
'1', $picto,
'class="inline-block valignmiddle"').
' '.$langs->trans(
"StatusProspect1");
5113 } elseif ($status ==
'2' || $status ==
'ST_PEND') {
5114 return img_action($langs->trans(
"StatusProspect2"),
'2', $picto,
'class="inline-block valignmiddle"').
' '.$langs->trans(
"StatusProspect2");
5115 } elseif ($status ==
'3' || $status ==
'ST_DONE') {
5116 return img_action($langs->trans(
"StatusProspect3"),
'3', $picto,
'class="inline-block valignmiddle"').
' '.$langs->trans(
"StatusProspect3");
5118 return img_action(($langs->trans(
"StatusProspect".$status) !=
"StatusProspect".$status) ? $langs->trans(
"StatusProspect".$status) : $label,
'0', $picto,
'class="inline-block valignmiddle"').
' '.(($langs->trans(
"StatusProspect".$status) !=
"StatusProspect".$status) ? $langs->trans(
"StatusProspect".$status) : $label);
5120 } elseif ($mode == 3) {
5121 if ($status ==
'-1' || $status ==
'ST_NO') {
5122 return img_action($langs->trans(
"StatusProspect-1"),
'-1', $picto,
'class="inline-block valignmiddle"');
5123 } elseif ($status ==
'0' || $status ==
'ST_NEVER') {
5124 return img_action($langs->trans(
"StatusProspect0"),
'0', $picto,
'class="inline-block valignmiddle"');
5125 } elseif ($status ==
'1' || $status ==
'ST_TODO') {
5126 return img_action($langs->trans(
"StatusProspect1"),
'1', $picto,
'class="inline-block valignmiddle"');
5127 } elseif ($status ==
'2' || $status ==
'ST_PEND') {
5128 return img_action($langs->trans(
"StatusProspect2"),
'2', $picto,
'class="inline-block valignmiddle"');
5129 } elseif ($status ==
'3' || $status ==
'ST_DONE') {
5130 return img_action($langs->trans(
"StatusProspect3"),
'3', $picto,
'class="inline-block valignmiddle"');
5132 return img_action(($langs->trans(
"StatusProspect".$status) !=
"StatusProspect".$status) ? $langs->trans(
"StatusProspect".$status) : $label,
'0', $picto,
'class="inline-block valignmiddle"');
5134 } elseif ($mode == 4) {
5135 if ($status ==
'-1' || $status ==
'ST_NO') {
5136 return img_action($langs->trans(
"StatusProspect-1"),
'-1', $picto,
'class="inline-block valignmiddle"').
' '.$langs->trans(
"StatusProspect-1");
5137 } elseif ($status ==
'0' || $status ==
'ST_NEVER') {
5138 return img_action($langs->trans(
"StatusProspect0"),
'0', $picto,
'class="inline-block valignmiddle"').
' '.$langs->trans(
"StatusProspect0");
5139 } elseif ($status ==
'1' || $status ==
'ST_TODO') {
5140 return img_action($langs->trans(
"StatusProspect1"),
'1', $picto,
'class="inline-block valignmiddle"').
' '.$langs->trans(
"StatusProspect1");
5141 } elseif ($status ==
'2' || $status ==
'ST_PEND') {
5142 return img_action($langs->trans(
"StatusProspect2"),
'2', $picto,
'class="inline-block valignmiddle"').
' '.$langs->trans(
"StatusProspect2");
5143 } elseif ($status ==
'3' || $status ==
'ST_DONE') {
5144 return img_action($langs->trans(
"StatusProspect3"),
'3', $picto,
'class="inline-block valignmiddle"').
' '.$langs->trans(
"StatusProspect3");
5146 return img_action(($langs->trans(
"StatusProspect".$status) !=
"StatusProspect".$status) ? $langs->trans(
"StatusProspect".$status) : $label,
'0', $picto,
'class="inline-block valignmiddle"').
' '.(($langs->trans(
"StatusProspect".$status) !=
"StatusProspect".$status) ? $langs->trans(
"StatusProspect".$status) : $label);
5150 return "Error, mode/status not found";
5161 global $hookmanager;
5163 if ($mode ==
'supplier') {
5164 $table =
'supplier_proposal';
5167 $sql =
"SELECT rowid, ref, total_ht, total_ttc, fk_statut as status FROM ".MAIN_DB_PREFIX.$table.
" as f";
5168 $sql .=
" WHERE fk_soc = ".((int) $this->
id);
5169 if ($mode ==
'supplier') {
5170 $sql .=
" AND entity IN (".getEntity(
'supplier_proposal').
")";
5172 $sql .=
" AND entity IN (".getEntity(
'propal').
")";
5175 dol_syslog(
"getOutstandingProposals for fk_soc = ".((
int) $this->
id), LOG_DEBUG);
5178 $parameters = array(
'mode' => $mode,
'table' => $table);
5179 $hookmanager->executeHooks(
'printFieldListWhere', $parameters, $this);
5180 $sql .= $hookmanager->resPrint;
5182 $resql = $this->db->query($sql);
5184 $outstandingOpened = 0;
5185 $outstandingTotal = 0;
5186 $outstandingTotalIncTax = 0;
5187 $arrayofref = array();
5188 while ($obj = $this->db->fetch_object($resql)) {
5189 $arrayofref[$obj->rowid] = $obj->ref;
5190 $outstandingTotal += $obj->total_ht;
5191 $outstandingTotalIncTax += $obj->total_ttc;
5192 if ($obj->status != 0) {
5194 $outstandingOpened += $obj->total_ttc;
5197 return array(
'opened' => $outstandingOpened,
'total_ht' => $outstandingTotal,
'total_ttc' => $outstandingTotalIncTax,
'refs' => $arrayofref);
5211 global $hookmanager;
5212 $table =
'commande';
5213 if ($mode ==
'supplier') {
5214 $table =
'commande_fournisseur';
5217 $sql =
"SELECT rowid, ref, total_ht, total_ttc, fk_statut as status FROM ".MAIN_DB_PREFIX.$table.
" as f";
5218 $sql .=
" WHERE fk_soc = ".((int) $this->
id);
5219 if ($mode ==
'supplier') {
5220 $sql .=
" AND entity IN (".getEntity(
'supplier_order').
")";
5222 $sql .=
" AND entity IN (".getEntity(
'commande').
")";
5225 dol_syslog(
"getOutstandingOrders", LOG_DEBUG);
5227 $parameters = array(
'mode' => $mode,
'table' => $table);
5228 $hookmanager->executeHooks(
'printFieldListWhere', $parameters, $this);
5229 $sql .= $hookmanager->resPrint;
5230 $resql = $this->db->query($sql);
5232 $outstandingOpened = 0;
5233 $outstandingTotal = 0;
5234 $outstandingTotalIncTax = 0;
5235 $arrayofref = array();
5236 while ($obj = $this->db->fetch_object($resql)) {
5237 $arrayofref[$obj->rowid] = $obj->ref;
5238 $outstandingTotal += $obj->total_ht;
5239 $outstandingTotalIncTax += $obj->total_ttc;
5240 if ($obj->status != 0) {
5242 $outstandingOpened += $obj->total_ttc;
5245 return array(
'opened' => $outstandingOpened,
'total_ht' => $outstandingTotal,
'total_ttc' => $outstandingTotalIncTax,
'refs' => $arrayofref);
5260 include_once DOL_DOCUMENT_ROOT.
'/core/lib/date.lib.php';
5263 if ($mode ==
'supplier') {
5264 $table =
'facture_fourn';
5276 $sql =
"SELECT rowid, ref, total_ht, total_ttc, paye, type, fk_statut as status, close_code FROM ".MAIN_DB_PREFIX.$table.
" as f";
5277 $sql .=
" WHERE fk_soc = ".((int) $this->
id);
5278 if (!empty($late)) {
5279 $sql .=
" AND date_lim_reglement < '".$this->db->idate($today).
"'";
5281 if ($mode ==
'supplier') {
5282 $sql .=
" AND entity IN (".getEntity(
'facture_fourn').
")";
5284 $sql .=
" AND entity IN (".getEntity(
'invoice').
")";
5287 dol_syslog(
"getOutstandingBills", LOG_DEBUG);
5288 $resql = $this->db->query($sql);
5290 $outstandingOpened = 0;
5291 $outstandingTotal = 0;
5292 $outstandingTotalIncTax = 0;
5293 $arrayofref = array();
5294 $arrayofrefopened = array();
5295 if ($mode ==
'supplier') {
5296 require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.facture.class.php';
5299 require_once DOL_DOCUMENT_ROOT.
'/compta/facture/class/facture.class.php';
5300 $tmpobject =
new Facture($this->db);
5302 while ($obj = $this->db->fetch_object($resql)) {
5303 $arrayofref[$obj->rowid] = $obj->ref;
5304 $tmpobject->id = $obj->rowid;
5306 if ($obj->status != $tmpobject::STATUS_DRAFT
5307 && !($obj->status == $tmpobject::STATUS_ABANDONED && $obj->close_code ==
'replaced')
5309 $outstandingTotal += $obj->total_ht;
5310 $outstandingTotalIncTax += $obj->total_ttc;
5316 && $obj->status != $tmpobject::STATUS_DRAFT
5317 && $obj->status != $tmpobject::STATUS_ABANDONED
5318 && $obj->status != $tmpobject::STATUS_CLOSED) {
5320 $paiement = $tmpobject->getSommePaiement();
5321 $creditnotes = $tmpobject->getSumCreditNotesUsed();
5322 $deposits = $tmpobject->getSumDepositsUsed();
5324 $remaintopay = ($obj->total_ttc - $paiement - $creditnotes - $deposits);
5325 $outstandingOpened += $remaintopay;
5331 $remainingcreditnote = $tmpobject->getSumFromThisCreditNotesNotUsed();
5332 $remaintopay -= $remainingcreditnote;
5333 $outstandingOpened -= $remainingcreditnote;
5337 $arrayofrefopened[$obj->rowid] = $obj->ref;
5340 return array(
'opened' => $outstandingOpened,
'total_ht' => $outstandingTotal,
'total_ttc' => $outstandingTotalIncTax,
'refs' => $arrayofref,
'refsopened' => $arrayofrefopened);
5342 dol_syslog(
"Sql error ".$this->db->lasterror, LOG_ERR);
5369 $langs->load(
'companies');
5372 return $langs->trans(
"NorProspectNorCustomer");
5373 } elseif ($status == 1) {
5374 return $langs->trans(
"Customer");
5375 } elseif ($status == 2) {
5376 return $langs->trans(
"Prospect");
5377 } elseif ($status == 3) {
5378 return $langs->trans(
"ProspectCustomer");
5393 if ($thirdparty->country_code ==
'FR' && empty($thirdparty->tva_intra) && !empty($thirdparty->tva_assuj)) {
5394 $siren = trim($thirdparty->idprof1);
5395 if (empty($siren)) {
5396 $siren = (int) substr(str_replace(
' ',
'', $thirdparty->idprof2), 0, 9);
5398 if (!empty($siren)) {
5401 $cle = (12 + 3 * $siren % 97) % 97;
5402 $tva_intra =
'FR' . $cle . $siren;
5406 return $tva_intra ??
'';
5421 public function generateDocument($modele, $outputlangs, $hidedetails = 0, $hidedesc = 0, $hideref = 0, $moreparams =
null)
5425 if (!empty($moreparams) && !empty($moreparams[
'use_companybankid'])) {
5426 $modelpath =
"core/modules/bank/doc/";
5428 include_once DOL_DOCUMENT_ROOT.
'/societe/class/companybankaccount.class.php';
5430 $result = $companybankaccount->fetch($moreparams[
'use_companybankid']);
5432 dol_print_error($this->db, $companybankaccount->error, $companybankaccount->errors);
5434 $result = $companybankaccount->commonGenerateDocument($modelpath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref, $moreparams);
5435 $this->last_main_doc = $companybankaccount->last_main_doc;
5442 print $langs->trans(
"Error").
" ".$langs->trans(
"Error_COMPANY_ADDON_PDF_NotDefined");
5447 if (!isset($this->bank_account)) {
5448 require_once DOL_DOCUMENT_ROOT.
'/societe/class/companybankaccount.class.php';
5451 $result = $bac->fetch(0,
'', $this->
id);
5453 $this->bank_account = $bac;
5455 $this->bank_account =
'';
5459 $modelpath =
"core/modules/societe/doc/";
5461 $result = $this->
commonGenerateDocument($modelpath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref, $moreparams);
5480 public function setCategories($categories, $type_categ, $remove_existing =
true)
5482 require_once DOL_DOCUMENT_ROOT.
'/categories/class/categorie.class.php';
5485 if (!in_array($type_categ, array(Categorie::TYPE_CUSTOMER, Categorie::TYPE_SUPPLIER))) {
5486 dol_syslog(__METHOD__.
': Type '.$type_categ.
'is an unknown company category type. Nothing done.', LOG_ERR);
5490 return parent::setCategoriesCommon($categories, $type_categ, $remove_existing);
5505 if (!is_array($salesrep)) {
5506 $salesrep = array($salesrep);
5510 $to_add = $salesrep;
5511 if ($onlyAdd ===
false) {
5516 if (is_array($existing)) {
5517 $to_del = array_diff($existing, $salesrep);
5518 $to_add = array_diff($salesrep, $existing);
5525 foreach ($to_del as $del) {
5528 foreach ($to_add as $add) {
5536 return $error ? -1 : 1;
5552 $result = $this->
setValueFrom(
'fk_typent', $typent_id,
'',
null,
'',
'', $user,
'COMPANY_MODIFY');
5555 $this->typent_id = $typent_id;
5556 $this->typent_code =
dol_getIdFromCode($this->db, $this->typent_id,
'c_typent',
'id',
'code');
5577 if ($origin_id == $dest_id) {
5578 dol_syslog(
'Error: Try to merge a thirdparty into itself');
5584 $sql =
'SELECT rowid FROM '.MAIN_DB_PREFIX.
'societe_commerciaux ';
5585 $sql .=
' WHERE fk_soc = '.(int) $dest_id.
' AND fk_user IN ( ';
5586 $sql .=
' SELECT fk_user ';
5587 $sql .=
' FROM '.MAIN_DB_PREFIX.
'societe_commerciaux ';
5588 $sql .=
' WHERE fk_soc = '.(int) $origin_id.
') ';
5590 $resql = $dbs->
query($sql);
5592 $dbs->
query(
'DELETE FROM '.MAIN_DB_PREFIX.
'societe_commerciaux WHERE rowid = '.((
int) $obj->rowid));
5599 'societe_commerciaux',
5602 'societe_remise_except',
5621 global $user, $langs,
$conf;
5625 if ($type ==
'buy') {
5626 $field =
'accountancy_code_buy';
5627 } elseif ($type ==
'sell') {
5628 $field =
'accountancy_code_sell';
5633 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element.
" SET ";
5634 $sql .= $field.
" = '".$this->db->escape($value).
"'";
5635 $sql .=
" WHERE rowid = ".((int) $this->
id);
5637 dol_syslog(get_class($this).
"::".__FUNCTION__, LOG_DEBUG);
5638 $resql = $this->db->query($sql);
5642 include_once DOL_DOCUMENT_ROOT.
'/core/class/interfaces.class.php';
5644 $result = $interface->run_triggers(
'COMPANY_MODIFY', $this, $user, $langs,
$conf);
5646 $this->errors = $interface->errors;
5647 $this->db->rollback();
5652 $this->$field = $value;
5654 $this->db->commit();
5657 $this->error = $this->db->lasterror();
5658 $this->db->rollback();
5671 require_once DOL_DOCUMENT_ROOT.
'/partnership/class/partnership.class.php';
5673 $this->partnerships[] = array();
5687 $selected = (empty($arraydata[
'selected']) ? 0 : $arraydata[
'selected']);
5689 $out =
'<div class="box-flex-item box-flex-grow-zero">';
5690 $out .=
'<div class="info-box info-box-sm">';
5691 $out .=
'<span class="info-box-icon bg-infobox-action">';
5692 if (!empty($this->logo) && class_exists(
'Form')) {
5693 $out .=
Form::showphoto(
'societe', $this, 0, 40, 0,
'photokanban',
'mini', 0);
5698 $out .=
'<div class="info-box-content">';
5699 $out .=
'<div class="info-box-ref inline-block tdoverflowmax125 valignmiddle">' . $this->
getNomUrl(1);
5701 if (!empty($this->phone)) {
5702 $out .=
'<div class="inline-block valignmiddle">';
5704 $out .=
dol_print_phone($this->phone, $this->country_code, 0, $this->
id,
'tel',
'hidenum',
'phone', $this->phone, 0,
'paddingleft paddingright');
5707 if (!empty($this->
email)) {
5708 $out .=
'<div class="inline-block valignmiddle">';
5709 $out .=
dol_print_email($this->
email, 0, $this->
id,
'thirdparty', -1, 1, 2,
'paddingleft paddingright');
5712 if ($selected >= 0) {
5713 $out .=
'<input id="cb'.$this->id.
'" class="flat checkforselect fright" type="checkbox" name="toselect[]" value="'.$this->
id.
'"'.($selected ?
' checked="checked"' :
'').
'>';
5715 if (!empty($this->code_client)) {
5716 $out .=
'<br><span class="info-box-label opacitymedium">'.$this->code_client.
'</span>';
5718 $out .=
'<br><div class="info-box-status">' . $this->
getLibStatut(3) .
'</div>';
5735 public function getContacts($list = 0, $code =
'', $element =
'', $status = -1)
5742 $sql =
"SELECT sc.rowid, sc.fk_socpeople as id, sc.fk_c_type_contact";
5743 $sql .=
", t.fk_soc as socid, t.statut as statuscontact";
5744 $sql .=
", t.civility as civility, t.lastname as lastname, t.firstname, t.email";
5745 $sql .=
", tc.source, tc.element, tc.code, tc.libelle as type_label";
5746 $sql .=
" FROM ".$this->db->prefix().
"c_type_contact tc";
5747 $sql .=
", ".$this->db->prefix().
"societe_contacts sc";
5748 $sql .=
" LEFT JOIN ".$this->db->prefix().
"socpeople t on sc.fk_socpeople = t.rowid";
5749 $sql .=
" WHERE sc.fk_soc = ".((int) $this->
id);
5750 $sql .=
" AND sc.fk_c_type_contact = tc.rowid";
5754 $sql .=
" AND t.statut = " . ((int) $status);
5756 if (!empty($element)) {
5757 $sql .=
" AND tc.element = '".$this->db->escape($element).
"'";
5760 $sql .=
" AND tc.code = '".$this->db->escape($code).
"'";
5762 $sql .=
" AND sc.entity IN (".getEntity($this->element).
")";
5763 $sql .=
" AND tc.source = 'external'";
5764 $sql .=
" AND tc.active = 1";
5766 $sql .=
" ORDER BY t.lastname ASC";
5768 dol_syslog(get_class($this).
"::getContacts", LOG_DEBUG);
5769 $resql = $this->db->query($sql);
5771 $num = $this->db->num_rows($resql);
5774 $obj = $this->db->fetch_object($resql);
5777 $transkey =
"TypeContact_".$obj->element.
"_".$obj->source.
"_".$obj->code;
5778 $libelle_type = ($langs->trans($transkey) != $transkey ? $langs->trans($transkey) : $obj->type_label);
5779 $tab[$obj->id] = array(
5780 'source' => $obj->source,
5781 'socid' => (
int) $obj->socid,
5782 'id' => (
int) $obj->id,
5783 'nom' => $obj->lastname,
5784 'civility' => $obj->civility,
5785 'lastname' => $obj->lastname,
5786 'firstname' => $obj->firstname,
5787 'email' => $obj->email,
5788 'login' => (empty($obj->login) ?
'' : $obj->login),
5789 'photo' => (empty($obj->photo) ?
'' : $obj->photo),
5790 'statuscontact' => $obj->statuscontact,
5791 'rowid' => (
int) $obj->rowid,
5792 'code' => $obj->code,
5793 'element' => $obj->element,
5794 'libelle' => $libelle_type,
5795 'status' => $obj->statuslink,
5796 'fk_c_type_contact' => (int) $obj->fk_c_type_contact
5799 $tab[$obj->id] = (int) $obj->id;
5806 $this->error = $this->db->lasterror();
5824 global
$conf, $langs, $hookmanager, $user, $action;
5827 $soc_origin =
new Societe($this->db);
5829 dol_syslog(
"mergeCompany merge thirdparty id=".$soc_origin_id.
" (will be deleted) into the thirdparty id=".$this->id);
5831 if ($soc_origin->fetch($soc_origin_id) < 1) {
5832 $this->error = $langs->trans(
'ErrorRecordNotFound');
5840 $this->client |= $soc_origin->client;
5841 $this->fournisseur |= $soc_origin->fournisseur;
5842 $listofproperties = array(
5843 'address',
'zip',
'town',
'state_id',
'country_id',
'phone',
'phone_mobile',
'fax',
'email',
'socialnetworks',
'url',
'barcode',
5844 'idprof1',
'idprof2',
'idprof3',
'idprof4',
'idprof5',
'idprof6',
5845 'tva_intra',
'euid',
'effectif_id',
'forme_juridique',
'remise_percent',
'remise_supplier_percent',
'mode_reglement_supplier_id',
'cond_reglement_supplier_id',
'name_bis',
5846 'stcomm_id',
'outstanding_limit',
'order_min_amount',
'supplier_order_min_amount',
'price_level',
'parent',
'default_lang',
'ref',
'ref_ext',
'import_key',
'fk_incoterms',
'fk_multicurrency',
5847 'code_client',
'code_fournisseur',
'code_compta',
'code_compta_fournisseur',
5848 'model_pdf',
'webservices_url',
'webservices_key',
'accountancy_code_sell',
'accountancy_code_buy',
'typent_id'
5850 foreach ($listofproperties as $property) {
5851 if (empty($this->$property)) {
5852 $this->$property = $soc_origin->$property;
5856 if ($this->typent_id == -1) {
5857 $this->typent_id = $soc_origin->typent_id;
5861 $listofproperties = array(
5862 'note_public',
'note_private'
5864 foreach ($listofproperties as $property) {
5865 $this->$property =
dol_concatdesc($this->$property, $soc_origin->$property);
5869 if (is_array($soc_origin->array_options)) {
5870 foreach ($soc_origin->array_options as $key => $val) {
5871 if (empty($this->array_options[$key])) {
5872 $this->array_options[$key] = $val;
5878 if (empty($this->name_bis) && $this->
name != $soc_origin->name) {
5879 $this->name_bis = $this->name;
5883 include_once DOL_DOCUMENT_ROOT.
'/categories/class/categorie.class.php';
5886 $custcats_ori = $static_cat->containing($soc_origin->id,
'customer',
'id');
5887 $custcats = $static_cat->containing($this->
id,
'customer',
'id');
5888 $custcats = array_merge($custcats, $custcats_ori);
5891 $suppcats_ori = $static_cat->containing($soc_origin->id,
'supplier',
'id');
5892 $suppcats = $static_cat->containing($this->
id,
'supplier',
'id');
5893 $suppcats = array_merge($suppcats, $suppcats_ori);
5897 if ($soc_origin->code_client == $this->code_client
5898 || $soc_origin->code_fournisseur == $this->code_fournisseur
5899 || $soc_origin->barcode == $this->barcode) {
5900 dol_syslog(
"We clean customer and supplier code so we will be able to make the update of target");
5901 $soc_origin->code_client =
'';
5902 $soc_origin->code_fournisseur =
'';
5903 $soc_origin->barcode =
'';
5904 $soc_origin->update($soc_origin->id, $user, 0, 1, 1,
'merge');
5911 if (count($children_ori)) {
5912 foreach ($children_ori as $child_id) {
5913 $child =
new Societe($this->db);
5914 $child->id = $child_id;
5915 $child->setParent($this->
id);
5921 $result = $this->
update($this->
id, $user, 0, 1, 1,
'merge');
5930 'Adherent' =>
'/adherents/class/adherent.class.php',
5932 'ActionComm' =>
'/comm/action/class/actioncomm.class.php',
5933 'Propal' =>
'/comm/propal/class/propal.class.php',
5934 'Commande' =>
'/commande/class/commande.class.php',
5935 'Facture' =>
'/compta/facture/class/facture.class.php',
5936 'FactureRec' =>
'/compta/facture/class/facture-rec.class.php',
5937 'LignePrelevement' =>
'/compta/prelevement/class/ligneprelevement.class.php',
5938 'Contact' =>
'/contact/class/contact.class.php',
5939 'Contrat' =>
'/contrat/class/contrat.class.php',
5940 'Expedition' =>
'/expedition/class/expedition.class.php',
5941 'CommandeFournisseur' =>
'/fourn/class/fournisseur.commande.class.php',
5942 'FactureFournisseur' =>
'/fourn/class/fournisseur.facture.class.php',
5943 'FactureFournisseurRec' =>
'/fourn/class/fournisseur.facture-rec.class.php',
5944 'Reception' =>
'/reception/class/reception.class.php',
5945 'SupplierProposal' =>
'/supplier_proposal/class/supplier_proposal.class.php',
5946 'ProductFournisseur' =>
'/fourn/class/fournisseur.product.class.php',
5947 'Product' =>
'/product/class/product.class.php',
5949 'Project' =>
'/projet/class/project.class.php',
5950 'User' =>
'/user/class/user.class.php',
5951 'Account' =>
'/compta/bank/class/account.class.php',
5952 'ConferenceOrBoothAttendee' =>
'/eventorganization/class/conferenceorboothattendee.class.php',
5953 'Societe' =>
'/societe/class/societe.class.php',
5956 if ($this->db->DDLListTables((
string)
$conf->db->name, $this->db->prefix().
'delivery')) {
5957 $objects[
'Delivery'] =
'/delivery/class/delivery.class.php';
5959 if ($this->db->DDLListTables((
string)
$conf->db->name, $this->db->prefix().
'mrp_mo')) {
5960 $objects[
'Mo'] =
'/mrp/class/mo.class.php';
5962 if ($this->db->DDLListTables((
string)
$conf->db->name, $this->db->prefix().
'don')) {
5963 $objects[
'Don'] =
'/don/class/don.class.php';
5965 if ($this->db->DDLListTables((
string)
$conf->db->name, $this->db->prefix().
'partnership')) {
5966 $objects[
'PartnerShip'] =
'/partnership/class/partnership.class.php';
5968 if ($this->db->DDLListTables((
string)
$conf->db->name, $this->db->prefix().
'fichinter')) {
5969 $objects[
'Fichinter'] =
'/fichinter/class/fichinter.class.php';
5971 if ($this->db->DDLListTables((
string)
$conf->db->name, $this->db->prefix().
'ticket')) {
5972 $objects[
'Ticket'] =
'/ticket/class/ticket.class.php';
5976 foreach ($objects as $object_name => $object_file) {
5986 require_once DOL_DOCUMENT_ROOT.$object_file;
5988 if (!$object_name::replaceThirdparty($this->db, $soc_origin->id, $this->id)) {
5990 $this->error = $this->db->lasterror();
5998 $parameters = array(
'soc_origin' => $soc_origin->id,
'soc_dest' => $this->id);
5999 $reshook = $hookmanager->executeHooks(
'replaceThirdparty', $parameters, $this, $action);
6002 $this->error = $hookmanager->error;
6003 $this->errors = $hookmanager->errors;
6010 $this->context = array(
'merge' => 1,
'mergefromid' => $soc_origin->id,
'mergefromname' => $soc_origin->name);
6013 $result = $this->call_trigger(
'COMPANY_MODIFY', $user);
6022 if ($soc_origin->delete($soc_origin->id, $user) < 1) {
6023 $this->error = $soc_origin->error;
6024 $this->errors = $soc_origin->errors;
6032 if (!empty(
$conf->societe->multidir_output[$this->entity])) {
6033 $srcdir =
$conf->societe->multidir_output[$this->entity].
"/".$soc_origin->id;
6034 $destdir =
$conf->societe->multidir_output[$this->entity].
"/".$this->id;
6038 foreach ($dirlist as $filetomove) {
6039 $destfile = $destdir.
'/'.$filetomove[
'relativename'];
6041 dol_move($filetomove[
'fullname'], $destfile,
'0', 0, 0, 1);
6049 $this->db->commit();
6052 $langs->load(
"errors");
6053 $this->error = $langs->trans(
'ErrorsThirdpartyMerge');
6054 $this->db->rollback();
Class to manage members of a foundation.
Class to manage withdrawal receipts.
Class to manage categories.
Parent class of all other business classes (invoices, contracts, proposals, orders,...
fetch_optionals($rowid=null, $optionsArray=null)
Function to get extra fields of an object into $this->array_options This method is in most cases call...
commonGenerateDocument($modelspath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref, $moreparams=null)
Common function for all objects extending CommonObject for generating documents.
setErrorsFromObject($object)
setErrorsFromObject
isObjectUsed($id=0, $entity=0)
Function to check if an object is used by others (by children).
deleteExtraFields()
Delete all extra fields values for the current object.
insertExtraLanguages($trigger='', $userused=null)
Add/Update all extra languages values for the current object.
static commonReplaceThirdparty(DoliDB $dbs, $origin_id, $dest_id, array $tables, $ignoreerrors=0)
Function used to replace a thirdparty id with another one.
setValueFrom($field, $value, $table='', $id=null, $format='', $id_field='', $fuser=null, $trigkey='', $fk_user_field='fk_user_modif')
Setter generic.
insertExtraFields($trigger='', $userused=null)
Add/Update all extra fields values for the current object.
Class to manage bank accounts description of third parties.
Class to stock current configuration.
Class to manage absolute discounts.
Class to manage Dolibarr database access.
Class to manage suppliers invoices.
const TYPE_CREDIT_NOTE
Credit note invoice.
Class to manage invoices.
Class to manage triggers.
static getIdAndTxFromCode($dbs, $code, $date_document=0)
Get id and rate of currency from code.
static getIdFromCode($dbs, $code)
Get id of currency from code.
Class to manage third parties objects (customers, suppliers, prospects...)
setParent($id)
Define parent company of current company.
getLibProspLevel()
Return prostect level.
thirdparty_and_contact_email_array($addthirdparty=0)
Return list of contacts emails existing for third party.
setAsCustomer()
Define third party as a customer.
findNearest($rowid=0, $ref='', $ref_ext='', $barcode='', $idprof1='', $idprof2='', $idprof3='', $idprof4='', $idprof5='', $idprof6='', $email='', $ref_alias='', $is_client=0, $is_supplier=0)
Search the thirdparty that match the most the provided parameters.
codefournisseur_modifiable()
Check if a vendor code is editable in the code control module configuration.
contact_get_property($rowid, $mode)
Return property of contact from its id.
check_codeclient()
Check customer code.
verify()
Check properties of third party are ok (like name, third party codes, ...) Used before an add or upda...
isInSEPA()
Return if a company is inside the SEPA zone (Single Euro Payment Area)
LibProspCommStatut($status, $mode=0, $label='', $picto='')
Return label of a given status.
static replaceThirdparty(DoliDB $dbs, $origin_id, $dest_id)
Function used to replace a thirdparty id with another one.
get_all_rib()
Return Array of RIB.
get_codecompta($type)
Assigns a accounting code from the accounting code module.
__construct($db)
Constructor.
del_commercial(User $user, $commid)
Add link to sales representative.
info($id)
Load information for tab info.
has_projects()
Indicates if the company has projects.
setThirdpartyType($typent_id)
Define third-party type of current company.
isACompany()
Check if third party is a company (Business) or an end user (Consumer)
getOutstandingBills($mode='customer', $late=0)
Return amount of bill not yet paid and total of all invoices.
useLocalTax($localTaxNum=0, $mode=0, $thirdparty=null)
Check if we must use localtax feature or not according to country (country of $mysoc in most cases).
add_commercial(User $user, $commid)
Add link to sales representative.
LibStatut($status, $mode=0)
Return the label of a given status.
update($id, User $user, $call_trigger=1, $allowmodcodeclient=0, $allowmodcodefournisseur=0, $action='update', $nosyncmember=1)
Update parameters of third party.
const PROSPECT
Third party type is a prospect.
create(User $user, $notrigger=0)
Create third party in database.
set_as_client()
Define third party as a customer.
getOutstandingOrders($mode='customer')
Return amount of order not yet paid and total and list of all orders.
id_prof_exists($idprof, $value, $socid=0)
Verify if a profid exists into database for others thirds.
useRevenueStamp()
Check if we must use revenue stamps feature or not according to country (country of $mysoc in most ca...
id_prof_check($idprof)
Check the validity of a professional identifier according to the properties (country) of the thirdpar...
id_prof_verifiable($idprof)
Returns if a profid should be verified to be unique.
create_from_member(Adherent $member, $socname='', $socalias='', $customercode='')
Create a third party into database from a member object.
getParentsForCompany($company_id, $parents=array())
Get parents for company.
set_remise_except($remise, User $user, $desc, $vatrate='', $discount_type=0, $price_base_type='HT')
Add a discount for third party.
const CUSTOMER_AND_PROSPECT
Third party type is a customer and a prospect.
getContacts($list=0, $code='', $element='', $status=-1)
Get array of all contacts for a society (stored in societe_contacts instead of element_contacts for a...
generateDocument($modele, $outputlangs, $hidedetails=0, $hidedesc=0, $hideref=0, $moreparams=null)
Create a document onto disk according to template module.
set_remise_client($remise, $note, User $user)
Defines the company as a customer.
getOutstandingProposals($mode='customer')
Return amount of proposal not yet paid and total an dlist of all proposals.
const CUSTOMER
Third party type is a customer.
fetch($rowid, $ref='', $ref_ext='', $barcode='', $idprof1='', $idprof2='', $idprof3='', $idprof4='', $idprof5='', $idprof6='', $email='', $ref_alias='', $is_client=0, $is_supplier=0)
Load a third party from database into memory.
getSalesRepresentatives(User $user, $mode=0, $sortfield=null, $sortorder=null)
Return array of sales representatives.
LoadSupplierCateg()
Load the list of provider categories.
getAvailableDiscounts($user=null, $filter='', $maxvalue=0, $discount_type=0)
Returns amount of included taxes of the current discounts/credits available from the company.
display_rib($mode='label')
Return bank number property of thirdparty (label or rum)
contact_array_objects()
Return the contact list of this company.
isInEEC()
Return if a company is inside the EEC (European Economic Community)
setCategories($categories, $type_categ, $remove_existing=true)
Sets object to supplied categories.
codeclient_modifiable()
Check if a client code is editable based on the parameters of the code control module.
fetchPartnerships($mode)
Function to get partnerships array.
validateFamilyTree($idparent, $idchild, $counter=0)
Check if a thirdparty $idchild is or not inside the parents (or grand parents) of another thirdparty ...
mergeCompany($soc_origin_id)
Merge a company with current one, deleting the given company $soc_origin_id.
const NO_SUPPLIER
Third party supplier flag is not supplier.
getNbOfEMailings()
Return number of mass Emailing received by this contacts with its email.
setNoEmail($no_email, $unsubscribegroup='')
Set "blacklist" mailing status.
setAccountancyCode($type, $value)
Sets an accountancy code for a thirdparty.
getOpenCreditNotesNotYetConvertedIntoDiscount($discount_type=0)
Return amount (with tax) of discounts currently available for a company, user or other criteria.
getChildrenForCompany($company_id)
Get children for company.
getLibCustProspStatut()
Return label of status customer is prospect/customer.
getNomUrl($withpicto=0, $option='', $maxlen=0, $notooltip=0, $save_lastsearch_value=-1, $noaliasinname=0, $target='', $morecss='')
Return a link on thirdparty (with picto)
getLibStatut($mode=0)
Return label of status (activity, closed)
const NO_CUSTOMER
Third party type is no customer.
calculateVATNumberFromProperties($thirdparty)
Calculate VAT intracommunity number for a thirdparty if missing, from the professional ID.
LibProspLevel($fk_prospectlevel)
Return label of prospect level.
set_remise_supplier($remise, $note, User $user)
Defines the company as a customer.
create_individual(User $user, $no_email=0, $tags=array(), $notrigger=0)
Create a contact/address from thirdparty.
getNoEmail()
get "blacklist" mailing status set no_email attribute to 1 or 0
getLibProspCommStatut($mode=0, $label='')
Return status of prospect.
AddFournisseurInCategory($categorie_id)
Insert link supplier - category.
contact_property_array($mode='email', $hidedisabled=0)
Return list of contacts emails or mobile existing for third party.
LibCustProspStatut($status)
Return the label of the customer/prospect status.
getTypeUrl($withpicto=0, $option='', $notooltip=0, $tag='a')
Return link(s) on type of thirdparty (with picto)
setPriceLevel($price_level, User $user)
Set the price level.
thirdparty_and_contact_phone_array()
Return list of contacts mobile phone existing for third party.
deprecatedProperties()
Provide list of deprecated properties and replacements.
getTooltipContentArray($params)
getTooltipContentArray
useNPR()
Check if we must use NPR Vat (french stupid rule) or not according to country (country of $mysoc in m...
setSalesRep($salesrep, $onlyAdd=false)
Sets sales representatives of the thirdparty.
getKanbanView($option='', $arraydata=array())
Return clickable link of object (with optional picto)
const SUPPLIER
Third party supplier flag is a supplier.
check_codefournisseur()
Check supplier code.
contact_array()
Return the contact list of this company.
initAsSpecimen()
Initialise an instance with random values.
id_prof_url($idprof, $thirdparty)
Return an url to check online a professional id or empty string.
setMysoc(Conf $conf)
Set properties with value into $conf.
Class to manage Dolibarr users.
print $langs trans("Ref").' m titre as m m statut as status
Or an array listing all the potential status of the object: array: int of the status => translated la...
setUpperOrLowerCase()
Set to upper or ucwords/lower if needed.
trait CommonSocialNetworks
Superclass for social networks.
getCountry($searchkey, $withcode='', $dbtouse=null, $outputlangs=null, $entconv=1, $searchlabel='')
Return country label, code or id from an id, code or label.
getState($id, $withcode='0', $dbtouse=null, $withregion=0, $outputlangs=null, $entconv=1)
Return state translated from an id.
dol_get_first_hour($date, $gm='tzserver')
Return GMT time for first hour of a given GMT date (it removes hours, min and second part)
print $script_file $mode $langs defaultlang(is_numeric($duration_value) ? " delay=". $duration_value :"").(is_numeric($duration_value2) ? " after cd cd cd description as p label as s rowid as s nom as s email
Sender: Who sends the email ("Sender" has sent emails on behalf of "From").
dol_move($srcfile, $destfile, $newmask='0', $overwriteifexists=1, $testvirus=0, $indexdatabase=1, $moreinfo=array(), $entity=null)
Move a file into another name.
dol_delete_dir_recursive($dir, $count=0, $nophperrors=0, $onlysub=0, &$countdeleted=0, $indexdatabase=1, $nolog=0, $level=0)
Remove a directory $dir and its subdirectories (or only files and subdirectories)
dol_dir_list($utf8_path, $types="all", $recursive=0, $filter="", $excludefilter=null, $sortcriteria="name", $sortorder=SORT_ASC, $mode=0, $nohook=0, $relativename="", $donotfollowsymlinks=0, $nbsecondsold=0)
Scan a directory and return a list of files/directories.
dol_is_dir($folder)
Test if filename is a directory.
clean_url($url, $http=1)
Clean an url string.
dol_now($mode='gmt')
Return date for now.
dol_getIdFromCode($db, $key, $tablename, $fieldkey='code', $fieldid='id', $entityfilter=0, $filters='', $useCache=true)
Return an id or code from a code or id.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
setEntity($currentobject)
Set entity id to use when to create an object.
dol_print_phone($phone, $countrycode='', $contactid=0, $socid=0, $addlink='', $separ=" ", $withpicto='', $titlealt='', $adddivfloat=0, $morecss='paddingright')
Format phone numbers according to country.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2, $allowothertags=array())
Show picto whatever it's its name (generic function)
dol_format_address($object, $withcountry=0, $sep="\n", $outputlangs=null, $mode=0, $extralangcode='')
Return a formatted address (part address/zip/town/state) according to country rules.
dol_string_nohtmltag($stringtoclean, $removelinefeed=1, $pagecodeto='UTF-8', $strip_tags=0, $removedoublespaces=1)
Clean a string from all HTML tags and entities.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
dol_string_nospecial($str, $newstr='_', $badcharstoreplace='', $badcharstoremove='', $keepspaces=0)
Clean a string from all punctuation characters to use it as a ref or login.
img_action($titlealt, $numaction, $picto='', $moreatt='')
Show logo action.
img_object($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $allowothertags=array())
Show a picto called object_picto (generic function)
setEventMessage($mesgs, $style='mesgs', $noduplicate=0, $attop=0)
Set event message in dol_events session object.
dol_strlen($string, $stringencoding='UTF-8')
Make a strlen call.
getTaxesFromId($vatrate, $buyer=null, $seller=null, $firstparamisid=1)
Get tax (VAT) main information from Id.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
if(!function_exists( 'dol_getprefix')) dol_include_once($relpath, $classname='')
Make an include_once using default root and alternate root if it fails.
dolGetFirstLastname($firstname, $lastname, $nameorder=-1)
Return firstname and lastname in correct order.
dol_concatdesc($text1, $text2, $forxml=false, $invert=false)
Concat 2 descriptions with a new line between them (second operand after first one with appropriate n...
dolPrintHTMLForAttribute($s, $escapeonlyhtmltags=0, $allowothertags=array())
Return a string ready to be output into an HTML attribute (alt, title, data-html, ....
dol_print_email($email, $contactid=0, $socid=0, $addlink=0, $max=0, $showinvalid=1, $withpicto=0, $morecss='paddingrightonly')
Show EMail link formatted for HTML output.
getDolGlobalBool($key, $default=false)
Return a Dolibarr global constant boolean value.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
dol_trunc($string, $size=40, $trunc='right', $stringencoding='UTF-8', $nodot=0, $display=0)
Truncate a string to a particular length adding '…' if string larger than length.
isValidEmail($address, $acceptsupervisorkey=0, $acceptuserkey=0)
Return true if email syntax is ok.
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
isModEnabled($module)
Is Dolibarr module enabled.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
getEntity($element, $shared=1, $currentobject=null)
Get list of entity id to use.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...
div refaddress div address
query($query, $usesavepoint=0, $type='auto', $result_mode=0)
Execute a SQL request and return the resultset.
fetch_object($resultset)
Returns the current line (as an object) for the resultset cursor.
print $langs trans("Show") . '< td style="' . $timeColor . '" align="center"> s</td > badge status0 badge status4 badge status3 Error badge status8< td align="center">< span class="badge ' . $badge . '"></span ></td >< td align="center">< a href="#" class="button button-small" onclick="openLogModal(this)" data-req="' . dol_escape_htmltag($reqSafe) . '" data-res="' . dol_escape_htmltag($resSafe) . '" data-err="' . dol_escape_htmltag($errSafe) . '">< span class="fa fa-search-plus"></span ></a ></td ></tr >< tr >< td colspan="' . $colspan . '" class="opacitymedium"></td ></tr ></table ></div ></form > logModal none logModal none s a JSON string
buildzip.php
isValidProfIds($idprof, $thirdparty, $lenghtonly=0)
Check the validity of a professional identifier according to the properties (country) of the company ...
$conf db name
Only used if Module[ID]Name translation string is not found.