44require_once DOL_DOCUMENT_ROOT.
'/core/class/commonobject.class.php';
45require_once DOL_DOCUMENT_ROOT.
'/core/class/commonincoterm.class.php';
46require_once DOL_DOCUMENT_ROOT.
'/core/class/commonsocialnetworks.class.php';
47require_once DOL_DOCUMENT_ROOT.
'/core/class/commonpeople.class.php';
48require_once DOL_DOCUMENT_ROOT.
'/core/lib/company.lib.php';
49require_once DOL_DOCUMENT_ROOT.
'/multicurrency/class/multicurrency.class.php';
64 public $module =
'societe';
69 public $element =
'societe';
74 public $table_element =
'societe';
79 public $fk_element =
'fk_soc';
84 public $fieldsforcombobox =
'nom,name_alias';
89 protected $childtables = array(
90 'supplier_proposal' => array(
'name' =>
'SupplierProposal'),
91 'propal' => array(
'name' =>
'Proposal'),
92 'commande' => array(
'name' =>
'Order'),
93 'facture' => array(
'name' =>
'Invoice'),
94 'facture_rec' => array(
'name' =>
'RecurringInvoiceTemplate'),
95 'contrat' => array(
'name' =>
'Contract'),
96 'fichinter' => array(
'name' =>
'Fichinter'),
97 'facture_fourn' => array(
'name' =>
'SupplierInvoice'),
98 'commande_fournisseur' => array(
'name' =>
'SupplierOrder'),
99 'projet' => array(
'name' =>
'Project'),
100 'expedition' => array(
'name' =>
'Shipment'),
101 'prelevement_lignes' => array(
'name' =>
'DirectDebitRecord'),
108 protected $childtablesoncascade = array(
110 'product_fournisseur_price',
111 'product_customer_price_log',
112 'product_customer_price',
113 '@Contact:/contact/class/contact.class.php:fk_soc',
118 'societe_remise_except',
119 'societe_commerciaux',
129 public $picto =
'company';
135 public $restrictiononfksoc = 1;
141 public $SupplierCategories = array();
147 public $prefixCustomerIsRequired;
178 public $fields = array(
179 'rowid' => array(
'type' =>
'integer',
'label' =>
'TechnicalID',
'enabled' => 1,
'visible' => -2,
'noteditable' => 1,
'notnull' => 1,
'index' => 1,
'position' => 1,
'comment' =>
'Id',
'css' =>
'left'),
180 'parent' => array(
'type' =>
'integer',
'label' =>
'Parent',
'enabled' => 1,
'visible' => -1,
'position' => 20),
181 'tms' => array(
'type' =>
'timestamp',
'label' =>
'DateModification',
'enabled' => 1,
'visible' => -1,
'notnull' => 1,
'position' => 25),
182 'datec' => array(
'type' =>
'datetime',
'label' =>
'DateCreation',
'enabled' => 1,
'visible' => -1,
'position' => 30),
183 'nom' => array(
'type' =>
'varchar(128)',
'length' => 128,
'label' =>
'Nom',
'enabled' => 1,
'visible' => -1,
'position' => 35,
'showoncombobox' => 1,
'csslist' =>
'tdoverflowmax150'),
184 'name_alias' => array(
'type' =>
'varchar(128)',
'label' =>
'Name alias',
'enabled' => 1,
'visible' => -1,
'position' => 36,
'showoncombobox' => 2),
185 'entity' => array(
'type' =>
'integer',
'label' =>
'Entity',
'default' =>
'1',
'enabled' => 1,
'visible' => -2,
'notnull' => 1,
'position' => 40,
'index' => 1),
186 'ref_ext' => array(
'type' =>
'varchar(255)',
'label' =>
'RefExt',
'enabled' => 1,
'visible' => 0,
'position' => 45),
187 'code_client' => array(
'type' =>
'varchar(24)',
'label' =>
'CustomerCode',
'enabled' => 1,
'visible' => -1,
'position' => 55),
188 'code_fournisseur' => array(
'type' =>
'varchar(24)',
'label' =>
'SupplierCode',
'enabled' => 1,
'visible' => -1,
'position' => 60),
189 'code_compta' => array(
'type' =>
'varchar(24)',
'label' =>
'CustomerAccountancyCode',
'enabled' => 1,
'visible' => -1,
'position' => 65),
190 'code_compta_fournisseur' => array(
'type' =>
'varchar(24)',
'label' =>
'SupplierAccountancyCode',
'enabled' => 1,
'visible' => -1,
'position' => 70),
191 'address' => array(
'type' =>
'varchar(255)',
'label' =>
'Address',
'enabled' => 1,
'visible' => -1,
'position' => 75),
192 'zip' => array(
'type' =>
'varchar(25)',
'label' =>
'Zip',
'enabled' => 1,
'visible' => -1,
'position' => 80),
193 'town' => array(
'type' =>
'varchar(50)',
'label' =>
'Town',
'enabled' => 1,
'visible' => -1,
'position' => 85),
194 'fk_departement' => array(
'type' =>
'integer',
'label' =>
'State',
'enabled' => 1,
'visible' => -1,
'position' => 90),
195 'fk_pays' => array(
'type' =>
'integer:Ccountry:core/class/ccountry.class.php',
'label' =>
'Country',
'enabled' => 1,
'visible' => -1,
'position' => 95),
196 'phone' => array(
'type' =>
'varchar(20)',
'label' =>
'Phone',
'enabled' => 1,
'visible' => -1,
'position' => 100),
197 'phone_mobile' => array(
'type' =>
'varchar(20)',
'label' =>
'PhoneMobile',
'enabled' => 1,
'visible' => -1,
'position' => 102),
198 'fax' => array(
'type' =>
'varchar(20)',
'label' =>
'Fax',
'enabled' => 1,
'visible' => -1,
'position' => 105),
199 'url' => array(
'type' =>
'varchar(255)',
'label' =>
'Url',
'enabled' => 1,
'visible' => -1,
'position' => 110),
200 'email' => array(
'type' =>
'varchar(128)',
'label' =>
'Email',
'enabled' => 1,
'visible' => -1,
'position' => 115),
201 'socialnetworks' => array(
'type' =>
'text',
'label' =>
'Socialnetworks',
'enabled' => 1,
'visible' => -1,
'position' => 120),
202 'fk_effectif' => array(
'type' =>
'integer',
'label' =>
'Workforce',
'enabled' => 1,
'visible' => -1,
'position' => 170),
203 'fk_typent' => array(
'type' =>
'integer',
'label' =>
'TypeOfCompany',
'enabled' => 1,
'visible' => -1,
'position' => 175,
'csslist' =>
'minwidth200'),
204 'fk_forme_juridique' => array(
'type' =>
'integer',
'label' =>
'JuridicalStatus',
'enabled' => 1,
'visible' => -1,
'position' => 180),
205 'fk_currency' => array(
'type' =>
'varchar(3)',
'label' =>
'Currency',
'enabled' => 1,
'visible' => -1,
'position' => 185),
206 'siren' => array(
'type' =>
'varchar(128)',
'label' =>
'Idprof1',
'enabled' => 1,
'visible' => -1,
'position' => 190),
207 'siret' => array(
'type' =>
'varchar(128)',
'label' =>
'Idprof2',
'enabled' => 1,
'visible' => -1,
'position' => 195),
208 'ape' => array(
'type' =>
'varchar(128)',
'label' =>
'Idprof3',
'enabled' => 1,
'visible' => -1,
'position' => 200),
209 'idprof4' => array(
'type' =>
'varchar(128)',
'label' =>
'Idprof4',
'enabled' => 1,
'visible' => -1,
'position' => 205),
210 'idprof5' => array(
'type' =>
'varchar(128)',
'label' =>
'Idprof5',
'enabled' => 1,
'visible' => -1,
'position' => 206),
211 'idprof6' => array(
'type' =>
'varchar(128)',
'label' =>
'Idprof6',
'enabled' => 1,
'visible' => -1,
'position' => 207),
212 'tva_intra' => array(
'type' =>
'varchar(20)',
'label' =>
'Tva intra',
'enabled' => 1,
'visible' => -1,
'position' => 210),
213 'capital' => array(
'type' =>
'double(24,8)',
'label' =>
'Capital',
'enabled' => 1,
'visible' => -1,
'position' => 215),
214 'fk_stcomm' => array(
'type' =>
'integer',
'label' =>
'CommercialStatus',
'enabled' => 1,
'visible' => -1,
'notnull' => 1,
'position' => 220),
215 'note_public' => array(
'type' =>
'html',
'label' =>
'NotePublic',
'enabled' => 1,
'visible' => 0,
'position' => 225),
216 'note_private' => array(
'type' =>
'html',
'label' =>
'NotePrivate',
'enabled' => 1,
'visible' => 0,
'position' => 230),
217 'prefix_comm' => array(
'type' =>
'varchar(5)',
'label' =>
'Prefix comm',
'enabled' =>
"getDolGlobalInt('SOCIETE_USEPREFIX')",
'visible' => -1,
'position' => 235),
218 'client' => array(
'type' =>
'tinyint(4)',
'label' =>
'Client',
'enabled' => 1,
'visible' => -1,
'position' => 240),
219 'fournisseur' => array(
'type' =>
'tinyint(4)',
'label' =>
'Fournisseur',
'enabled' => 1,
'visible' => -1,
'position' => 245),
220 'supplier_account' => array(
'type' =>
'varchar(32)',
'label' =>
'Supplier account',
'enabled' => 1,
'visible' => -1,
'position' => 250),
221 'fk_prospectlevel' => array(
'type' =>
'varchar(12)',
'label' =>
'ProspectLevel',
'enabled' => 1,
'visible' => -1,
'position' => 255),
222 'customer_bad' => array(
'type' =>
'tinyint(4)',
'label' =>
'Customer bad',
'enabled' => 1,
'visible' => -1,
'position' => 260),
223 'customer_rate' => array(
'type' =>
'double',
'label' =>
'Customer rate',
'enabled' => 1,
'visible' => -1,
'position' => 265),
224 'supplier_rate' => array(
'type' =>
'double',
'label' =>
'Supplier rate',
'enabled' => 1,
'visible' => -1,
'position' => 270),
225 'fk_user_creat' => array(
'type' =>
'integer:User:user/class/user.class.php',
'label' =>
'UserAuthor',
'enabled' => 1,
'visible' => -2,
'position' => 275),
226 'fk_user_modif' => array(
'type' =>
'integer:User:user/class/user.class.php',
'label' =>
'UserModif',
'enabled' => 1,
'visible' => -2,
'notnull' => -1,
'position' => 280),
229 'mode_reglement' => array(
'type' =>
'tinyint(4)',
'label' =>
'Mode reglement',
'enabled' => 1,
'visible' => -1,
'position' => 295),
230 'cond_reglement' => array(
'type' =>
'tinyint(4)',
'label' =>
'Cond reglement',
'enabled' => 1,
'visible' => -1,
'position' => 300),
231 'deposit_percent' => array(
'type' =>
'varchar(63)',
'label' =>
'DepositPercent',
'enabled' => 1,
'visible' => -1,
'position' => 301),
232 'mode_reglement_supplier' => array(
'type' =>
'integer',
'label' =>
'Mode reglement supplier',
'enabled' => 1,
'visible' => -1,
'position' => 305),
233 'cond_reglement_supplier' => array(
'type' =>
'integer',
'label' =>
'Cond reglement supplier',
'enabled' => 1,
'visible' => -1,
'position' => 308),
234 'outstanding_limit' => array(
'type' =>
'double(24,8)',
'label' =>
'OutstandingBill',
'enabled' => 1,
'visible' => -1,
'position' => 310,
'isameasure' => 1),
235 'order_min_amount' => array(
'type' =>
'double(24,8)',
'label' =>
'Order min amount',
'enabled' =>
'isModEnabled("order") && !empty($conf->global->ORDER_MANAGE_MIN_AMOUNT)',
'visible' => -1,
'position' => 315,
'isameasure' => 1),
236 'supplier_order_min_amount' => array(
'type' =>
'double(24,8)',
'label' =>
'Supplier order min amount',
'enabled' =>
'isModEnabled("order") && !empty($conf->global->ORDER_MANAGE_MIN_AMOUNT)',
'visible' => -1,
'position' => 320,
'isameasure' => 1),
237 'fk_shipping_method' => array(
'type' =>
'integer',
'label' =>
'Fk shipping method',
'enabled' => 1,
'visible' => -1,
'position' => 330),
238 'tva_assuj' => array(
'type' =>
'tinyint(4)',
'label' =>
'Tva assuj',
'enabled' => 1,
'visible' => -1,
'position' => 335),
239 'localtax1_assuj' => array(
'type' =>
'tinyint(4)',
'label' =>
'Localtax1 assuj',
'enabled' => 1,
'visible' => -1,
'position' => 340),
240 'localtax1_value' => array(
'type' =>
'double(6,3)',
'label' =>
'Localtax1 value',
'enabled' => 1,
'visible' => -1,
'position' => 345),
241 'localtax2_assuj' => array(
'type' =>
'tinyint(4)',
'label' =>
'Localtax2 assuj',
'enabled' => 1,
'visible' => -1,
'position' => 350),
242 'localtax2_value' => array(
'type' =>
'double(6,3)',
'label' =>
'Localtax2 value',
'enabled' => 1,
'visible' => -1,
'position' => 355),
243 'vat_reverse_charge' => array(
'type' =>
'tinyint(4)',
'label' =>
'Vat reverse charge',
'enabled' => 1,
'visible' => -1,
'position' => 335),
244 'barcode' => array(
'type' =>
'varchar(255)',
'label' =>
'Barcode',
'enabled' => 1,
'visible' => -1,
'position' => 360),
245 'price_level' => array(
'type' =>
'integer',
'label' =>
'Price level',
'enabled' =>
'$conf->global->PRODUIT_MULTIPRICES || getDolGlobalString("PRODUIT_CUSTOMER_PRICES_BY_QTY_MULTIPRICES") || getDolGlobalString("PRODUIT_CUSTOMER_PRICES_AND_MULTIPRICES")',
'visible' => -1,
'position' => 365),
246 'default_lang' => array(
'type' =>
'varchar(6)',
'label' =>
'Default lang',
'enabled' => 1,
'visible' => -1,
'position' => 370),
247 'canvas' => array(
'type' =>
'varchar(32)',
'label' =>
'Canvas',
'enabled' => 1,
'visible' => -1,
'position' => 375),
248 'fk_barcode_type' => array(
'type' =>
'integer',
'label' =>
'Fk barcode type',
'enabled' => 1,
'visible' => -1,
'position' => 405),
249 'webservices_url' => array(
'type' =>
'varchar(255)',
'label' =>
'Webservices url',
'enabled' => 1,
'visible' => -1,
'position' => 410),
250 'webservices_key' => array(
'type' =>
'varchar(128)',
'label' =>
'Webservices key',
'enabled' => 1,
'visible' => -1,
'position' => 415),
251 'fk_incoterms' => array(
'type' =>
'integer',
'label' =>
'Fk incoterms',
'enabled' => 1,
'visible' => -1,
'position' => 425),
252 'location_incoterms' => array(
'type' =>
'varchar(255)',
'label' =>
'Location incoterms',
'enabled' => 1,
'visible' => -1,
'position' => 430),
253 'model_pdf' => array(
'type' =>
'varchar(255)',
'label' =>
'Model pdf',
'enabled' => 1,
'visible' => 0,
'position' => 435),
254 'last_main_doc' => array(
'type' =>
'varchar(255)',
'label' =>
'LastMainDoc',
'enabled' => 1,
'visible' => -1,
'position' => 270),
255 'fk_multicurrency' => array(
'type' =>
'integer',
'label' =>
'Fk multicurrency',
'enabled' => 1,
'visible' => -1,
'position' => 440),
256 'multicurrency_code' => array(
'type' =>
'varchar(255)',
'label' =>
'Multicurrency code',
'enabled' => 1,
'visible' => -1,
'position' => 445),
257 'fk_account' => array(
'type' =>
'integer',
'label' =>
'PaymentBankAccount',
'enabled' => 1,
'visible' => -1,
'position' => 450),
258 'fk_warehouse' => array(
'type' =>
'integer',
'label' =>
'Warehouse',
'enabled' => 1,
'visible' => -1,
'position' => 455),
259 'logo' => array(
'type' =>
'varchar(255)',
'label' =>
'Logo',
'enabled' => 1,
'visible' => -1,
'position' => 400),
260 'logo_squarred' => array(
'type' =>
'varchar(255)',
'label' =>
'Logo squarred',
'enabled' => 1,
'visible' => -1,
'position' => 401),
261 'status' => array(
'type' =>
'tinyint(4)',
'label' =>
'Status',
'enabled' => 1,
'visible' => -1,
'position' => 500),
262 'import_key' => array(
'type' =>
'varchar(14)',
'label' =>
'ImportId',
'enabled' => 1,
'visible' => -2,
'position' => 1000),
320 public $departement_code;
345 public $phone_mobile;
492 public $socialobject;
502 public $tva_assuj = 1;
512 public $vat_reverse_charge = 0;
518 public $localtax1_assuj;
522 public $localtax1_value;
526 public $localtax2_assuj;
530 public $localtax2_value;
545 public $typent_id = 0;
557 public $effectif_id = 0;
561 public $forme_juridique_code = 0;
566 public $forme_juridique;
571 public $remise_percent;
575 public $remise_supplier_percent;
580 public $mode_reglement_id;
584 public $cond_reglement_id;
588 public $deposit_percent;
592 public $mode_reglement_supplier_id;
596 public $cond_reglement_supplier_id;
600 public $transport_mode_supplier_id;
605 public $fk_prospectlevel;
617 public $user_modification;
624 public $user_creation;
636 public $prospect = 0;
654 public $code_fournisseur;
660 public $code_compta_client;
666 public $accountancy_code_customer_general;
672 public $accountancy_code_customer;
678 public $code_compta_fournisseur;
684 public $accountancy_code_supplier_general;
690 public $accountancy_code_supplier;
696 public $code_compta_product;
709 public $note_private;
727 public $stcomm_picto;
733 public $status_prospect_label;
744 public $outstanding_limit;
749 public $order_min_amount;
754 public $supplier_order_min_amount;
760 public $commercial_id;
772 public $default_lang;
803 public $webservices_url;
809 public $webservices_key;
829 public $logo_squarred;
834 public $logo_squarred_small;
839 public $logo_squarred_mini;
844 public $accountancy_code_sell;
849 public $accountancy_code_buy;
854 public $currency_code;
860 public $fk_multicurrency;
865 public $multicurrency_code;
871 public $fk_warehouse;
884 public $partnerships = array();
890 public $bank_account;
900 const STATUS_CEASED = 0;
901 const STATUS_INACTIVITY = 1;
942 'code_compta' =>
'code_compta_client',
944 + parent::deprecatedProperties();
958 $this->ismultientitymanaged = 1;
959 $this->isextrafieldmanaged = 1;
962 $this->fournisseur = 0;
963 $this->typent_id = 0;
964 $this->effectif_id = 0;
965 $this->forme_juridique_code = 0;
966 $this->tva_assuj = 1;
967 $this->vat_reverse_charge = 0;
971 $this->fields[
'address'][
'showoncombobox'] =
getDolGlobalInt(
'COMPANY_SHOW_ADDRESS_SELECTLIST');
972 $this->fields[
'zip'][
'showoncombobox'] =
getDolGlobalInt(
'COMPANY_SHOW_ADDRESS_SELECTLIST');
973 $this->fields[
'town'][
'showoncombobox'] =
getDolGlobalInt(
'COMPANY_SHOW_ADDRESS_SELECTLIST');
989 global $langs,
$conf;
994 if (empty($this->
status)) {
997 $this->
name = $this->
name ? trim($this->
name) : trim((
string) $this->nom);
999 $this->nom = $this->name;
1001 if (empty($this->client)) {
1004 if (empty($this->fournisseur)) {
1005 $this->fournisseur = 0;
1007 $this->import_key = trim((
string) $this->import_key);
1009 $this->code_compta_client = trim($this->code_compta_client ??
'');
1011 $this->accountancy_code_customer_general = trim($this->accountancy_code_customer_general ??
'');
1012 if ($this->accountancy_code_customer_general ===
'-1') {
1013 $this->accountancy_code_customer_general =
'';
1015 $this->accountancy_code_customer = trim((
string) $this->code_compta_client);
1016 $this->accountancy_code_supplier_general = trim($this->accountancy_code_supplier_general ??
'');
1017 if ($this->accountancy_code_supplier_general ===
'-1') {
1018 $this->accountancy_code_supplier_general =
'';
1020 $this->accountancy_code_supplier = trim((
string) $this->code_compta_fournisseur);
1021 $this->accountancy_code_buy = trim((
string) $this->accountancy_code_buy);
1022 $this->accountancy_code_sell = trim((
string) $this->accountancy_code_sell);
1024 if (!empty($this->multicurrency_code)) {
1027 if (empty($this->fk_multicurrency)) {
1028 $this->multicurrency_code =
'';
1029 $this->fk_multicurrency = 0;
1036 if (empty($this->date_creation)) {
1037 $this->date_creation = $now;
1043 if ($this->code_client == -1 || $this->code_client ===
'auto') {
1044 $this->get_codeclient($this, 0);
1046 if ($this->code_fournisseur ==
'-1' || $this->code_fournisseur ===
'auto') {
1047 $this->get_codefournisseur($this, 1);
1052 $result = $this->
verify();
1057 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"societe (";
1059 $sql .=
", name_alias";
1062 $sql .=
", fk_user_creat";
1063 $sql .=
", fk_typent";
1066 $sql .=
", ref_ext";
1067 $sql .=
", fk_stcomm";
1068 $sql .=
", fk_incoterms";
1069 $sql .=
", location_incoterms";
1070 $sql .=
", import_key";
1071 $sql .=
", fk_multicurrency";
1072 $sql .=
", multicurrency_code";
1075 $sql .=
", vat_reverse_charge";
1076 $sql .=
", accountancy_code_buy";
1077 $sql .=
", accountancy_code_sell";
1079 $sql .=
") VALUES ('".$this->db->escape($this->name).
"',";
1080 $sql .=
" '".$this->db->escape($this->name_alias).
"',";
1081 $sql .=
" ".((int) $this->entity).
",";
1082 $sql .=
" '".$this->db->idate($this->date_creation).
"'";
1083 $sql .=
", ".(!empty($user->id) ? ((int) $user->id) :
"null");
1084 $sql .=
", ".(!empty($this->typent_id) ? ((int) $this->typent_id) :
"null");
1085 $sql .=
", ".(!empty($this->canvas) ?
"'".$this->db->escape($this->canvas).
"'" :
"null");
1086 $sql .=
", ".((int) $this->
status);
1087 $sql .=
", ".(!empty($this->ref_ext) ?
"'".$this->db->escape($this->ref_ext).
"'" :
"null");
1089 $sql .=
", ".(int) $this->fk_incoterms;
1090 $sql .=
", '".$this->db->escape($this->location_incoterms).
"'";
1091 $sql .=
", ".(!empty($this->import_key) ?
"'".$this->db->escape($this->import_key).
"'" :
"null");
1092 $sql .=
", ".(int) $this->fk_multicurrency;
1093 $sql .=
", '".$this->db->escape($this->multicurrency_code).
"'";
1094 $sql .=
", '".$this->db->escape($this->ip).
"'";
1096 $sql .=
", ".(empty($this->vat_reverse_charge) ?
'0' :
'1');
1097 $sql .=
", '" . $this->db->escape($this->accountancy_code_buy) .
"'";
1098 $sql .=
", '" . $this->db->escape($this->accountancy_code_sell) .
"'";
1102 dol_syslog(get_class($this).
"::create", LOG_DEBUG);
1104 $result = $this->db->query($sql);
1106 $this->
id = $this->db->last_insert_id(MAIN_DB_PREFIX.
"societe");
1108 $ret = $this->
update($this->
id, $user, 0, 1, 1,
'add');
1112 $this->db->query(
"DELETE FROM ".MAIN_DB_PREFIX.
"societe_perentity WHERE fk_soc = ".((
int) $this->id).
" AND entity = ".((
int)
$conf->entity));
1114 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"societe_perentity (";
1117 $sql .=
", vat_reverse_charge";
1118 $sql .=
", accountancy_code_customer_general";
1119 $sql .=
", accountancy_code_customer";
1120 $sql .=
", accountancy_code_supplier_general";
1121 $sql .=
", accountancy_code_supplier";
1122 $sql .=
", accountancy_code_buy";
1123 $sql .=
", accountancy_code_sell";
1124 $sql .=
") VALUES (";
1126 $sql .=
", ".((int)
$conf->entity);
1127 $sql .=
", ".(empty($this->vat_reverse_charge) ?
'0' :
'1');
1128 $sql .=
", '".$this->db->escape($this->accountancy_code_customer_general).
"'";
1129 $sql .=
", '".$this->db->escape($this->accountancy_code_customer).
"'";
1130 $sql .=
", '".$this->db->escape($this->accountancy_code_supplier_general).
"'";
1131 $sql .=
", '".$this->db->escape($this->accountancy_code_supplier).
"'";
1132 $sql .=
", '".$this->db->escape($this->accountancy_code_buy).
"'";
1133 $sql .=
", '".$this->db->escape($this->accountancy_code_sell).
"'";
1135 $result = $this->db->query($sql);
1138 $this->error =
'ErrorFailedToUpdateAccountancyForEntity';
1143 if ($this->commercial_id !=
'' && $this->commercial_id != -1) {
1145 } elseif (!$user->hasRight(
'societe',
'client',
'voir')) {
1153 $result = $this->
call_trigger(
'COMPANY_CREATE', $user);
1164 dol_syslog(get_class($this).
"::Create success id=".$this->
id);
1165 $this->db->commit();
1168 dol_syslog(get_class($this).
"::Create echec update ".$this->error.(empty($this->errors) ?
'' :
' '.implode(
',', $this->errors)), LOG_ERR);
1169 $this->db->rollback();
1173 if ($this->db->lasterrno() ==
'DB_ERROR_RECORD_ALREADY_EXISTS') {
1174 $this->error = $langs->trans(
"ErrorCompanyNameAlreadyExists", $this->name);
1177 $this->error = $this->db->lasterror();
1180 $this->db->rollback();
1184 $this->db->rollback();
1185 dol_syslog(get_class($this).
"::Create fails verify ".implode(
',', $this->errors), LOG_WARNING);
1208 require_once DOL_DOCUMENT_ROOT.
'/contact/class/contact.class.php';
1209 $contact =
new Contact($this->db);
1211 $contact->name = $this->name_bis;
1212 $contact->firstname = $this->firstname;
1213 $contact->civility_id = $this->civility_id;
1214 $contact->socid = $this->id;
1215 $contact->statut = 1;
1216 $contact->status = 1;
1218 $contact->country_id = $this->country_id;
1219 $contact->state_id = $this->state_id;
1220 $contact->address = $this->address;
1221 $contact->email = $this->email;
1222 $contact->zip = $this->zip;
1223 $contact->town = $this->town;
1225 $contact->phone_pro = $this->phone;
1230 $contactId = $contact->create($user, $notrigger);
1231 if ($contactId < 0) {
1234 dol_syslog(get_class($this).
"::create_individual ERROR:".$this->error, LOG_ERR);
1237 if (empty($error) && is_array($tags) && !empty($tags)) {
1238 $result = $contact->setCategories($tags);
1242 dol_syslog(get_class($this).
"::create_individual Affect Tag ERROR:".$this->error, LOG_ERR);
1243 $contactId = $result;
1247 if (empty($error) && isModEnabled(
'mailing') && !empty($contact->email) && isset($no_email)) {
1248 $result = $contact->setNoEmail($no_email);
1251 dol_syslog(get_class($this).
"::create_individual set mailing status ERROR:".$this->error, LOG_ERR);
1252 $contactId = $result;
1256 if (empty($error)) {
1257 dol_syslog(get_class($this).
"::create_individual success");
1258 $this->db->commit();
1260 $this->db->rollback();
1274 global $langs, $mysoc;
1277 $this->errors = array();
1281 $this->nom = $this->name;
1284 $this->errors[] =
'ErrorBadThirdPartyName';
1288 if ($this->client) {
1290 if ($rescode != 0 && $rescode != -5) {
1291 if ($rescode == -1) {
1292 $this->errors[] =
'ErrorBadCustomerCodeSyntax';
1293 } elseif ($rescode == -2) {
1294 $this->errors[] =
'ErrorCustomerCodeRequired';
1295 } elseif ($rescode == -3) {
1296 $this->errors[] =
'ErrorCustomerCodeAlreadyUsed';
1297 } elseif ($rescode == -4) {
1298 $this->errors[] =
'ErrorPrefixRequired';
1300 $this->errors[] =
'ErrorUnknownOnCustomerCodeCheck';
1307 if ($this->fournisseur) {
1309 if ($rescode != 0 && $rescode != -5) {
1310 if ($rescode == -1) {
1311 $this->errors[] =
'ErrorBadSupplierCodeSyntax';
1312 } elseif ($rescode == -2) {
1313 $this->errors[] =
'ErrorSupplierCodeRequired';
1314 } elseif ($rescode == -3) {
1315 $this->errors[] =
'ErrorSupplierCodeAlreadyUsed';
1316 } elseif ($rescode == -4) {
1317 $this->errors[] =
'ErrorPrefixRequired';
1319 $this->errors[] =
'ErrorUnknownOnSupplierCodeCheck';
1326 $array_to_check = array(
'IDPROF1',
'IDPROF2',
'IDPROF3',
'IDPROF4',
'IDPROF5',
'IDPROF6',
'EMAIL',
'TVA_INTRA',
'ACCOUNTANCY_CODE_CUSTOMER',
'ACCOUNTANCY_CODE_SUPPLIER');
1327 foreach ($array_to_check as $key) {
1328 $keymin = strtolower($key);
1329 $keyfield_db = $keymin;
1330 if ($key ==
'ACCOUNTANCY_CODE_CUSTOMER') {
1331 $keymin =
'code_compta_client';
1332 $keyfield_db =
'code_compta';
1333 } elseif ($key ==
'ACCOUNTANCY_CODE_SUPPLIER') {
1334 $keymin =
'code_compta_fournisseur';
1335 $keyfield_db =
'code_compta_fournisseur';
1337 $i = (int) preg_replace(
'/[^0-9]/',
'', $key);
1338 $vallabel = $this->$keymin;
1343 if ($mysoc->country_id > 0 && $this->country_id == $mysoc->country_id) {
1344 $idprof_mandatory =
'SOCIETE_'.$key.
'_MANDATORY';
1346 $langs->load(
"errors");
1348 $this->errors[] = $langs->trans(
"ErrorProdIdIsMandatory", $langs->transcountry(
'ProfId'.$i, $this->country_code)).
' ('.$langs->trans(
"ForbiddenBySetupRules").
')';
1355 if ($this->
id_prof_exists($keymin, $vallabel, ($this->
id > 0 ? $this->
id : 0))) {
1356 $langs->load(
"errors");
1358 $this->errors[] = $langs->transcountry(
'ProfId'.$i, $this->country_code).
" ".$langs->trans(
"ErrorProdIdAlreadyExist", $vallabel).
' ('.$langs->trans(
"ForbiddenBySetupRules").
')';
1364 if ($key ==
'EMAIL') {
1367 $langs->load(
"errors");
1369 $this->errors[] = $langs->trans(
"ErrorBadEMail", $this->
email).
' ('.$langs->trans(
"ForbiddenBySetupRules").
')';
1374 if ($this->
id_prof_exists($keymin, $vallabel, ($this->
id > 0 ? $this->
id : 0))) {
1375 $langs->load(
"errors");
1377 $this->errors[] = $langs->trans(
'Email').
" ".$langs->trans(
"ErrorProdIdAlreadyExist", $vallabel).
' ('.$langs->trans(
"ForbiddenBySetupRules").
')';
1380 } elseif ($key ==
'TVA_INTRA') {
1383 if ($this->
id_prof_exists($keymin, $vallabel, ($this->
id > 0 ? $this->
id : 0))) {
1384 $langs->load(
"errors");
1386 $this->errors[] = $langs->trans(
'VATIntra').
" ".$langs->trans(
"ErrorProdIdAlreadyExist", $vallabel).
' ('.$langs->trans(
"ForbiddenBySetupRules").
')';
1389 if ($this->tva_assuj && !$vallabel &&
getDolGlobalString(
'SOCIETE_VAT_INTRA_MANDATORY')) {
1390 $langs->load(
"errors");
1392 $this->errors[] = $langs->trans(
"ErrorProdIdIsMandatory", $langs->trans(
'VATIntra')).
' ('.$langs->trans(
"ForbiddenBySetupRules").
')';
1394 } elseif ($key ==
'ACCOUNTANCY_CODE_CUSTOMER' && !empty($this->client)) {
1397 if ($this->
id_prof_exists($keyfield_db, $vallabel, ($this->
id > 0 ? $this->
id : 0))) {
1398 $langs->loadLangs(array(
"errors",
'compta'));
1400 $this->errors[] = $langs->trans(
'CustomerAccountancyCodeShort') .
" " . $langs->trans(
"ErrorProdIdAlreadyExist", $vallabel) .
' (' . $langs->trans(
"ForbiddenBySetupRules") .
')';
1405 if (
getDolGlobalString(
'SOCIETE_ACCOUNTANCY_CODE_CUSTOMER_MANDATORY') && (!isset($vallabel) || trim($vallabel) ===
'')) {
1406 $langs->loadLangs(array(
"errors",
'compta'));
1408 $this->errors[] = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
'CustomerAccountancyCodeShort')) .
' (' . $langs->trans(
"ForbiddenBySetupRules") .
')';
1410 } elseif ($key ==
'ACCOUNTANCY_CODE_SUPPLIER' && !empty($this->fournisseur)) {
1413 if ($this->
id_prof_exists($keyfield_db, $vallabel, ($this->
id > 0 ? $this->
id : 0))) {
1414 $langs->loadLangs(array(
"errors",
'compta'));
1416 $this->errors[] = $langs->trans(
'SupplierAccountancyCodeShort') .
" " . $langs->trans(
"ErrorProdIdAlreadyExist", $vallabel) .
' (' . $langs->trans(
"ForbiddenBySetupRules") .
')';
1421 if (
getDolGlobalString(
'SOCIETE_ACCOUNTANCY_CODE_SUPPLIER_MANDATORY') && (!isset($vallabel) || trim($vallabel) ===
'')) {
1422 $langs->loadLangs(array(
"errors",
'compta'));
1424 $this->errors[] = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
'SupplierAccountancyCodeShort')) .
' (' . $langs->trans(
"ForbiddenBySetupRules") .
')';
1449 public function update($id,
User $user, $call_trigger = 1, $allowmodcodeclient = 0, $allowmodcodefournisseur = 0, $action =
'update', $nosyncmember = 1)
1451 global $langs,
$conf, $hookmanager;
1453 require_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
1458 if (empty($this->country_id) && !empty($this->country_code)) {
1459 $this->country_id =
dol_getIdFromCode($this->db, $this->country_code,
'c_country',
'code',
'rowid');
1462 if (empty($this->country_id) && !empty($this->country_code)) {
1463 $country_id =
getCountry($this->country_code,
'3');
1464 $this->country_id = is_int($country_id) ? $country_id : 0;
1469 dol_syslog(get_class($this).
"::Update id=".$id.
" call_trigger=".$call_trigger.
" allowmodcodeclient=".$allowmodcodeclient.
" allowmodcodefournisseur=".$allowmodcodefournisseur);
1475 $this->entity = ((isset($this->entity) && is_numeric($this->entity)) ? $this->entity :
$conf->entity);
1476 $this->
name = $this->
name ? trim($this->
name) : trim((
string) $this->nom);
1477 $this->nom = $this->name;
1478 $this->name_alias = trim((
string) $this->name_alias);
1479 $this->ref_ext = (empty($this->ref_ext) ?
'' : trim($this->ref_ext));
1481 $this->zip = trim((
string) $this->zip);
1482 $this->town = trim((
string) $this->town);
1483 $this->state_id = (is_numeric($this->state_id)) ? (
int) $this->state_id : 0;
1484 $this->country_id = ($this->country_id > 0) ? $this->country_id : 0;
1485 $this->phone = trim((
string) $this->phone);
1486 $this->phone = preg_replace(
"/\s/",
"", $this->phone);
1487 $this->phone = preg_replace(
"/\./",
"", $this->phone);
1488 $this->phone_mobile = trim((
string) $this->phone_mobile);
1489 $this->phone_mobile = preg_replace(
"/\s/",
"", $this->phone_mobile);
1490 $this->phone_mobile = preg_replace(
"/\./",
"", $this->phone_mobile);
1491 $this->fax = trim((
string) $this->fax);
1492 $this->fax = preg_replace(
"/\s/",
"", $this->fax);
1493 $this->fax = preg_replace(
"/\./",
"", $this->fax);
1495 $this->url = $this->url ?
clean_url($this->url, 0) :
'';
1496 $this->note_private = (empty($this->note_private) ?
'' : trim($this->note_private));
1497 $this->note_public = (empty($this->note_public) ?
'' : trim($this->note_public));
1498 $this->idprof1 = trim((
string) $this->idprof1);
1499 $this->idprof2 = trim((
string) $this->idprof2);
1500 $this->idprof3 = trim((
string) $this->idprof3);
1501 $this->idprof4 = trim((
string) $this->idprof4);
1502 $this->idprof5 = (!empty($this->idprof5) ? trim($this->idprof5) :
'');
1503 $this->idprof6 = (!empty($this->idprof6) ? trim($this->idprof6) :
'');
1504 $this->prefix_comm = trim((
string) $this->prefix_comm);
1505 $this->outstanding_limit =
price2num($this->outstanding_limit);
1506 $this->order_min_amount =
price2num($this->order_min_amount);
1507 $this->supplier_order_min_amount =
price2num($this->supplier_order_min_amount);
1509 $this->tva_assuj = (is_numeric($this->tva_assuj)) ? (
int) trim((
string) $this->tva_assuj) : 0;
1510 $this->tva_intra = trim((
string) $this->tva_intra);
1511 $this->vat_reverse_charge = empty($this->vat_reverse_charge) ? 0 : 1;
1512 if (empty($this->
status)) {
1516 if (!empty($this->multicurrency_code)) {
1519 if (empty($this->fk_multicurrency)) {
1520 $this->multicurrency_code =
'';
1521 $this->fk_multicurrency = 0;
1525 $this->localtax1_assuj = (int) trim((
string) $this->localtax1_assuj);
1526 $this->localtax2_assuj = (int) trim((
string) $this->localtax2_assuj);
1528 $this->localtax1_value = trim($this->localtax1_value);
1529 $this->localtax2_value = trim($this->localtax2_value);
1531 $this->capital = ($this->capital !=
'') ? (
float)
price2num(trim((
string) $this->capital)) :
null;
1533 $this->effectif_id = (int) $this->effectif_id;
1534 $this->forme_juridique_code = (int) $this->forme_juridique_code;
1537 $this->barcode = trim((
string) $this->barcode);
1540 if ($this->code_client == -1 || $this->code_client ===
'auto') {
1541 $this->get_codeclient($this, 0);
1543 if ($this->code_fournisseur ==
'-1' || $this->code_fournisseur ===
'auto') {
1544 $this->get_codefournisseur($this, 1);
1547 $this->accountancy_code_customer_general = trim((
string) $this->accountancy_code_customer_general);
1548 if ($this->accountancy_code_customer_general ===
'-1') {
1549 $this->accountancy_code_customer_general =
'';
1551 $this->code_compta_client = trim((
string) $this->code_compta_client);
1552 $this->accountancy_code_supplier_general = trim((
string) $this->accountancy_code_supplier_general);
1553 if ($this->accountancy_code_supplier_general ===
'-1') {
1554 $this->accountancy_code_supplier_general =
'';
1556 $this->code_compta_fournisseur = trim((
string) $this->code_compta_fournisseur);
1559 if (!is_numeric($this->client) && !is_numeric($this->fournisseur)) {
1560 $langs->load(
"errors");
1561 $this->error = $langs->trans(
"BadValueForParameterClientOrSupplier");
1566 if (!empty($allowmodcodeclient) && !empty($this->client)) {
1568 if (empty($this->code_compta_client)) {
1579 if (!empty($allowmodcodefournisseur) && !empty($this->fournisseur)) {
1581 if (empty($this->code_compta_fournisseur)) {
1592 $this->webservices_url = empty($this->webservices_url) ?
'' :
clean_url($this->webservices_url, 0);
1593 $this->webservices_key = trim((
string) $this->webservices_key);
1595 $this->accountancy_code_buy = (empty($this->accountancy_code_buy) ?
'' : trim($this->accountancy_code_buy));
1596 $this->accountancy_code_sell = (empty($this->accountancy_code_sell) ?
'' : trim($this->accountancy_code_sell));
1599 $this->fk_incoterms = (int) $this->fk_incoterms;
1600 $this->location_incoterms = trim((
string) $this->location_incoterms);
1607 if ($action !=
'add' && $action !=
'merge') {
1610 $result = $this->
verify();
1614 if (is_array($this->errors)) {
1615 if (in_array(
'ErrorBadCustomerCodeSyntax', $this->errors) && is_object($this->oldcopy) && $this->oldcopy->code_client == $this->code_client) {
1616 if (($key = array_search(
'ErrorBadCustomerCodeSyntax', $this->errors)) !==
false) {
1617 unset($this->errors[$key]);
1620 if (in_array(
'ErrorBadSupplierCodeSyntax', $this->errors) && is_object($this->oldcopy) && $this->oldcopy->code_fournisseur == $this->code_fournisseur) {
1621 if (($key = array_search(
'ErrorBadSupplierCodeSyntax', $this->errors)) !==
false) {
1622 unset($this->errors[$key]);
1625 if (empty($this->errors)) {
1632 dol_syslog(get_class($this).
"::update verify ok or not done");
1634 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"societe SET ";
1635 $sql .=
"entity = ".((int) $this->entity);
1636 $sql .=
",nom = '".$this->db->escape($this->
name).
"'";
1637 $sql .=
",name_alias = '".$this->db->escape($this->name_alias).
"'";
1638 $sql .=
",ref_ext = ".(!empty($this->ref_ext) ?
"'".$this->db->escape($this->ref_ext).
"'" :
"null");
1639 $sql .=
",address = '".$this->db->escape($this->address).
"'";
1641 $sql .=
",zip = ".(!empty($this->zip) ?
"'".$this->db->escape($this->zip).
"'" :
"null");
1642 $sql .=
",town = ".(!empty($this->town) ?
"'".$this->db->escape($this->town).
"'" :
"null");
1644 $sql .=
",fk_departement = ".((!empty($this->state_id) && $this->state_id > 0) ? ((
int) $this->state_id) :
'null');
1645 $sql .=
",fk_pays = ".((!empty($this->country_id) && $this->country_id > 0) ? ((
int) $this->country_id) :
'null');
1647 $sql .=
",phone = ".(!empty($this->phone) ?
"'".$this->db->escape($this->phone).
"'" :
"null");
1648 $sql .=
",phone_mobile = ".(!empty($this->phone_mobile) ?
"'".$this->db->escape($this->phone_mobile).
"'" :
"null");
1649 $sql .=
",fax = ".(!empty($this->fax) ?
"'".$this->db->escape($this->fax).
"'" :
"null");
1650 $sql .=
",email = ".(!empty($this->email) ?
"'".$this->db->escape($this->email).
"'" :
"null");
1651 $sql .=
",socialnetworks = '".$this->db->escape(json_encode($this->socialnetworks)).
"'";
1652 $sql .=
",url = ".(!empty($this->url) ?
"'".$this->db->escape($this->url).
"'" :
"null");
1654 $sql .=
",parent = ".($this->parent > 0 ? $this->parent :
"null");
1656 $sql .=
",note_private = ".(!empty($this->note_private) ?
"'".$this->db->escape($this->note_private).
"'" :
"null");
1657 $sql .=
",note_public = ".(!empty($this->note_public) ?
"'".$this->db->escape($this->note_public).
"'" :
"null");
1659 $sql .=
",siren = '".$this->db->escape($this->idprof1).
"'";
1660 $sql .=
",siret = '".$this->db->escape($this->idprof2).
"'";
1661 $sql .=
",ape = '".$this->db->escape($this->idprof3).
"'";
1662 $sql .=
",idprof4 = '".$this->db->escape($this->idprof4).
"'";
1663 $sql .=
",idprof5 = '".$this->db->escape($this->idprof5).
"'";
1664 $sql .=
",idprof6 = '".$this->db->escape($this->idprof6).
"'";
1666 $sql .=
",tva_assuj = ".($this->tva_assuj !=
'' ?
"'".$this->db->escape((
string) $this->tva_assuj).
"'" :
"null");
1667 $sql .=
",tva_intra = '".$this->db->escape($this->tva_intra).
"'";
1669 $sql .=
",vat_reverse_charge = " . ($this->vat_reverse_charge !=
'' ?
"'" . $this->db->escape((
string) $this->vat_reverse_charge) .
"'" : 0);
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" : $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");
1710 $sql .=
",mode_reglement = ".(!empty($this->mode_reglement_id) ?
"'".$this->db->escape((
string) $this->mode_reglement_id).
"'" :
"null");
1711 $sql .=
",cond_reglement = ".(!empty($this->cond_reglement_id) ?
"'".$this->db->escape((
string) $this->cond_reglement_id).
"'" :
"null");
1712 $sql .=
",deposit_percent = ".(!empty($this->deposit_percent) ?
"'".$this->db->escape((
string) $this->deposit_percent).
"'" :
"null");
1713 $sql .=
",transport_mode = ".(!empty($this->transport_mode_id) ?
"'".$this->db->escape((
string) $this->transport_mode_id).
"'" :
"null");
1714 $sql .=
",mode_reglement_supplier = ".(!empty($this->mode_reglement_supplier_id) ?
"'".$this->db->escape((
string) $this->mode_reglement_supplier_id).
"'" :
"null");
1715 $sql .=
",cond_reglement_supplier = ".(!empty($this->cond_reglement_supplier_id) ?
"'".$this->db->escape((
string) $this->cond_reglement_supplier_id).
"'" :
"null");
1716 $sql .=
",transport_mode_supplier = ".(!empty($this->transport_mode_supplier_id) ?
"'".$this->db->escape((
string) $this->transport_mode_supplier_id).
"'" :
"null");
1717 $sql .=
",fk_shipping_method = ".(!empty($this->shipping_method_id) ?
"'".$this->db->escape((
string) $this->shipping_method_id).
"'" :
"null");
1719 $sql .=
",client = ".(!empty($this->client) ? $this->client : 0);
1720 $sql .=
",fournisseur = ".(!empty($this->fournisseur) ? $this->fournisseur : 0);
1721 $sql .=
",barcode = ".(!empty($this->barcode) ?
"'".$this->db->escape($this->barcode).
"'" :
"null");
1722 $sql .=
",default_lang = ".(!empty($this->default_lang) ?
"'".$this->db->escape($this->default_lang).
"'" :
"null");
1723 $sql .=
",logo = ".(!empty($this->logo) ?
"'".$this->db->escape($this->logo).
"'" :
"null");
1724 $sql .=
",logo_squarred = ".(!empty($this->logo_squarred) ?
"'".$this->db->escape($this->logo_squarred).
"'" :
"null");
1725 $sql .=
",outstanding_limit= ".($this->outstanding_limit !=
'' ? $this->outstanding_limit :
'null');
1726 $sql .=
",order_min_amount= ".($this->order_min_amount !=
'' ? $this->order_min_amount :
'null');
1727 $sql .=
",supplier_order_min_amount= ".($this->supplier_order_min_amount !=
'' ? $this->supplier_order_min_amount :
'null');
1728 $sql .=
",fk_prospectlevel='".$this->db->escape($this->fk_prospectlevel).
"'";
1730 $sql .=
", accountancy_code_buy = '" . $this->db->escape($this->accountancy_code_buy) .
"'";
1731 $sql .=
", accountancy_code_sell= '" . $this->db->escape($this->accountancy_code_sell) .
"'";
1733 $sql .=
", accountancy_code_customer_general = ".(!empty($this->accountancy_code_customer_general) ?
"'".$this->db->escape($this->accountancy_code_customer_general).
"'" :
"null");
1734 $sql .=
", code_compta = ".(!empty($this->code_compta_client) ?
"'".$this->db->escape($this->code_compta_client).
"'" :
"null");
1738 $sql .=
", accountancy_code_supplier_general = ".(!empty($this->accountancy_code_supplier_general) ?
"'".$this->db->escape($this->accountancy_code_supplier_general).
"'" :
"null");
1739 $sql .=
", code_compta_fournisseur = ".(($this->code_compta_fournisseur !=
"") ?
"'".$this->db->escape($this->code_compta_fournisseur).
"'" :
"null");
1742 $sql .=
",webservices_url = ".(!empty($this->webservices_url) ?
"'".$this->db->escape($this->webservices_url).
"'" :
"null");
1743 $sql .=
",webservices_key = ".(!empty($this->webservices_key) ?
"'".$this->db->escape($this->webservices_key).
"'" :
"null");
1746 $sql .=
", fk_incoterms = ".((int) $this->fk_incoterms);
1747 $sql .=
", location_incoterms = ".(!empty($this->location_incoterms) ?
"'".$this->db->escape($this->location_incoterms).
"'" :
"null");
1750 $sql .=
", code_client = ".(!empty($this->code_client) ?
"'".$this->db->escape($this->code_client).
"'" :
"null");
1754 $sql .=
", code_fournisseur = ".(!empty($this->code_fournisseur) ?
"'".$this->db->escape($this->code_fournisseur).
"'" :
"null");
1756 $sql .=
", fk_user_modif = ".($user->id > 0 ? $user->id :
"null");
1757 $sql .=
", fk_multicurrency = ".(int) $this->fk_multicurrency;
1758 $sql .=
", multicurrency_code = '".$this->db->escape($this->multicurrency_code).
"'";
1759 $sql .=
", model_pdf = '".$this->db->escape($this->model_pdf).
"'";
1760 $sql .=
" WHERE rowid = ".(int) $id;
1762 $resql = $this->db->query($sql);
1764 if (is_object($this->oldcopy)) {
1765 if ($this->oldcopy->country_id != $this->country_id) {
1766 unset($this->country_code);
1767 unset($this->country);
1769 if ($this->oldcopy->state_id != $this->state_id) {
1770 unset($this->state_code);
1771 unset($this->state);
1774 unset($this->country_code);
1775 unset($this->country);
1776 unset($this->state_code);
1777 unset($this->state);
1780 $nbrowsaffected = $this->db->affected_rows($resql);
1782 if (!$error && $nbrowsaffected) {
1784 if (!$nosyncmember && isModEnabled(
'member')) {
1785 require_once DOL_DOCUMENT_ROOT.
'/adherents/class/adherent.class.php';
1787 dol_syslog(get_class($this).
"::update update linked member");
1789 $lmember =
new Adherent($this->db);
1790 $result = $lmember->fetch(0,
'0', $this->
id);
1793 $lmember->company = $this->name;
1796 $lmember->address = $this->address;
1797 $lmember->zip = $this->zip;
1798 $lmember->town = $this->town;
1799 $lmember->email = $this->email;
1800 $lmember->socialnetworks = $this->socialnetworks;
1801 $lmember->phone = $this->phone;
1802 $lmember->state_id = $this->state_id;
1803 $lmember->country_id = $this->country_id;
1804 $lmember->default_lang = $this->default_lang;
1806 $result = $lmember->update($user, 0, 1, 1, 1);
1808 $this->error = $lmember->error;
1809 $this->errors = array_merge($this->errors, $lmember->errors);
1810 dol_syslog(get_class($this).
"::update ".$this->error, LOG_ERR);
1813 } elseif ($result < 0) {
1814 $this->error = $lmember->error;
1824 $this->db->query(
"DELETE FROM ".MAIN_DB_PREFIX.
"societe_perentity WHERE fk_soc = ".((
int) $this->id).
" AND entity = ".((
int)
$conf->entity));
1826 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"societe_perentity (";
1829 $sql .=
", vat_reverse_charge";
1830 $sql .=
", accountancy_code_customer_general";
1831 $sql .=
", accountancy_code_customer";
1832 $sql .=
", accountancy_code_supplier_general";
1833 $sql .=
", accountancy_code_supplier";
1834 $sql .=
", accountancy_code_buy";
1835 $sql .=
", accountancy_code_sell";
1836 $sql .=
") VALUES (";
1838 $sql .=
", ".((int)
$conf->entity);
1839 $sql .=
", ".(empty($this->vat_reverse_charge) ?
'0' :
'1');
1840 $sql .=
", '".$this->db->escape($this->accountancy_code_customer_general).
"'";
1841 $sql .=
", '".$this->db->escape($this->code_compta_client).
"'";
1842 $sql .=
", '".$this->db->escape($this->accountancy_code_supplier_general).
"'";
1843 $sql .=
", '".$this->db->escape($this->code_compta_fournisseur).
"'";
1844 $sql .=
", '".$this->db->escape($this->accountancy_code_buy).
"'";
1845 $sql .=
", '".$this->db->escape($this->accountancy_code_sell).
"'";
1847 $result = $this->db->query($sql);
1850 $this->error =
'ErrorFailedToUpdateAccountancyForEntity';
1869 if (!$error && $call_trigger) {
1871 $result = $this->
call_trigger(
'COMPANY_MODIFY', $user);
1879 dol_syslog(get_class($this).
"::Update success");
1880 $this->db->commit();
1883 $this->db->rollback();
1887 if ($this->db->errno() ==
'DB_ERROR_RECORD_ALREADY_EXISTS') {
1889 $this->error = $langs->trans(
"ErrorDuplicateField");
1892 $this->error = $this->db->lasterror();
1895 $this->db->rollback();
1899 $this->db->rollback();
1900 dol_syslog(get_class($this).
"::Update fails verify ".implode(
',', $this->errors), LOG_WARNING);
1924 public function fetch($rowid, $ref =
'', $ref_ext =
'', $barcode =
'', $idprof1 =
'', $idprof2 =
'', $idprof3 =
'', $idprof4 =
'', $idprof5 =
'', $idprof6 =
'', $email =
'', $ref_alias =
'', $is_client = 0, $is_supplier = 0)
1929 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)) {
1933 $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';
1934 $sql .=
', s.status, s.fk_warehouse';
1935 $sql .=
', s.price_level';
1936 $sql .=
', s.tms as date_modification, s.fk_user_creat, s.fk_user_modif';
1937 $sql .=
', s.phone, s.phone_mobile, s.fax, s.email';
1938 $sql .=
', s.socialnetworks';
1939 $sql .=
', s.url, s.zip, s.town, s.note_private, s.note_public, s.client, s.fournisseur';
1940 $sql .=
', s.siren as idprof1, s.siret as idprof2, s.ape as idprof3, s.idprof4, s.idprof5, s.idprof6';
1941 $sql .=
', s.capital, s.tva_intra';
1942 $sql .=
', s.fk_typent as typent_id';
1943 $sql .=
', s.fk_effectif as effectif_id';
1944 $sql .=
', s.fk_forme_juridique as forme_juridique_code';
1945 $sql .=
', s.webservices_url, s.webservices_key, s.model_pdf, s.last_main_doc';
1947 $sql .=
', s.accountancy_code_customer_general, s.code_compta';
1948 $sql .=
', s.accountancy_code_supplier_general, s.code_compta_fournisseur';
1949 $sql .=
', s.accountancy_code_buy, s.accountancy_code_sell';
1950 $sql .=
', s.vat_reverse_charge as soc_vat_reverse_charge';
1952 $sql .=
', spe.accountancy_code_customer_general, spe.accountancy_code_customer as code_compta';
1953 $sql .=
', spe.accountancy_code_supplier_general, spe.accountancy_code_supplier as code_compta_fournisseur';
1954 $sql .=
', spe.accountancy_code_buy, spe.accountancy_code_sell';
1955 $sql .=
', spe.vat_reverse_charge as spe_vat_reverse_charge';
1957 $sql .=
', s.code_client, s.code_fournisseur, s.parent, s.barcode';
1958 $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';
1959 $sql .=
', s.fk_account, s.tva_assuj';
1960 $sql .=
', s.mode_reglement_supplier, s.cond_reglement_supplier, s.transport_mode_supplier';
1961 $sql .=
', s.localtax1_assuj, s.localtax1_value, s.localtax2_assuj, s.localtax2_value, s.fk_prospectlevel, s.default_lang, s.logo, s.logo_squarred';
1962 $sql .=
', s.fk_shipping_method';
1963 $sql .=
', s.outstanding_limit, s.import_key, s.canvas, s.fk_incoterms, s.location_incoterms';
1964 $sql .=
', s.order_min_amount, s.supplier_order_min_amount';
1965 $sql .=
', s.fk_multicurrency, s.multicurrency_code';
1966 $sql .=
', fj.libelle as forme_juridique';
1967 $sql .=
', e.libelle as effectif';
1968 $sql .=
', c.code as country_code, c.label as country';
1969 $sql .=
', d.code_departement as state_code, d.nom as state';
1970 $sql .=
', r.rowid as region_id, r.code_region as region_code';
1971 $sql .=
', st.libelle as stcomm, st.picto as stcomm_picto';
1972 $sql .=
', te.code as typent_code';
1973 $sql .=
', i.libelle as label_incoterms';
1974 if (!isModEnabled(
'multicompany')) {
1975 $sql .=
', s.remise_client, s.remise_supplier';
1977 $sql .=
', sr.remise_client, sr2.remise_supplier';
1979 $sql .=
' FROM '.MAIN_DB_PREFIX.
'societe as s';
1981 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"societe_perentity as spe ON spe.fk_soc = s.rowid AND spe.entity = ".((int)
$conf->entity);
1983 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_effectif as e ON s.fk_effectif = e.id';
1984 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_country as c ON s.fk_pays = c.rowid';
1985 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_stcomm as st ON s.fk_stcomm = st.id';
1986 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_forme_juridique as fj ON s.fk_forme_juridique = fj.code';
1987 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_departements as d ON s.fk_departement = d.rowid';
1988 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_regions as r ON d.fk_region = r.code_region ';
1989 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_typent as te ON s.fk_typent = te.id';
1990 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_incoterms as i ON s.fk_incoterms = i.rowid';
1993 if (isModEnabled(
'multicompany')) {
1994 $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').
'))';
1995 $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').
'))';
1997 $sql .=
' WHERE s.entity IN ('.getEntity($this->element).
')';
2001 $sql .=
' AND s.client > 0';
2004 $sql .=
' AND s.fournisseur > 0';
2008 $sql .=
' AND s.rowid = '.((int) $rowid);
2011 $sql .=
" AND s.nom = '".$this->db->escape($ref).
"'";
2014 $sql .=
" AND s.name_alias = '".$this->db->escape($ref_alias).
"'";
2017 $sql .=
" AND s.ref_ext = '".$this->db->escape($ref_ext).
"'";
2020 $sql .=
" AND s.barcode = '".$this->db->escape($barcode).
"'";
2023 $sql .=
" AND s.siren = '".$this->db->escape($idprof1).
"'";
2026 $sql .=
" AND s.siret = '".$this->db->escape($idprof2).
"'";
2029 $sql .=
" AND s.ape = '".$this->db->escape($idprof3).
"'";
2032 $sql .=
" AND s.idprof4 = '".$this->db->escape($idprof4).
"'";
2035 $sql .=
" AND s.idprof5 = '".$this->db->escape($idprof5).
"'";
2038 $sql .=
" AND s.idprof6 = '".$this->db->escape($idprof6).
"'";
2041 $sql .=
" AND s.email = '".$this->db->escape($email).
"'";
2044 $resql = $this->db->query($sql);
2046 $num = $this->db->num_rows($resql);
2048 $this->error =
'Fetch found several records. Rename one of thirdparties to avoid duplicate.';
2052 $obj = $this->db->fetch_object($resql);
2054 $this->
id = $obj->rowid;
2055 $this->entity = $obj->entity;
2056 $this->canvas = $obj->canvas;
2058 $this->
ref = $obj->name;
2059 $this->
name = $obj->name;
2060 $this->nom = $obj->name;
2061 $this->name_alias = $obj->name_alias;
2062 $this->ref_ext = $obj->ref_ext;
2064 $this->date_creation = $this->db->jdate($obj->date_creation);
2065 $this->date_modification = $this->db->jdate($obj->date_modification);
2066 $this->user_creation_id = $obj->fk_user_creat;
2067 $this->user_modification_id = $obj->fk_user_modif;
2069 $this->
address = $obj->address;
2070 $this->zip = $obj->zip;
2071 $this->town = $obj->town;
2073 $this->country_id = $obj->country_id;
2074 $this->country_code = $obj->country_id ? $obj->country_code :
'';
2075 $this->country = $obj->country_id ? (($langs->transnoentities(
'Country'.$obj->country_code) !=
'Country'.$obj->country_code) ? $langs->transnoentities(
'Country'.$obj->country_code) : $obj->country) :
'';
2077 $this->state_id = $obj->state_id;
2078 $this->state_code = $obj->state_code;
2079 $this->region_id = $obj->region_id;
2080 $this->region_code = $obj->region_code;
2081 $this->state = ($obj->state !=
'-' ? $obj->state :
'');
2083 $transcode = $langs->trans(
'StatusProspect'.$obj->fk_stcomm);
2084 $label = ($transcode !=
'StatusProspect'.$obj->fk_stcomm ? $transcode : $obj->stcomm);
2085 $this->stcomm_id = $obj->fk_stcomm;
2086 $this->status_prospect_label = $label;
2087 $this->stcomm_picto = $obj->stcomm_picto;
2089 $this->
email = $obj->email;
2090 $this->socialnetworks = ($obj->socialnetworks ? (array) json_decode($obj->socialnetworks,
true) : array());
2092 $this->url = $obj->url;
2093 $this->phone = $obj->phone;
2094 $this->phone_mobile = $obj->phone_mobile;
2095 $this->fax = $obj->fax;
2097 $this->parent = $obj->parent;
2099 $this->idprof1 = $obj->idprof1;
2100 $this->idprof2 = $obj->idprof2;
2101 $this->idprof3 = $obj->idprof3;
2102 $this->idprof4 = $obj->idprof4;
2103 $this->idprof5 = $obj->idprof5;
2104 $this->idprof6 = $obj->idprof6;
2106 $this->capital = $obj->capital;
2108 $this->code_client = $obj->code_client;
2109 $this->code_fournisseur = $obj->code_fournisseur;
2111 $this->accountancy_code_customer_general = $obj->accountancy_code_customer_general;
2112 $this->code_compta_client = $obj->code_compta;
2113 $this->accountancy_code_supplier_general = $obj->accountancy_code_supplier_general;
2114 $this->code_compta_fournisseur = $obj->code_compta_fournisseur;
2116 $this->barcode = $obj->barcode;
2118 $this->tva_assuj = $obj->tva_assuj;
2119 $this->tva_intra = $obj->tva_intra;
2121 if (!empty($obj->spe_vat_reverse_charge)) {
2122 $this->vat_reverse_charge = $obj->spe_vat_reverse_charge;
2123 } elseif (!empty($obj->soc_vat_reverse_charge)) {
2124 $this->vat_reverse_charge = $obj->soc_vat_reverse_charge;
2126 $this->vat_reverse_charge = 0;
2129 $this->
status = $obj->status;
2132 $this->localtax1_assuj = $obj->localtax1_assuj;
2133 $this->localtax2_assuj = $obj->localtax2_assuj;
2135 $this->localtax1_value = $obj->localtax1_value;
2136 $this->localtax2_value = $obj->localtax2_value;
2138 $this->typent_id = $obj->typent_id;
2139 $this->typent_code = $obj->typent_code;
2141 $this->effectif_id = $obj->effectif_id;
2142 $this->effectif = $obj->effectif_id ? $obj->effectif :
'';
2144 $this->forme_juridique_code = $obj->forme_juridique_code;
2145 $this->forme_juridique = $obj->forme_juridique_code ? $obj->forme_juridique :
'';
2147 $this->fk_prospectlevel = $obj->fk_prospectlevel;
2149 $this->prefix_comm = $obj->prefix_comm;
2151 $this->remise_percent = $obj->remise_client ?
price2num($obj->remise_client) : 0;
2152 $this->remise_supplier_percent = $obj->remise_supplier;
2154 $this->mode_reglement_id = $obj->mode_reglement;
2155 $this->cond_reglement_id = $obj->cond_reglement;
2156 $this->deposit_percent = $obj->deposit_percent;
2157 $this->transport_mode_id = $obj->transport_mode;
2158 $this->mode_reglement_supplier_id = $obj->mode_reglement_supplier;
2159 $this->cond_reglement_supplier_id = $obj->cond_reglement_supplier;
2160 $this->transport_mode_supplier_id = $obj->transport_mode_supplier;
2161 $this->shipping_method_id = ($obj->fk_shipping_method > 0) ? $obj->fk_shipping_method :
null;
2162 $this->fk_account = $obj->fk_account;
2164 $this->client = $obj->client;
2165 $this->fournisseur = $obj->fournisseur;
2167 $this->note = $obj->note_private;
2168 $this->note_private = $obj->note_private;
2169 $this->note_public = $obj->note_public;
2170 $this->model_pdf = $obj->model_pdf;
2171 $this->default_lang = $obj->default_lang;
2172 $this->logo = $obj->logo;
2173 $this->logo_squarred = $obj->logo_squarred;
2175 $this->webservices_url = $obj->webservices_url;
2176 $this->webservices_key = $obj->webservices_key;
2178 $this->accountancy_code_buy = $obj->accountancy_code_buy;
2179 $this->accountancy_code_sell = $obj->accountancy_code_sell;
2181 $this->outstanding_limit = $obj->outstanding_limit;
2182 $this->order_min_amount = $obj->order_min_amount;
2183 $this->supplier_order_min_amount = $obj->supplier_order_min_amount;
2186 $this->price_level = $obj->price_level;
2189 $this->fk_warehouse = $obj->fk_warehouse;
2191 $this->import_key = $obj->import_key;
2194 $this->fk_incoterms = $obj->fk_incoterms;
2195 $this->location_incoterms = $obj->location_incoterms;
2196 $this->label_incoterms = $obj->label_incoterms;
2199 $this->fk_multicurrency = $obj->fk_multicurrency;
2200 $this->multicurrency_code = $obj->multicurrency_code;
2203 $this->model_pdf = $obj->model_pdf;
2204 $this->last_main_doc = $obj->last_main_doc;
2206 $result = $this->id;
2214 $this->db->free($resql);
2216 $this->error = $this->db->lasterror();
2217 $this->errors[] = $this->db->lasterror();
2223 $this->price_level = 1;
2249 public function findNearest($rowid = 0, $ref =
'', $ref_ext =
'', $barcode =
'', $idprof1 =
'', $idprof2 =
'', $idprof3 =
'', $idprof4 =
'', $idprof5 =
'', $idprof6 =
'', $email =
'', $ref_alias =
'', $is_client = 0, $is_supplier = 0)
2256 dol_syslog(get_class($this).
"::findNearest", LOG_DEBUG);
2257 $tmpthirdparty =
new Societe($this->db);
2260 $result = $tmpthirdparty->fetch($rowid, $ref, $ref_ext, $barcode, $idprof1, $idprof2, $idprof3, $idprof4, $idprof5, $idprof6, $email, $ref_alias, $is_client, $is_supplier);
2266 dol_syslog(
"Thirdparty not found with exact match so we try barcode search", LOG_DEBUG);
2268 $result = $tmpthirdparty->fetch(0,
'',
'', $barcode,
'',
'',
'',
'',
'',
'',
'',
'', $is_client, $is_supplier);
2274 $sqlstart =
"SELECT s.rowid as id FROM ".MAIN_DB_PREFIX.
"societe as s";
2275 $sqlstart .=
' WHERE s.entity IN ('.getEntity($this->element).
')';
2277 $sqlstart .=
' AND s.client > 0';
2280 $sqlstart .=
' AND s.fournisseur > 0';
2284 dol_syslog(
"Thirdparty not found with barcode search so we try profids search", LOG_DEBUG);
2287 $sqlprof .=
" s.siren = '".$this->db->escape($idprof1).
"'";
2293 $sqlprof .=
" s.siret = '".$this->db->escape($idprof2).
"'";
2299 $sqlprof .=
" s.ape = '".$this->db->escape($idprof3).
"'";
2305 $sqlprof .=
" s.idprof4 = '".$this->db->escape($idprof4).
"'";
2311 $sqlprof .=
" s.idprof5 = '".$this->db->escape($idprof5).
"'";
2317 $sqlprof .=
" s.idprof6 = '".$this->db->escape($idprof6).
"'";
2321 $sqlprofquery = $sqlstart .
" AND (".$sqlprof.
" )";
2322 $resql = $this->db->query($sqlprofquery);
2324 $num = $this->db->num_rows($resql);
2326 $this->error =
'Fetch found several records. Rename one of thirdparties to avoid duplicate.';
2330 $obj = $this->db->fetch_object($resql);
2336 $this->error = $this->db->lasterror();
2337 $this->errors[] = $this->db->lasterror();
2346 dol_syslog(
"Thirdparty not found with profids search so we try email search", LOG_DEBUG);
2348 $result = $tmpthirdparty->fetch(0,
'',
'',
'',
'',
'',
'',
'',
'',
'', $email,
'', $is_client, $is_supplier);
2355 dol_syslog(
"Thirdparty not found with email search so we try ref, ref_ext or ref_alias search", LOG_DEBUG);
2358 $sqlref .=
" s.nom = '".$this->db->escape($ref).
"'";
2364 $sqlref .=
" s.name_alias = '".$this->db->escape($ref_alias).
"'";
2370 $sqlref .=
" s.ref_ext = '".$this->db->escape($ref_ext).
"'";
2374 $sqlrefquery = $sqlstart .
" AND (".$sqlref.
" )";
2375 $resql = $this->db->query($sqlrefquery);
2377 $num = $this->db->num_rows($resql);
2379 $this->error =
'Fetch found several records. Rename one of thirdparties to avoid duplicate.';
2383 $obj = $this->db->fetch_object($resql);
2389 $this->error = $this->db->lasterror();
2390 $this->errors[] = $this->db->lasterror();
2405 public function delete($id, $fuser =
null, $call_trigger = 1)
2407 global
$conf, $user;
2409 if (empty($fuser)) {
2413 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
2415 $entity = isset($this->entity) ? $this->entity :
$conf->entity;
2417 dol_syslog(get_class($this).
"::delete", LOG_DEBUG);
2422 if (empty($objectisused)) {
2426 if (!$error && $call_trigger) {
2428 $result = $this->
call_trigger(
'COMPANY_DELETE', $fuser);
2436 require_once DOL_DOCUMENT_ROOT.
'/categories/class/categorie.class.php';
2438 $toute_categs = array();
2441 $toute_categs[
'customer'] = $static_cat->containing($this->
id, Categorie::TYPE_CUSTOMER);
2442 $toute_categs[
'supplier'] = $static_cat->containing($this->
id, Categorie::TYPE_SUPPLIER);
2445 foreach ($toute_categs as $type => $categs_type) {
2446 foreach ($categs_type as $cat) {
2447 $cat->del_type($this, $type);
2453 foreach ($this->childtablesoncascade as $tabletodelete) {
2454 $deleteFromObject = explode(
':', $tabletodelete, 4);
2455 if (count($deleteFromObject) >= 2) {
2456 $className = str_replace(
'@',
'', $deleteFromObject[0]);
2457 $filepath = $deleteFromObject[1];
2458 $columnName = $deleteFromObject[2];
2460 $child_object =
new $className($this->db);
2461 '@phan-var-force CommonObject $child_object';
2462 $result = $child_object->deleteByParentField($id, $columnName);
2465 $this->errors[] = $child_object->error;
2470 $this->errors[] =
'Cannot include child class file '.$filepath;
2474 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.$tabletodelete;
2475 $sql .=
" WHERE fk_soc = ".((int) $id);
2476 if (!$this->db->query($sql)) {
2478 $this->errors[] = $this->db->lasterror();
2490 dol_syslog(get_class($this).
"::delete error -3 ".$this->error, LOG_ERR);
2496 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"societe";
2497 $sql .=
" SET parent = NULL";
2498 $sql .=
" WHERE parent = ".((int) $id);
2499 if (!$this->db->query($sql)) {
2501 $this->errors[] = $this->db->lasterror();
2508 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"societe_perentity";
2509 $sql .=
" WHERE fk_soc = ".((int) $id);
2510 if (!$this->db->query($sql)) {
2512 $this->errors[] = $this->db->lasterror();
2516 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"societe";
2517 $sql .=
" WHERE rowid = ".((int) $id);
2518 if (!$this->db->query($sql)) {
2520 $this->errors[] = $this->db->lasterror();
2525 $this->db->commit();
2528 if (!empty(
$conf->societe->multidir_output[$entity])) {
2529 $docdir =
$conf->societe->multidir_output[$entity].
"/".$id;
2538 $this->db->rollback();
2542 dol_syslog(
"Can't remove thirdparty with id ".$id.
". There are ".$objectisused.
" children", LOG_WARNING);
2558 dol_syslog(get_class($this).
"::set_as_client is deprecated use setAsCustomer instead", LOG_NOTICE);
2572 if (($this->client == 2 || $this->client == 3) && !
getDolGlobalInt(
'SOCIETE_DISABLE_PROSPECTSCUSTOMERS')) {
2575 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element;
2576 $sql .=
" SET client = ".((int) $newclient);
2577 $sql .=
" WHERE rowid = ".((int) $this->
id);
2579 $resql = $this->db->query($sql);
2581 $this->client = $newclient;
2602 global
$conf, $langs;
2605 $note = trim($note);
2607 $this->error = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"NoteReason"));
2611 dol_syslog(get_class($this).
"::set_remise_client ".$remise.
", ".$note.
", ".$user->id);
2619 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"societe ";
2620 $sql .=
" SET remise_client = '".$this->db->escape((
string) $remise).
"'";
2621 $sql .=
" WHERE rowid = ".((int) $this->
id);
2622 $resql = $this->db->query($sql);
2624 $this->db->rollback();
2625 $this->error = $this->db->error();
2630 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"societe_remise";
2631 $sql .=
" (entity, datec, fk_soc, remise_client, note, fk_user_author)";
2632 $sql .=
" VALUES (".((int)
$conf->entity).
", '".$this->db->idate($now).
"', ".((int) $this->
id).
", '".$this->db->escape((
string) $remise).
"',";
2633 $sql .=
" '".$this->db->escape($note).
"',";
2634 $sql .=
" ".((int) $user->id);
2637 $resql = $this->db->query($sql);
2639 $this->db->rollback();
2640 $this->error = $this->db->lasterror();
2644 $this->db->commit();
2663 global
$conf, $langs;
2666 $note = trim($note);
2668 $this->error = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"NoteReason"));
2672 dol_syslog(get_class($this).
"::set_remise_supplier ".$remise.
", ".$note.
", ".$user->id);
2680 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"societe ";
2681 $sql .=
" SET remise_supplier = ".((float) $remise);
2682 $sql .=
" WHERE rowid = ".((int) $this->
id);
2683 $resql = $this->db->query($sql);
2685 $this->db->rollback();
2686 $this->error = $this->db->error();
2691 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"societe_remise_supplier";
2692 $sql .=
" (entity, datec, fk_soc, remise_supplier, note, fk_user_author)";
2693 $sql .=
" VALUES (".((int)
$conf->entity).
", '".$this->db->idate($now).
"', ".((int) $this->
id).
", ".((float) $remise).
",";
2694 $sql .=
" '".$this->db->escape($note).
"',";
2695 $sql .=
" ".((int) $user->id);
2698 $resql = $this->db->query($sql);
2700 $this->db->rollback();
2701 $this->error = $this->db->lasterror();
2705 $this->db->commit();
2724 public function set_remise_except($remise,
User $user, $desc, $vatrate =
'', $discount_type = 0, $price_base_type =
'HT')
2731 $desc = trim($desc);
2734 if (!($remise > 0)) {
2735 $this->error = $langs->trans(
"ErrorWrongValueForParameter",
"1");
2739 $this->error = $langs->trans(
"ErrorWrongValueForParameter",
"3");
2743 if ($this->
id > 0) {
2747 if (preg_match(
'/\((.*)\)/', $vatrate, $reg)) {
2748 $vat_src_code = $reg[1];
2749 $vatrate = preg_replace(
'/\s*\(.*\)/',
'', $vatrate);
2752 require_once DOL_DOCUMENT_ROOT.
'/core/class/discount.class.php';
2755 $discount->fk_soc = $this->id;
2756 $discount->socid = $this->id;
2758 $discount->discount_type = $discount_type;
2759 $discount->multicurrency_code = $this->multicurrency_code;
2761 $discount->multicurrency_tx = $this->multicurrency_tx;
2763 if ($price_base_type ==
'TTC') {
2764 $discount->multicurrency_amount_ttc =
price2num($remise * (
float) $discount->multicurrency_tx,
'MT');
2765 $discount->multicurrency_amount_ht =
price2num(((
float) $remise / (1 + (
float) $vatrate / 100)) * (
float) $discount->multicurrency_tx,
'MT');
2766 $discount->multicurrency_amount_tva =
price2num(((
float) $discount->amount_ttc - (
float) $discount->amount_ht) * (
float) $discount->multicurrency_tx,
'MT');
2768 $discount->amount_ttc =
price2num($remise,
'MT');
2769 $discount->amount_ht =
price2num((
float) $remise / (1 + (
float) $vatrate / 100),
'MT');
2770 $discount->amount_tva =
price2num((
float) $discount->amount_ttc - (
float) $discount->amount_ht,
'MT');
2772 $discount->amount_ht =
price2num($remise,
'MT');
2773 $discount->amount_tva =
price2num((
float) $remise * (
float) $vatrate / 100,
'MT');
2774 $discount->amount_ttc =
price2num((
float) $discount->amount_ht + (
float) $discount->amount_tva,
'MT');
2776 $discount->multicurrency_amount_ht =
price2num($remise * (
float) $discount->multicurrency_tx,
'MT');
2777 $discount->multicurrency_amount_tva =
price2num(((
float) $remise * (
float) $vatrate / 100) * (
float) $discount->multicurrency_tx,
'MT');
2778 $discount->multicurrency_amount_ttc =
price2num(((
float) $discount->amount_ht + (
float) $discount->amount_tva) * (
float) $discount->multicurrency_tx,
'MT');
2781 $discount->tva_tx = (float)
price2num($vatrate);
2782 $discount->vat_src_code = $vat_src_code;
2784 $discount->description = $desc;
2786 $result = $discount->create($user);
2790 $this->error = $discount->error;
2809 require_once DOL_DOCUMENT_ROOT.
'/core/class/discount.class.php';
2812 $result = $discountstatic->getAvailableDiscounts($this, $user, $filter, $maxvalue, $discount_type);
2816 $this->error = $discountstatic->error;
2834 $reparray = array();
2836 $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";
2837 $sql .=
", u.office_fax, u.user_mobile, u.personal_mobile";
2838 $sql .=
" FROM ".MAIN_DB_PREFIX.
"societe_commerciaux as sc, ".MAIN_DB_PREFIX.
"user as u";
2840 if (isModEnabled(
'multicompany') &&
getDolGlobalString(
'MULTICOMPANY_TRANSVERSE_MODE')) {
2841 $sql .=
" WHERE u.rowid IN (SELECT ug.fk_user FROM ".$this->db->prefix().
"usergroup_user as ug WHERE ug.entity IN (".
getEntity(
'usergroup').
"))";
2843 $sql .=
" WHERE entity IN (0, ".((int)
$conf->entity).
")";
2846 $sql .=
" AND u.rowid = sc.fk_user AND sc.fk_soc = ".((int) $this->
id);
2847 if (empty($sortfield)) {
2848 $sortfield =
'u.lastname,u.firstname';
2850 if (empty($sortorder)) {
2851 $sortorder = str_repeat(
'ASC,', count(explode(
',', $sortfield)) - 1) .
'ASC';
2853 $sql .= $this->db->order($sortfield, $sortorder);
2855 $resql = $this->db->query($sql);
2857 $num = $this->db->num_rows($resql);
2860 $obj = $this->db->fetch_object($resql);
2863 $reparray[$i][
'id'] = (int) $obj->rowid;
2864 $reparray[$i][
'lastname'] = $obj->lastname;
2865 $reparray[$i][
'firstname'] = $obj->firstname;
2866 $reparray[$i][
'email'] = $obj->email;
2867 $reparray[$i][
'phone'] = $obj->office_phone;
2868 $reparray[$i][
'office_phone'] = $obj->office_phone;
2869 $reparray[$i][
'office_fax'] = $obj->office_fax;
2870 $reparray[$i][
'user_mobile'] = $obj->user_mobile;
2871 $reparray[$i][
'personal_mobile'] = $obj->personal_mobile;
2872 $reparray[$i][
'job'] = $obj->job;
2873 $reparray[$i][
'statut'] = $obj->status;
2874 $reparray[$i][
'status'] = $obj->status;
2875 $reparray[$i][
'entity'] = $obj->entity;
2876 $reparray[$i][
'login'] = $obj->login;
2877 $reparray[$i][
'photo'] = $obj->photo;
2878 $reparray[$i][
'gender'] = $obj->gender;
2880 $reparray[] = (int) $obj->rowid;
2903 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"societe";
2904 $sql .=
" SET price_level = ".((int) $price_level);
2905 $sql .=
" WHERE rowid = ".((int) $this->
id);
2907 if (!$this->db->query($sql)) {
2912 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"societe_prices";
2913 $sql .=
" (datec, fk_soc, price_level, fk_user_author)";
2914 $sql .=
" VALUES ('".$this->db->idate($now).
"', ".((int) $this->
id).
", ".((int) $price_level).
", ".((int) $user->id).
")";
2916 if (!$this->db->query($sql)) {
2938 if ($this->
id > 0 && $commid > 0) {
2942 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"societe_commerciaux";
2943 $sql .=
" WHERE fk_soc = ".((int) $this->
id).
" AND fk_user = ".((int) $commid);
2945 $resql = $this->db->query($sql);
2947 dol_syslog(get_class($this).
"::add_commercial Error ".$this->db->lasterror());
2953 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"societe_commerciaux";
2954 $sql .=
" (fk_soc, fk_user)";
2955 $sql .=
" VALUES (".((int) $this->
id).
", ".((int) $commid).
")";
2957 $resql = $this->db->query($sql);
2959 dol_syslog(get_class($this).
"::add_commercial Error ".$this->db->lasterror());
2965 $this->context = array(
'commercial_modified' => $commid);
2967 $result = $this->
call_trigger(
'COMPANY_LINK_SALE_REPRESENTATIVE', $user);
2974 $this->db->commit();
2977 $this->db->rollback();
2997 $this->context = array(
'commercial_modified' => $commid);
2999 $result = $this->
call_trigger(
'COMPANY_UNLINK_SALE_REPRESENTATIVE', $user);
3004 if ($this->
id > 0 && $commid > 0) {
3005 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"societe_commerciaux ";
3006 $sql .=
" WHERE fk_soc = ".((int) $this->
id).
" AND fk_user = ".((int) $commid);
3008 if (!$this->db->query($sql)) {
3010 dol_syslog(get_class($this).
"::del_commercial Erreur");
3030 global
$conf, $langs, $user;
3032 $langs->loadLangs([
'companies',
'commercial']);
3036 $option = $params[
'option'] ??
'';
3037 $nofetch = !empty($params[
'nofetch']);
3039 $noaliasinname = (empty($params[
'noaliasinname']) ? 0 : $params[
'noaliasinname']);
3042 return [
'optimize' => $langs->trans(
"ShowCompany")];
3045 if (!empty($this->logo) && class_exists(
'Form')) {
3046 $photo =
'<div class="photointooltip floatright">';
3047 $photo .=
Form::showphoto(
'societe', $this, 0, 40, 0,
'photoref',
'mini', 0);
3049 $datas[
'photo'] = $photo;
3056 $datas[
'divopen'] =
'<div class="centpercent">';
3058 if ($option ==
'customer' || $option ==
'compta' || $option ==
'category') {
3059 $datas[
'picto'] =
img_picto(
'', $this->picto).
' <u class="paddingrightonly">'.$langs->trans(
"Customer").
'</u>';
3060 } elseif ($option ==
'prospect' && !
getDolGlobalString(
'SOCIETE_DISABLE_PROSPECTS')) {
3061 $datas[
'picto'] =
img_picto(
'', $this->picto).
' <u class="paddingrightonly">'.$langs->trans(
"Prospect").
'</u>';
3062 } elseif ($option ==
'supplier' || $option ==
'category_supplier') {
3063 $datas[
'picto'] =
img_picto(
'', $this->picto).
' <u class="paddingrightonly">'.$langs->trans(
"Supplier").
'</u>';
3064 } elseif ($option ==
'agenda') {
3065 $datas[
'picto'] =
img_picto(
'', $this->picto).
' <u class="paddingrightonly">'.$langs->trans(
"ThirdParty").
'</u>';
3066 } elseif ($option ==
'project') {
3067 $datas[
'picto'] =
img_picto(
'', $this->picto).
' <u class="paddingrightonly">'.$langs->trans(
"ThirdParty").
'</u>';
3068 } elseif ($option ==
'margin') {
3069 $datas[
'picto'] =
img_picto(
'', $this->picto).
' <u class="paddingrightonly">'.$langs->trans(
"ThirdParty").
'</u>';
3070 } elseif ($option ==
'contact') {
3071 $datas[
'picto'] =
img_picto(
'', $this->picto).
' <u class="paddingrightonly">'.$langs->trans(
"ThirdParty").
'</u>';
3072 } elseif ($option ==
'ban') {
3073 $datas[
'picto'] =
img_picto(
'', $this->picto).
' <u class="paddingrightonly">'.$langs->trans(
"ThirdParty").
'</u>';
3077 if (empty($datas[
'picto'])) {
3078 $datas[
'picto'] =
img_picto(
'', $this->picto).
' <u class="paddingrightonly">'.$langs->trans(
"ThirdParty").
'</u>';
3080 if (isset($this->
status)) {
3081 $datas[
'status'] =
' '.$this->getLibStatut(5);
3083 if (isset($this->client) && isset($this->fournisseur)) {
3084 $datas[
'type'] =
' ' . $this->
getTypeUrl(1,
'', 0,
'span');
3087 if (!empty($this->name_alias) && empty($noaliasinname)) {
3090 if (!empty($this->
email)) {
3091 $datas[
'email'] =
'<br>'.img_picto(
'',
'email',
'class="pictofixedwidth"').$this->email;
3093 if (!empty($this->url)) {
3094 $datas[
'url'] =
'<br>'.img_picto(
'',
'globe',
'class="pictofixedwidth"').$this->url;
3096 if (!empty($this->phone) || !empty($this->phone_mobile) || !empty($this->fax)) {
3097 $phonelist = array();
3099 $phonelist[] =
dol_print_phone($this->phone, $this->country_code, $this->
id, 0,
'',
' ',
'phone');
3102 if ($this->phone_mobile) {
3103 $phonelist[] =
dol_print_phone($this->phone_mobile, $this->country_code, $this->
id, 0,
'',
' ',
'mobile');
3106 $phonelist[] =
dol_print_phone($this->fax, $this->country_code, $this->
id, 0,
'',
' ',
'fax');
3108 $datas[
'phonelist'] =
'<br>'.implode(
' ', $phonelist);
3112 $datas[
'address'] =
'<br><b>'.$langs->trans(
"Address").
':</b> '.
dol_format_address($this, 1,
', ', $langs);
3113 } elseif (!empty($this->country_code)) {
3114 $datas[
'address'] =
'<br><b>'.$langs->trans(
'Country').
':</b> '.$this->country_code;
3116 if (!empty($this->tva_intra) || (
getDolGlobalString(
'SOCIETE_SHOW_FIELD_IN_TOOLTIP') && strpos(
$conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP,
'vatnumber') !==
false)) {
3117 $datas[
'vatintra'] =
'<br><b>'.$langs->trans(
'VATIntra').
':</b> '.
dol_escape_htmltag($this->tva_intra);
3121 if (strpos(
$conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP,
'profid1') !==
false && $langs->trans(
'ProfId1'.$this->country_code) !=
'-') {
3122 $datas[
'profid1'] =
'<br><b>'.$langs->trans(
'ProfId1'.$this->country_code).
':</b> '.$this->idprof1;
3124 if (strpos(
$conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP,
'profid2') !==
false && $langs->trans(
'ProfId2'.$this->country_code) !=
'-') {
3125 $datas[
'profid2'] =
'<br><b>'.$langs->trans(
'ProfId2'.$this->country_code).
':</b> '.$this->idprof2;
3127 if (strpos(
$conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP,
'profid3') !==
false && $langs->trans(
'ProfId3'.$this->country_code) !=
'-') {
3128 $datas[
'profid3'] =
'<br><b>'.$langs->trans(
'ProfId3'.$this->country_code).
':</b> '.$this->idprof3;
3130 if (strpos(
$conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP,
'profid4') !==
false && $langs->trans(
'ProfId4'.$this->country_code) !=
'-') {
3131 $datas[
'profid4'] =
'<br><b>'.$langs->trans(
'ProfId4'.$this->country_code).
':</b> '.$this->idprof4;
3133 if (strpos(
$conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP,
'profid5') !==
false && $langs->trans(
'ProfId5'.$this->country_code) !=
'-') {
3134 $datas[
'profid5'] =
'<br><b>'.$langs->trans(
'ProfId5'.$this->country_code).
':</b> '.$this->idprof5;
3136 if (strpos(
$conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP,
'profid6') !==
false && $langs->trans(
'ProfId6'.$this->country_code) !=
'-') {
3137 $datas[
'profid6'] =
'<br><b>'.$langs->trans(
'ProfId6'.$this->country_code).
':</b> '.$this->idprof6;
3141 $datas[
'separator'] =
'<br>';
3143 if (!empty($this->code_client) && ($this->client == 1 || $this->client == 3)) {
3144 $datas[
'customercode'] =
'<br><b>'.$langs->trans(
'CustomerCode').
':</b> '.$this->code_client;
3146 if (isModEnabled(
'accounting') && ($this->client == 1 || $this->client == 3)) {
3147 $langs->load(
'compta');
3148 $datas[
'accountancycustomercode'] =
'<br><b>'.$langs->trans(
'CustomerAccountancyCode').
':</b> '.$this->code_compta_client;
3151 if (!$nofetch && isModEnabled(
'category') && $this->client) {
3152 require_once DOL_DOCUMENT_ROOT .
'/categories/class/categorie.class.php';
3153 $form =
new Form($this->db);
3154 $datas[
'categories_customer'] =
'<br>' . $form->showCategories($this->
id, Categorie::TYPE_CUSTOMER, 1, 1);
3156 if (!empty($this->code_fournisseur) && $this->fournisseur) {
3157 $datas[
'suppliercode'] =
'<br><b>'.$langs->trans(
'SupplierCode').
':</b> '.$this->code_fournisseur;
3159 if (isModEnabled(
'accounting') && $this->fournisseur) {
3160 $langs->load(
'compta');
3161 $datas[
'accountancysuppliercode'] =
'<br><b>'.$langs->trans(
'SupplierAccountancyCode').
':</b> '.$this->code_compta_fournisseur;
3164 if (!$nofetch && isModEnabled(
'category') && $this->fournisseur) {
3165 require_once DOL_DOCUMENT_ROOT .
'/categories/class/categorie.class.php';
3166 $form =
new Form($this->db);
3167 $datas[
'categories_supplier'] =
'<br>' . $form->showCategories($this->
id, Categorie::TYPE_SUPPLIER, 1, 1);
3170 $datas[
'divclose'] =
'</div>';
3188 public function getNomUrl($withpicto = 0, $option =
'', $maxlen = 0, $notooltip = 0, $save_lastsearch_value = -1, $noaliasinname = 0, $target =
'', $morecss =
'')
3190 global
$conf, $langs, $hookmanager, $user;
3192 if (!empty(
$conf->dol_no_mouse_hover)) {
3196 $name = $this->
name ? $this->
name : $this->nom;
3198 if (
getDolGlobalString(
'SOCIETE_ON_SEARCH_AND_LIST_GO_ON_CUSTOMER_OR_SUPPLIER_CARD')) {
3199 if (empty($option) && $this->client > 0) {
3200 $option =
'customer';
3202 if (empty($option) && $this->fournisseur > 0) {
3203 $option =
'supplier';
3209 if (($this->client) && (!empty($this->code_client)) && (
getDolGlobalInt(
'SOCIETE_ADD_REF_IN_LIST') == 1 ||
getDolGlobalInt(
'SOCIETE_ADD_REF_IN_LIST') == 2)) {
3210 $code = $this->code_client.
' - ';
3213 if (($this->fournisseur) && (!empty($this->code_fournisseur)) && (
getDolGlobalInt(
'SOCIETE_ADD_REF_IN_LIST') == 1 ||
getDolGlobalInt(
'SOCIETE_ADD_REF_IN_LIST') == 3)) {
3214 $code .= $this->code_fournisseur.
' - ';
3219 $name = $code.
' '.$name;
3226 if (!empty($this->name_alias) && empty($noaliasinname)) {
3227 $name .=
' ('.$this->name_alias.
')';
3233 'objecttype' => $this->element,
3234 'option' => $option,
3237 $classfortooltip =
'classfortooltip';
3240 $classfortooltip =
'classforajaxtooltip';
3241 $dataparams =
' data-params="'.dol_escape_htmltag(json_encode($params)).
'"';
3250 if ($option ==
'customer' || $option ==
'compta' || $option ==
'category') {
3251 $linkstart =
'<a href="'.DOL_URL_ROOT.
'/comm/card.php?socid='.$this->id;
3252 } elseif ($option ==
'prospect' && !
getDolGlobalString(
'SOCIETE_DISABLE_PROSPECTS')) {
3253 $linkstart =
'<a href="'.DOL_URL_ROOT.
'/comm/card.php?socid='.$this->id;
3254 } elseif ($option ==
'supplier' || $option ==
'category_supplier') {
3255 $linkstart =
'<a href="'.DOL_URL_ROOT.
'/fourn/card.php?socid='.$this->id;
3256 } elseif ($option ==
'agenda') {
3257 $linkstart =
'<a href="'.DOL_URL_ROOT.
'/societe/agenda.php?socid='.$this->id;
3258 } elseif ($option ==
'project') {
3259 $linkstart =
'<a href="'.DOL_URL_ROOT.
'/societe/project.php?socid='.$this->id;
3260 } elseif ($option ==
'margin') {
3261 $linkstart =
'<a href="'.DOL_URL_ROOT.
'/margin/tabs/thirdpartyMargins.php?socid='.$this->
id.
'&type=1';
3262 } elseif ($option ==
'contact') {
3263 $linkstart =
'<a href="'.DOL_URL_ROOT.
'/societe/contact.php?socid='.$this->id;
3264 } elseif ($option ==
'ban') {
3265 $linkstart =
'<a href="'.DOL_URL_ROOT.
'/societe/paymentmodes.php?socid='.$this->id;
3269 if (empty($linkstart)) {
3270 $linkstart =
'<a href="'.DOL_URL_ROOT.
'/societe/card.php?socid='.$this->id;
3274 $linkstart .= (!empty($this->canvas) ?
'&canvas='.$this->canvas :
'');
3276 $add_save_lastsearch_values = ($save_lastsearch_value == 1 ? 1 : 0);
3277 if ($save_lastsearch_value == -1 && isset($_SERVER[
"PHP_SELF"]) && preg_match(
'/list\.php/', $_SERVER[
"PHP_SELF"])) {
3278 $add_save_lastsearch_values = 1;
3280 if ($add_save_lastsearch_values) {
3281 $linkstart .=
'&save_lastsearch_values=1';
3286 if (empty($notooltip)) {
3288 $label = $langs->trans(
"ShowCompany");
3289 $linkclose .=
' alt="'.dolPrintHTMLForAttribute($label).
'"';
3291 $linkclose .= ($label ?
' title="'.dolPrintHTMLForAttribute($label).
'"' :
' title="tocomplete"');
3292 $linkclose .= $dataparams.
' class="'.$classfortooltip.($morecss ?
' '.$morecss :
'').
' refurl valignmiddle"';
3293 $target_value = array(
'_self',
'_blank',
'_parent',
'_top');
3294 if (in_array($target, $target_value)) {
3295 $linkclose .=
' target="'.dol_escape_htmltag($target).
'"';
3298 $linkclose .=
' class="valignmiddle'.($morecss ?
' '.$morecss :
'').
'"';
3300 $linkstart .= $linkclose.
'>';
3303 if (!$user->hasRight(
'societe',
'client',
'voir') && $user->socid > 0 && $this->id != $user->socid) {
3308 $result .= $linkstart;
3310 $result .=
img_object(($notooltip ?
'' : $label), ($this->picto ? $this->picto :
'generic'), (
' class="'.(($withpicto != 2) ?
'paddingright' :
'').
'"'), 0, 0, $notooltip ? 0 : 1);
3312 if ($withpicto != 2) {
3315 $result .= $linkend;
3318 $hookmanager->initHooks(array(
'thirdpartydao'));
3319 $parameters = array(
3321 'getnomurl' => &$result,
3322 'withpicto ' => $withpicto,
3323 'option' => $option,
3324 'maxlen' => $maxlen,
3325 'notooltip' => $notooltip,
3326 'save_lastsearch_value' => $save_lastsearch_value
3328 $reshook = $hookmanager->executeHooks(
'getNomUrl', $parameters, $this, $action);
3330 $result = $hookmanager->resPrint;
3332 $result .= $hookmanager->resPrint;
3347 public function getTypeUrl($withpicto = 0, $option =
'', $notooltip = 0, $tag =
'a')
3352 if (empty($option) || preg_match(
'/prospect/', $option)) {
3353 if (($this->client == 2 || $this->client == 3) && !
getDolGlobalString(
'SOCIETE_DISABLE_PROSPECTS')) {
3354 $s .=
'<'.$tag.
' class="customer-back opacitymedium" title="'.
dolPrintHTMLForAttribute($langs->trans(
"Prospect")).
'"';
3355 $s .= $tag ==
'a' ?
' href="'.DOL_URL_ROOT.
'/comm/card.php?socid='.$this->
id.
'"' :
'';
3356 $s .=
'>'.dol_substr($langs->trans(
"Prospect"), 0, 1).
'</'.$tag.
'>';
3359 if (empty($option) || preg_match(
'/customer/', $option)) {
3360 if (($this->client == 1 || $this->client == 3) && !
getDolGlobalString(
'SOCIETE_DISABLE_CUSTOMERS')) {
3362 $s .= $tag ==
'a' ?
' href="'.DOL_URL_ROOT.
'/comm/card.php?socid='.$this->
id.
'"' :
'';
3363 $s .=
'>'.dol_substr($langs->trans(
"Customer"), 0, 1).
'</'.$tag.
'>';
3366 if (empty($option) || preg_match(
'/supplier/', $option)) {
3367 if ((isModEnabled(
"supplier_order") || isModEnabled(
"supplier_invoice")) && $this->fournisseur) {
3369 $s .= $tag ==
'a' ?
' href="'.DOL_URL_ROOT.
'/fourn/card.php?socid='.$this->
id.
'"' :
'';
3370 $s .=
'>'.dol_substr($langs->trans(
"Supplier"), 0, 1).
'</'.$tag.
'>';
3401 $langs->load(
'companies');
3403 $statusType =
'status4';
3405 $statusType =
'status6';
3408 if (empty($this->labelStatus) || empty($this->labelStatusShort)) {
3409 $this->labelStatus[0] = $langs->transnoentitiesnoconv(
"ActivityCeased");
3410 $this->labelStatus[1] = $langs->transnoentitiesnoconv(
"InActivity");
3411 $this->labelStatusShort[0] = $langs->transnoentitiesnoconv(
"ActivityCeased");
3412 $this->labelStatusShort[1] = $langs->transnoentitiesnoconv(
"InActivity");
3415 return dolGetStatus($this->labelStatus[$status], $this->labelStatusShort[$status],
'', $statusType, $mode);
3432 if ($this->
email && $addthirdparty) {
3433 if (empty($this->
name)) {
3434 $this->
name = $this->nom;
3436 $contact_emails[
'thirdparty'] = ($addthirdparty == 2 ?
'<span class="opacitymedium">' :
'').$langs->transnoentitiesnoconv(
"ThirdParty").($addthirdparty == 2 ?
'</span>' :
'').
': '.
dol_trunc($this->
name, 16).
" <".$this->
email.
">";
3440 return $contact_emails;
3456 if (!empty($this->phone)) {
3457 if (empty($this->
name)) {
3458 $this->
name = $this->nom;
3461 $contact_phone[
'thirdparty'] = $langs->transnoentitiesnoconv(
"ThirdParty").
': '.
dol_trunc($this->
name, 16).
" <".$this->phone.
">";
3463 return $contact_phone;
3479 $contact_property = array();
3482 $sql =
"SELECT rowid, email, statut as status, phone_mobile, lastname, poste, firstname";
3483 $sql .=
" FROM ".MAIN_DB_PREFIX.
"socpeople";
3484 $sql .=
" WHERE fk_soc = ".((int) $this->
id);
3485 $sql .=
" AND entity IN (".getEntity($this->element).
")";
3486 $sql .=
" ORDER BY lastname, firstname";
3488 $resql = $this->db->query($sql);
3490 $nump = $this->db->num_rows($resql);
3494 if ($mode ==
'email') {
3500 while ($i < $nump) {
3501 $obj = $this->db->fetch_object($resql);
3502 if ($mode ==
'email') {
3503 $property = $obj->email;
3504 } elseif ($mode ==
'mobile') {
3505 $property = $obj->phone_mobile;
3507 $property = $obj->$mode;
3511 if ($obj->status == 1 || empty($hidedisabled)) {
3512 if (empty($property)) {
3513 if ($mode ==
'email') {
3514 $property = $langs->transnoentitiesnoconv(
"NoEMail");
3515 } elseif ($mode ==
'mobile') {
3516 $property = $langs->transnoentitiesnoconv(
"NoMobilePhone");
3520 if (!empty($obj->poste)) {
3521 $contact_property[$obj->rowid] = trim(
dolGetFirstLastname($obj->firstname, $obj->lastname)).($obj->poste ?
" - ".$obj->poste :
"").(($mode !=
'poste' && $property) ?
" ".$sepa.$property.$sepb :
'');
3523 $contact_property[$obj->rowid] = trim(
dolGetFirstLastname($obj->firstname, $obj->lastname)).(($mode !=
'poste' && $property) ?
" ".$sepa.$property.$sepb :
'');
3532 return $contact_property;
3545 $contacts = array();
3547 $sql =
"SELECT rowid, lastname, firstname FROM ".MAIN_DB_PREFIX.
"socpeople WHERE fk_soc = ".((int) $this->
id);
3548 $resql = $this->db->query($sql);
3550 $nump = $this->db->num_rows($resql);
3553 while ($i < $nump) {
3554 $obj = $this->db->fetch_object($resql);
3574 require_once DOL_DOCUMENT_ROOT.
'/contact/class/contact.class.php';
3575 $contacts = array();
3577 $sql =
"SELECT rowid FROM ".MAIN_DB_PREFIX.
"socpeople WHERE fk_soc = ".((int) $this->
id);
3578 $resql = $this->db->query($sql);
3580 $nump = $this->db->num_rows($resql);
3583 while ($i < $nump) {
3584 $obj = $this->db->fetch_object($resql);
3585 $contact =
new Contact($this->db);
3586 $contact->fetch($obj->rowid);
3587 $contacts[] = $contact;
3608 $contact_property =
'';
3610 if (empty($rowid)) {
3614 $sql =
"SELECT rowid, email, phone_mobile, lastname, firstname";
3615 $sql .=
" FROM ".MAIN_DB_PREFIX.
"socpeople";
3616 $sql .=
" WHERE rowid = ".((int) $rowid);
3618 $resql = $this->db->query($sql);
3620 $nump = $this->db->num_rows($resql);
3623 $obj = $this->db->fetch_object($resql);
3625 if ($mode ==
'email') {
3627 } elseif ($mode ==
'mobile') {
3628 $contact_property = $obj->phone_mobile;
3631 return $contact_property;
3650 require_once DOL_DOCUMENT_ROOT.
'/societe/class/companybankaccount.class.php';
3654 $bac->fetch(0,
'', $this->
id);
3657 if ($mode ==
'label') {
3658 return $bac->getRibLabel(
true);
3659 } elseif ($mode ==
'rum') {
3660 if (empty($bac->rum)) {
3661 require_once DOL_DOCUMENT_ROOT.
'/compta/prelevement/class/bonprelevement.class.php';
3663 $bac->fetch_thirdparty();
3664 $bac->rum = $prelevement->buildRumNumber($bac->thirdparty->code_client, $bac->datec, (
string) $bac->id);
3667 } elseif ($mode ==
'format') {
3668 return $bac->frstrecur;
3670 return 'BadParameterToFunctionDisplayRib';
3686 require_once DOL_DOCUMENT_ROOT.
'/societe/class/companybankaccount.class.php';
3687 $sql =
"SELECT rowid FROM ".MAIN_DB_PREFIX.
"societe_rib WHERE type = 'ban' AND fk_soc = ".((int) $this->
id);
3688 $result = $this->db->query($sql);
3690 $this->error = $this->db->lasterror();
3691 $this->errors[] = $this->db->lasterror();
3694 $num_rows = $this->db->num_rows($result);
3695 $rib_array = array();
3697 while ($obj = $this->db->fetch_object($result)) {
3699 $rib->fetch($obj->rowid);
3700 $rib_array[] = $rib;
3713 require_once DOL_DOCUMENT_ROOT.
'/societe/class/companybankaccount.class.php';
3714 $sql =
"SELECT rowid FROM ".MAIN_DB_PREFIX.
"societe_rib WHERE type = 'ban' AND default_rib = 1 AND fk_soc = ". (int) $this->
id;
3715 $resql = $this->db->query($sql);
3717 $this->error = $this->db->lasterror();
3718 $this->errors[] = $this->db->lasterror();
3721 $num_rows = $this->db->num_rows($resql);
3722 $rib_array = array();
3724 while ($obj = $this->db->fetch_object($resql)) {
3742 public function get_codeclient($objsoc =
null, $type = 0)
3749 $dirsociete = array_merge(array(
'/core/modules/societe/'),
$conf->modules_parts[
'societe']);
3750 foreach ($dirsociete as $dirroot) {
3757 $mod =
new $module($this->db);
3758 '@phan-var-force ModeleThirdPartyCode $mod';
3760 $this->code_client = $mod->getNextValue($objsoc, $type);
3761 $this->prefixCustomerIsRequired = $mod->prefixIsRequired;
3763 dol_syslog(get_class($this).
"::get_codeclient code_client=".$this->code_client.
" module=".$module);
3776 public function get_codefournisseur($objsoc =
null, $type = 1)
3783 $dirsociete = array_merge(array(
'/core/modules/societe/'),
$conf->modules_parts[
'societe']);
3784 foreach ($dirsociete as $dirroot) {
3791 $mod =
new $module($this->db);
3792 '@phan-var-force ModeleThirdPartyCode $mod';
3794 $this->code_fournisseur = $mod->getNextValue($objsoc, $type);
3796 dol_syslog(get_class($this).
"::get_codefournisseur code_fournisseur=".$this->code_fournisseur.
" module=".$module);
3814 $dirsociete = array_merge(array(
'/core/modules/societe/'),
$conf->modules_parts[
'societe']);
3815 foreach ($dirsociete as $dirroot) {
3822 $mod =
new $module($this->db);
3823 '@phan-var-force ModeleThirdPartyCode $mod';
3825 dol_syslog(get_class($this).
"::codeclient_modifiable code_client=".$this->code_client.
" module=".$module);
3826 if ($mod->code_modifiable_null && !$this->code_client) {
3829 if ($mod->code_modifiable_invalide && $this->check_codeclient() < 0) {
3832 if ($mod->code_modifiable) {
3855 $dirsociete = array_merge(array(
'/core/modules/societe/'),
$conf->modules_parts[
'societe']);
3856 foreach ($dirsociete as $dirroot) {
3863 $mod =
new $module($this->db);
3864 '@phan-var-force ModeleThirdPartyCode $mod';
3866 dol_syslog(get_class($this).
"::codefournisseur_modifiable code_founisseur=".$this->code_fournisseur.
" module=".$module);
3867 if ($mod->code_modifiable_null && !$this->code_fournisseur) {
3870 if ($mod->code_modifiable_invalide && $this->check_codefournisseur() < 0) {
3873 if ($mod->code_modifiable) {
3902 $dirsociete = array_merge(array(
'/core/modules/societe/'),
$conf->modules_parts[
'societe']);
3903 foreach ($dirsociete as $dirroot) {
3910 $mod =
new $module($this->db);
3911 '@phan-var-force ModeleThirdPartyCode $mod';
3913 dol_syslog(get_class($this).
"::check_codeclient code_client=".$this->code_client.
" module=".$module);
3914 $result = $mod->verif($this->db, $this->code_client, $this, 0);
3916 $this->error = $mod->error;
3917 $this->errors = $mod->errors;
3944 $dirsociete = array_merge(array(
'/core/modules/societe/'),
$conf->modules_parts[
'societe']);
3945 foreach ($dirsociete as $dirroot) {
3952 $mod =
new $module($this->db);
3953 '@phan-var-force ModeleThirdPartyCode $mod';
3955 dol_syslog(get_class($this).
"::check_codefournisseur code_fournisseur=".$this->code_fournisseur.
" module=".$module);
3956 $result = $mod->verif($this->db, $this->code_fournisseur, $this, 1);
3958 $this->error = $mod->error;
3959 $this->errors = $mod->errors;
3984 $dirsociete = array_merge(array(
'/core/modules/societe/'),
$conf->modules_parts[
'societe']);
3985 foreach ($dirsociete as $dirroot) {
3993 $mod =
new $module();
3994 '@phan-var-force ModeleAccountancyCode $mod';
3997 $result = $mod->get_code($this->db, $this, $type);
3999 if ($type ==
'customer') {
4000 $this->code_compta_client = $mod->code;
4001 } elseif ($type ==
'supplier') {
4002 $this->code_compta_fournisseur = $mod->code;
4007 $this->error =
'ErrorAccountancyCodeNotDefined';
4011 if ($type ==
'customer') {
4012 $this->code_compta_client =
'';
4013 } elseif ($type ==
'supplier') {
4014 $this->code_compta_fournisseur =
'';
4029 dol_syslog(get_class($this).
'::setParent', LOG_DEBUG);
4035 if ($sameparent < 0) {
4038 if ($sameparent == 1) {
4039 setEventMessages(
'ParentCompanyToAddIsAlreadyAChildOfModifiedCompany',
null,
'warnings');
4044 $sql =
'UPDATE '.MAIN_DB_PREFIX.
'societe SET parent = '.($id > 0 ? $id :
'null').
' WHERE rowid = '.((
int) $this->id);
4046 $resql = $this->db->query($sql);
4048 $this->parent = $id;
4068 if ($counter > 100) {
4069 dol_syslog(
"Too high level of parent - child for company. May be an infinite loop ?", LOG_WARNING);
4072 $sql =
'SELECT s.parent';
4073 $sql .=
' FROM '.MAIN_DB_PREFIX.
'societe as s';
4074 $sql .=
' WHERE rowid = '.((int) $idparent);
4075 $resql = $this->db->query($sql);
4077 $obj = $this->db->fetch_object($resql);
4079 if ($obj->parent ==
'') {
4081 } elseif ($obj->parent == $idchild) {
4103 if ($company_id > 0) {
4104 $sql =
"SELECT parent FROM " . MAIN_DB_PREFIX .
"societe WHERE rowid = ".((int) $company_id);
4105 $resql = $this->db->query($sql);
4107 if ($obj = $this->db->fetch_object($resql)) {
4108 $parent = $obj->parent;
4109 if ($parent > 0 && !in_array($parent, $parents)) {
4110 $parents[] = $parent;
4116 $this->db->free($resql);
4118 setEventMessage($langs->trans(
'GetCompanyParentsError', $this->db->lasterror()),
'errors');
4203 $sql =
"SELECT COUNT(*) as nb FROM ".MAIN_DB_PREFIX.
"societe WHERE ".$field.
" = '".$this->db->escape($value).
"' AND entity IN (".
getEntity(
'societe').
")";
4205 $sql .=
" AND rowid <> ".$socid;
4207 $resql = $this->db->query($sql);
4209 $obj = $this->db->fetch_object($resql);
4213 print $this->db->error();
4215 $this->db->free($resql);
4239 require_once DOL_DOCUMENT_ROOT.
'/core/lib/profid.lib.php';
4248 if ($idprof == 1 && $soc->country_code ==
'FR' && !
isValidSiren($this->idprof1)) {
4253 if ($idprof == 2 && $soc->country_code ==
'FR' && !
isValidSiret($this->idprof2)) {
4258 if ($idprof == 1 && $soc->country_code ==
'ES') {
4263 if ($idprof == 1 && $soc->country_code ==
'PT' && !
isValidTinForPT($this->idprof1)) {
4268 if ($idprof == 1 && $soc->country_code ==
'DZ' && !
isValidTinForDZ($this->idprof1)) {
4273 if ($idprof == 1 && $soc->country_code ==
'BE' && !
isValidTinForBE($this->idprof1)) {
4292 global
$conf, $langs, $hookmanager;
4297 $hookmanager->initHooks(array(
'idprofurl'));
4298 $parameters = array(
'idprof' => $idprof,
'company' => $thirdparty);
4299 $reshook = $hookmanager->executeHooks(
'getIdProfUrl', $parameters, $this, $action);
4300 if (empty($reshook)) {
4306 $strippedIdProf1 = str_replace(
' ',
'', $thirdparty->idprof1);
4307 if ($idprof == 1 && $thirdparty->country_code ==
'FR') {
4308 $url =
'https://annuaire-entreprises.data.gouv.fr/entreprise/'.$strippedIdProf1;
4310 if ($idprof == 1 && ($thirdparty->country_code ==
'GB' || $thirdparty->country_code ==
'UK')) {
4311 $url =
'https://beta.companieshouse.gov.uk/company/'.$strippedIdProf1;
4313 if ($idprof == 1 && $thirdparty->country_code ==
'ES') {
4314 $url =
'http://www.e-informa.es/servlet/app/portal/ENTP/screen/SProducto/prod/ETIQUETA_EMPRESA/nif/'.$strippedIdProf1;
4316 if ($idprof == 1 && $thirdparty->country_code ==
'IN') {
4317 $url =
'http://www.tinxsys.com/TinxsysInternetWeb/dealerControllerServlet?tinNumber='.$strippedIdProf1.
';&searchBy=TIN&backPage=searchByTin_Inter.jsp';
4319 if ($idprof == 1 && $thirdparty->country_code ==
'DZ') {
4320 $url =
'http://nif.mfdgi.gov.dz/nif.asp?Nif='.$strippedIdProf1;
4322 if ($idprof == 1 && $thirdparty->country_code ==
'PT') {
4323 $url =
'http://www.nif.pt/'.$strippedIdProf1;
4327 return '<a target="_blank" rel="noopener noreferrer" href="'.$url.
'">'.$langs->trans(
"Check").
'</a>';
4330 return $hookmanager->resPrint;
4345 $sql =
"SELECT COUNT(*) as numproj FROM ".MAIN_DB_PREFIX.
"projet WHERE fk_soc = ".((int) $this->
id);
4346 $resql = $this->db->query($sql);
4348 $obj = $this->db->fetch_object($resql);
4349 $count = $obj->numproj;
4352 print $this->db->error();
4354 $this->db->free($resql);
4355 return ($count > 0);
4367 $sql =
"SELECT s.rowid, s.nom as name, s.datec, tms as datem,";
4368 $sql .=
" fk_user_creat, fk_user_modif";
4369 $sql .=
" FROM ".MAIN_DB_PREFIX.
"societe as s";
4370 $sql .=
" WHERE s.rowid = ".((int) $id);
4372 $result = $this->db->query($sql);
4374 if ($this->db->num_rows($result)) {
4375 $obj = $this->db->fetch_object($result);
4377 $this->
id = $obj->rowid;
4379 $this->user_creation_id = $obj->fk_user_creat;
4380 $this->user_modification_id = $obj->fk_user_modif;
4381 $this->date_creation = $this->db->jdate($obj->datec);
4382 $this->date_modification = empty($obj->datem) ?
'' : $this->db->jdate($obj->datem);
4384 $this->
ref = $obj->name;
4387 $this->db->free($result);
4401 $isACompany =
getDolGlobalInt(
'MAIN_UNKNOWN_CUSTOMERS_ARE_COMPANIES', 1);
4404 if (!empty($this->tva_intra)) {
4406 } elseif (!empty($this->idprof1) || !empty($this->idprof2) || !empty($this->idprof3) || !empty($this->idprof4) || !empty($this->idprof5) || !empty($this->idprof6)) {
4410 if (preg_match(
'/^TE_PRIVATE/', $this->typent_code)) {
4418 return (
bool) $isACompany;
4428 require_once DOL_DOCUMENT_ROOT.
'/core/lib/company.lib.php';
4439 require_once DOL_DOCUMENT_ROOT.
'/core/lib/company.lib.php';
4452 $this->SupplierCategories = array();
4453 $sql =
"SELECT rowid, label";
4454 $sql .=
" FROM ".MAIN_DB_PREFIX.
"categorie";
4455 $sql .=
" WHERE type = ".Categorie::TYPE_SUPPLIER;
4457 $resql = $this->db->query($sql);
4459 while ($obj = $this->db->fetch_object($resql)) {
4460 $this->SupplierCategories[$obj->rowid] = $obj->label;
4478 if ($categorie_id > 0 && $this->
id > 0) {
4479 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"categorie_fournisseur (fk_categorie, fk_soc) ";
4480 $sql .=
" VALUES (".((int) $categorie_id).
", ".((int) $this->
id).
")";
4482 if ($resql = $this->db->query($sql)) {
4498 $sql =
"SELECT count(mc.email) as nb";
4499 $sql .=
" FROM ".MAIN_DB_PREFIX.
"mailing_cibles as mc, ".MAIN_DB_PREFIX.
"mailing as m";
4500 $sql .=
" WHERE mc.fk_mailing=m.rowid AND mc.email = '".$this->db->escape($this->
email).
"' ";
4501 $sql .=
" AND m.entity IN (".getEntity($this->element).
") AND mc.statut NOT IN (-1,0)";
4503 $resql = $this->db->query($sql);
4505 $obj = $this->db->fetch_object($resql);
4508 $this->db->free($resql);
4511 $this->error = $this->db->error();
4533 $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).
"'";
4534 $resql = $this->db->query($sql);
4536 $obj = $this->db->fetch_object($resql);
4537 $noemail = $obj->nb;
4538 if (empty($noemail)) {
4540 $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()).
"')";
4541 $resql = $this->db->query($sql);
4544 $this->error = $this->db->lasterror();
4545 $this->errors[] = $this->error;
4550 $this->error = $this->db->lasterror();
4551 $this->errors[] = $this->error;
4555 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"mailing_unsubscribe WHERE email = '".$this->db->escape($this->
email).
"' AND entity IN (".
getEntity(
'mailing', 0).
")";
4556 $resql = $this->db->query($sql);
4559 $this->error = $this->db->lasterror();
4560 $this->errors[] = $this->error;
4564 if (empty($error)) {
4565 $this->no_email = $no_email;
4566 $this->db->commit();
4569 $this->db->rollback();
4586 $sql =
"SELECT COUNT(rowid) as nb FROM ".MAIN_DB_PREFIX.
"mailing_unsubscribe WHERE entity IN (".
getEntity(
'mailing').
") AND email = '".$this->db->escape($this->
email).
"'";
4587 $resql = $this->db->query($sql);
4589 $obj = $this->db->fetch_object($resql);
4590 $this->no_email = $obj->nb;
4593 $this->error = $this->db->lasterror();
4594 $this->errors[] = $this->error;
4614 global $user, $langs;
4616 dol_syslog(get_class($this).
"::create_from_member", LOG_DEBUG);
4617 $fullname = $member->getFullName($langs);
4619 if ($member->morphy ==
'mor') {
4620 if (empty($socname)) {
4621 $socname = $member->company ? $member->company : $member->societe;
4623 if (!empty($fullname) && empty($socalias)) {
4624 $socalias = $fullname;
4626 } elseif (empty($socname) && $member->morphy ==
'phy') {
4627 if (empty($socname)) {
4628 $socname = $fullname;
4630 if (!empty($member->company) && empty($socalias)) {
4631 $socalias = $member->company;
4636 $alias = $socalias ? $socalias :
'';
4640 $this->
name = $name;
4641 $this->name_alias = $alias;
4642 $this->
address = $member->address;
4643 $this->zip = $member->zip;
4644 $this->town = $member->town;
4645 $this->country_code = $member->country_code;
4646 $this->country_id = $member->country_id;
4647 $this->phone = $member->phone;
4648 $this->
email = $member->email;
4649 $this->socialnetworks = $member->socialnetworks;
4650 $this->entity = $member->entity;
4654 $this->code_client = $member->ref;
4656 $this->code_client = ($customercode ? $customercode : -1);
4658 $this->code_fournisseur =
'-1';
4659 $this->typent_code = ($member->morphy ==
'phy' ?
'TE_PRIVATE' : 0);
4660 $this->typent_id = $this->typent_code ?
dol_getIdFromCode($this->db, $this->typent_code,
'c_typent',
'id',
'code') : 0;
4665 $result = $this->
create($user);
4671 $this->name_bis = $member->lastname;
4672 $this->firstname = $member->firstname;
4673 $this->civility_id = (empty($member->civility_code) ? $member->civility_id : $member->civility_code);
4674 $this->civility_code = (empty($member->civility_code) ? $member->civility_id : $member->civility_code);
4676 dol_syslog(
"We ask to create a contact/address too", LOG_DEBUG);
4681 $this->db->rollback();
4686 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"adherent";
4687 $sql .=
" SET fk_soc = ".((int) $this->
id);
4688 $sql .=
" WHERE rowid = ".((int) $member->id);
4690 $resql = $this->db->query($sql);
4692 $this->db->commit();
4695 $this->error = $this->db->error();
4697 $this->db->rollback();
4702 dol_syslog(get_class($this).
"::create_from_member - 2 - ".$this->error.
" - ".implode(
',', $this->errors), LOG_ERR);
4704 $this->db->rollback();
4720 $this->entity =
$conf->entity;
4722 $this->nom = $this->name;
4736 $country_code = $country_label =
'';
4739 $country_id = (is_numeric($tmp[0])) ? (
int) $tmp[0] : 0;
4740 if (!empty($tmp[1])) {
4741 $country_code = $tmp[1];
4742 $country_label = $tmp[2];
4745 dol_syslog(
"Your country setup use an old syntax. Reedit it using setup area.", LOG_WARNING);
4746 include_once DOL_DOCUMENT_ROOT.
'/core/lib/company.lib.php';
4747 $country_code =
getCountry($country_id,
'2', $this->db);
4748 $country_label =
getCountry($country_id,
'', $this->db);
4751 $this->country_id = $country_id;
4752 $this->country_code = $country_code;
4753 $this->country = $country_label;
4754 if (is_object($langs)) {
4755 $this->country = ($langs->trans(
'Country'.$country_code) !=
'Country'.$country_code) ? $langs->trans(
'Country'.$country_code) : $country_label;
4765 $state_id = (int) $tmp[0];
4766 if (!empty($tmp[1])) {
4767 $state_code = $tmp[1];
4768 $state_label = $tmp[2];
4770 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);
4771 include_once DOL_DOCUMENT_ROOT.
'/core/lib/company.lib.php';
4772 $state_code =
getState($state_id,
'2', $this->db);
4773 $state_label =
getState($state_id,
'0', $this->db);
4776 $this->state_id = $state_id;
4777 $this->state_code = $state_code;
4778 $this->state = $state_label;
4779 if (is_object($langs)) {
4780 $this->state = ($langs->trans(
'State'.$state_code) !=
'State'.$state_code) ? $langs->trans(
'State'.$state_code) : $state_label;
4795 $this->socialnetworks = array();
4796 if (!empty($facebook_url)) {
4797 $this->socialnetworks[
'facebook'] = $facebook_url;
4799 if (!empty($twitter_url)) {
4800 $this->socialnetworks[
'twitter'] = $twitter_url;
4802 if (!empty($linkedin_url)) {
4803 $this->socialnetworks[
'linkedin'] = $linkedin_url;
4805 if (!empty($instagram_url)) {
4806 $this->socialnetworks[
'instagram'] = $instagram_url;
4808 if (!empty($youtube_url)) {
4809 $this->socialnetworks[
'youtube'] = $youtube_url;
4811 if (!empty($github_url)) {
4812 $this->socialnetworks[
'github'] = $github_url;
4829 $this->forme_juridique_code =
getDolGlobalInt(
'MAIN_INFO_SOCIETE_FORME_JURIDIQUE');
4836 $this->logo_squarred_small =
getDolGlobalString(
'MAIN_INFO_SOCIETE_LOGO_SQUARRED_SMALL');
4837 $this->logo_squarred_mini =
getDolGlobalString(
'MAIN_INFO_SOCIETE_LOGO_SQUARRED_MINI');
4843 $this->localtax1_assuj = ((isset(
$conf->global->FACTURE_LOCAL_TAX1_OPTION) && (
getDolGlobalString(
'FACTURE_LOCAL_TAX1_OPTION') ==
'1' ||
getDolGlobalString(
'FACTURE_LOCAL_TAX1_OPTION') ==
'localtax1on')) ? 1 : 0);
4844 $this->localtax2_assuj = ((isset(
$conf->global->FACTURE_LOCAL_TAX2_OPTION) && (
getDolGlobalString(
'FACTURE_LOCAL_TAX2_OPTION') ==
'1' ||
getDolGlobalString(
'FACTURE_LOCAL_TAX2_OPTION') ==
'localtax2on')) ? 1 : 0);
4863 $this->
name =
'THIRDPARTY SPECIMEN '.dol_print_date($now,
'dayhourlog');
4864 $this->ref_ext =
'Ref ext';
4865 $this->specimen = 1;
4866 $this->
address =
'21 jump street';
4867 $this->zip =
'99999';
4868 $this->town =
'MyTown';
4869 $this->state_id = 1;
4870 $this->state_code =
'AA';
4871 $this->state =
'MyState';
4872 $this->country_id = 1;
4873 $this->country_code =
'FR';
4874 $this->
email =
'specimen@specimen.com';
4875 $this->socialnetworks = array(
4876 'skype' =>
'skypepseudo',
4877 'twitter' =>
'twitterpseudo',
4878 'facebook' =>
'facebookpseudo',
4879 'linkedin' =>
'linkedinpseudo',
4881 $this->url =
'http://www.specimen.com';
4883 $this->phone =
'0909090901';
4884 $this->phone_mobile =
'0909090901';
4885 $this->fax =
'0909090909';
4887 $this->code_client =
'CC-'.dol_print_date($now,
'dayhourlog');
4888 $this->code_fournisseur =
'SC-'.dol_print_date($now,
'dayhourlog');
4889 $this->typent_code =
'TE_OTHER';
4890 $this->capital = 10000;
4892 $this->prospect = 1;
4893 $this->fournisseur = 1;
4894 $this->tva_assuj = 1;
4895 $this->tva_intra =
'EU1234567';
4896 $this->note_public =
'This is a comment (public)';
4897 $this->note_private =
'This is a comment (private)';
4899 $this->idprof1 =
'idprof1';
4900 $this->idprof2 =
'idprof2';
4901 $this->idprof3 =
'idprof3';
4902 $this->idprof4 =
'idprof4';
4903 $this->idprof5 =
'idprof5';
4904 $this->idprof6 =
'idprof6';
4917 $sql =
"SELECT t.localtax1, t.localtax2";
4918 $sql .=
" FROM ".MAIN_DB_PREFIX.
"c_tva as t, ".MAIN_DB_PREFIX.
"c_country as c";
4919 $sql .=
" WHERE t.fk_pays = c.rowid AND c.code = '".$this->db->escape($this->country_code).
"'";
4920 $sql .=
" AND t.active = 1";
4921 $sql .=
" AND t.entity IN (".getEntity(
'c_tva').
")";
4922 if (empty($localTaxNum)) {
4923 $sql .=
" AND (t.localtax1_type <> '0' OR t.localtax2_type <> '0')";
4924 } elseif ($localTaxNum == 1) {
4925 $sql .=
" AND t.localtax1_type <> '0'";
4926 } elseif ($localTaxNum == 2) {
4927 $sql .=
" AND t.localtax2_type <> '0'";
4930 $resql = $this->db->query($sql);
4932 return ($this->db->num_rows($resql) > 0);
4945 $sql =
"SELECT t.rowid";
4946 $sql .=
" FROM ".MAIN_DB_PREFIX.
"c_tva as t, ".MAIN_DB_PREFIX.
"c_country as c";
4947 $sql .=
" WHERE t.fk_pays = c.rowid AND c.code = '".$this->db->escape($this->country_code).
"'";
4948 $sql .=
" AND t.active = 1 AND t.recuperableonly = 1";
4949 $sql .=
" AND t.entity IN (".getEntity(
'c_tva').
")";
4952 $resql = $this->db->query($sql);
4954 return ($this->db->num_rows($resql) > 0);
4968 $sql =
"SELECT COUNT(*) as nb";
4969 $sql .=
" FROM ".MAIN_DB_PREFIX.
"c_revenuestamp as r, ".MAIN_DB_PREFIX.
"c_country as c";
4970 $sql .=
" WHERE r.fk_pays = c.rowid AND c.code = '".$this->db->escape($this->country_code).
"'";
4971 $sql .=
" AND r.active = 1";
4974 $resql = $this->db->query($sql);
4976 $obj = $this->db->fetch_object($resql);
4977 return ($obj->nb > 0);
4979 $this->error = $this->db->lasterror();
5007 if ($fk_prospectlevel !=
'') {
5008 $label = $langs->trans(
"ProspectLevel".$fk_prospectlevel);
5010 if ($label ==
"ProspectLevel".$fk_prospectlevel) {
5011 $label = $langs->getLabelFromKey($this->db, $fk_prospectlevel,
'c_prospectlevel',
'code',
'label');
5027 return $this->
LibProspCommStatut($this->stcomm_id, $mode, $label, $this->stcomm_picto);
5049 $langs->load(
'customers');
5052 if ($status ==
'-1' || $status ==
'ST_NO') {
5053 return img_action($langs->trans(
"StatusProspect-1"),
'-1', $picto,
'class="inline-block valignmiddle"').
' '.$langs->trans(
"StatusProspect-1");
5054 } elseif ($status ==
'0' || $status ==
'ST_NEVER') {
5055 return img_action($langs->trans(
"StatusProspect0"),
'0', $picto,
'class="inline-block valignmiddle"').
' '.$langs->trans(
"StatusProspect0");
5056 } elseif ($status ==
'1' || $status ==
'ST_TODO') {
5057 return img_action($langs->trans(
"StatusProspect1"),
'1', $picto,
'class="inline-block valignmiddle"').
' '.$langs->trans(
"StatusProspect1");
5058 } elseif ($status ==
'2' || $status ==
'ST_PEND') {
5059 return img_action($langs->trans(
"StatusProspect2"),
'2', $picto,
'class="inline-block valignmiddle"').
' '.$langs->trans(
"StatusProspect2");
5060 } elseif ($status ==
'3' || $status ==
'ST_DONE') {
5061 return img_action($langs->trans(
"StatusProspect3"),
'3', $picto,
'class="inline-block valignmiddle"').
' '.$langs->trans(
"StatusProspect3");
5063 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);
5065 } elseif ($mode == 3) {
5066 if ($status ==
'-1' || $status ==
'ST_NO') {
5067 return img_action($langs->trans(
"StatusProspect-1"),
'-1', $picto,
'class="inline-block valignmiddle"');
5068 } elseif ($status ==
'0' || $status ==
'ST_NEVER') {
5069 return img_action($langs->trans(
"StatusProspect0"),
'0', $picto,
'class="inline-block valignmiddle"');
5070 } elseif ($status ==
'1' || $status ==
'ST_TODO') {
5071 return img_action($langs->trans(
"StatusProspect1"),
'1', $picto,
'class="inline-block valignmiddle"');
5072 } elseif ($status ==
'2' || $status ==
'ST_PEND') {
5073 return img_action($langs->trans(
"StatusProspect2"),
'2', $picto,
'class="inline-block valignmiddle"');
5074 } elseif ($status ==
'3' || $status ==
'ST_DONE') {
5075 return img_action($langs->trans(
"StatusProspect3"),
'3', $picto,
'class="inline-block valignmiddle"');
5077 return img_action(($langs->trans(
"StatusProspect".$status) !=
"StatusProspect".$status) ? $langs->trans(
"StatusProspect".$status) : $label,
'0', $picto,
'class="inline-block valignmiddle"');
5079 } elseif ($mode == 4) {
5080 if ($status ==
'-1' || $status ==
'ST_NO') {
5081 return img_action($langs->trans(
"StatusProspect-1"),
'-1', $picto,
'class="inline-block valignmiddle"').
' '.$langs->trans(
"StatusProspect-1");
5082 } elseif ($status ==
'0' || $status ==
'ST_NEVER') {
5083 return img_action($langs->trans(
"StatusProspect0"),
'0', $picto,
'class="inline-block valignmiddle"').
' '.$langs->trans(
"StatusProspect0");
5084 } elseif ($status ==
'1' || $status ==
'ST_TODO') {
5085 return img_action($langs->trans(
"StatusProspect1"),
'1', $picto,
'class="inline-block valignmiddle"').
' '.$langs->trans(
"StatusProspect1");
5086 } elseif ($status ==
'2' || $status ==
'ST_PEND') {
5087 return img_action($langs->trans(
"StatusProspect2"),
'2', $picto,
'class="inline-block valignmiddle"').
' '.$langs->trans(
"StatusProspect2");
5088 } elseif ($status ==
'3' || $status ==
'ST_DONE') {
5089 return img_action($langs->trans(
"StatusProspect3"),
'3', $picto,
'class="inline-block valignmiddle"').
' '.$langs->trans(
"StatusProspect3");
5091 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);
5095 return "Error, mode/status not found";
5107 if ($mode ==
'supplier') {
5108 $table =
'supplier_proposal';
5111 $sql =
"SELECT rowid, ref, total_ht, total_ttc, fk_statut as status FROM ".MAIN_DB_PREFIX.$table.
" as f";
5112 $sql .=
" WHERE fk_soc = ".((int) $this->
id);
5113 if ($mode ==
'supplier') {
5114 $sql .=
" AND entity IN (".getEntity(
'supplier_proposal').
")";
5116 $sql .=
" AND entity IN (".getEntity(
'propal').
")";
5119 dol_syslog(
"getOutstandingProposals for fk_soc = ".((
int) $this->
id), LOG_DEBUG);
5121 $resql = $this->db->query($sql);
5123 $outstandingOpened = 0;
5124 $outstandingTotal = 0;
5125 $outstandingTotalIncTax = 0;
5126 $arrayofref = array();
5127 while ($obj = $this->db->fetch_object($resql)) {
5128 $arrayofref[$obj->rowid] = $obj->ref;
5129 $outstandingTotal += $obj->total_ht;
5130 $outstandingTotalIncTax += $obj->total_ttc;
5131 if ($obj->status != 0) {
5133 $outstandingOpened += $obj->total_ttc;
5136 return array(
'opened' => $outstandingOpened,
'total_ht' => $outstandingTotal,
'total_ttc' => $outstandingTotalIncTax,
'refs' => $arrayofref);
5150 $table =
'commande';
5151 if ($mode ==
'supplier') {
5152 $table =
'commande_fournisseur';
5155 $sql =
"SELECT rowid, ref, total_ht, total_ttc, fk_statut as status FROM ".MAIN_DB_PREFIX.$table.
" as f";
5156 $sql .=
" WHERE fk_soc = ".((int) $this->
id);
5157 if ($mode ==
'supplier') {
5158 $sql .=
" AND entity IN (".getEntity(
'supplier_order').
")";
5160 $sql .=
" AND entity IN (".getEntity(
'commande').
")";
5163 dol_syslog(
"getOutstandingOrders", LOG_DEBUG);
5164 $resql = $this->db->query($sql);
5166 $outstandingOpened = 0;
5167 $outstandingTotal = 0;
5168 $outstandingTotalIncTax = 0;
5169 $arrayofref = array();
5170 while ($obj = $this->db->fetch_object($resql)) {
5171 $arrayofref[$obj->rowid] = $obj->ref;
5172 $outstandingTotal += $obj->total_ht;
5173 $outstandingTotalIncTax += $obj->total_ttc;
5174 if ($obj->status != 0) {
5176 $outstandingOpened += $obj->total_ttc;
5179 return array(
'opened' => $outstandingOpened,
'total_ht' => $outstandingTotal,
'total_ttc' => $outstandingTotalIncTax,
'refs' => $arrayofref);
5194 include_once DOL_DOCUMENT_ROOT.
'/core/lib/date.lib.php';
5197 if ($mode ==
'supplier') {
5198 $table =
'facture_fourn';
5210 $sql =
"SELECT rowid, ref, total_ht, total_ttc, paye, type, fk_statut as status, close_code FROM ".MAIN_DB_PREFIX.$table.
" as f";
5211 $sql .=
" WHERE fk_soc = ".((int) $this->
id);
5212 if (!empty($late)) {
5213 $sql .=
" AND date_lim_reglement < '".$this->db->idate($today).
"'";
5215 if ($mode ==
'supplier') {
5216 $sql .=
" AND entity IN (".getEntity(
'facture_fourn').
")";
5218 $sql .=
" AND entity IN (".getEntity(
'invoice').
")";
5221 dol_syslog(
"getOutstandingBills", LOG_DEBUG);
5222 $resql = $this->db->query($sql);
5224 $outstandingOpened = 0;
5225 $outstandingTotal = 0;
5226 $outstandingTotalIncTax = 0;
5227 $arrayofref = array();
5228 $arrayofrefopened = array();
5229 if ($mode ==
'supplier') {
5230 require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.facture.class.php';
5233 require_once DOL_DOCUMENT_ROOT.
'/compta/facture/class/facture.class.php';
5234 $tmpobject =
new Facture($this->db);
5236 while ($obj = $this->db->fetch_object($resql)) {
5237 $arrayofref[$obj->rowid] = $obj->ref;
5238 $tmpobject->id = $obj->rowid;
5240 if ($obj->status != $tmpobject::STATUS_DRAFT
5241 && !($obj->status == $tmpobject::STATUS_ABANDONED && $obj->close_code ==
'replaced')
5243 $outstandingTotal += $obj->total_ht;
5244 $outstandingTotalIncTax += $obj->total_ttc;
5250 && $obj->status != $tmpobject::STATUS_DRAFT
5251 && $obj->status != $tmpobject::STATUS_ABANDONED
5252 && $obj->status != $tmpobject::STATUS_CLOSED) {
5254 $paiement = $tmpobject->getSommePaiement();
5255 $creditnotes = $tmpobject->getSumCreditNotesUsed();
5256 $deposits = $tmpobject->getSumDepositsUsed();
5258 $remaintopay = ($obj->total_ttc - $paiement - $creditnotes - $deposits);
5259 $outstandingOpened += $remaintopay;
5265 $remainingcreditnote = $tmpobject->getSumFromThisCreditNotesNotUsed();
5266 $remaintopay -= $remainingcreditnote;
5267 $outstandingOpened -= $remainingcreditnote;
5271 $arrayofrefopened[$obj->rowid] = $obj->ref;
5274 return array(
'opened' => $outstandingOpened,
'total_ht' => $outstandingTotal,
'total_ttc' => $outstandingTotalIncTax,
'refs' => $arrayofref,
'refsopened' => $arrayofrefopened);
5276 dol_syslog(
"Sql error ".$this->db->lasterror, LOG_ERR);
5303 $langs->load(
'companies');
5306 return $langs->trans(
"NorProspectNorCustomer");
5307 } elseif ($status == 1) {
5308 return $langs->trans(
"Customer");
5309 } elseif ($status == 2) {
5310 return $langs->trans(
"Prospect");
5311 } elseif ($status == 3) {
5312 return $langs->trans(
"ProspectCustomer");
5330 public function generateDocument($modele, $outputlangs, $hidedetails = 0, $hidedesc = 0, $hideref = 0, $moreparams =
null)
5334 if (!empty($moreparams) && !empty($moreparams[
'use_companybankid'])) {
5335 $modelpath =
"core/modules/bank/doc/";
5337 include_once DOL_DOCUMENT_ROOT.
'/societe/class/companybankaccount.class.php';
5339 $result = $companybankaccount->fetch($moreparams[
'use_companybankid']);
5341 dol_print_error($this->db, $companybankaccount->error, $companybankaccount->errors);
5343 $result = $companybankaccount->commonGenerateDocument($modelpath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref, $moreparams);
5344 $this->last_main_doc = $companybankaccount->last_main_doc;
5351 print $langs->trans(
"Error").
" ".$langs->trans(
"Error_COMPANY_ADDON_PDF_NotDefined");
5356 if (!isset($this->bank_account)) {
5357 require_once DOL_DOCUMENT_ROOT.
'/societe/class/companybankaccount.class.php';
5360 $result = $bac->fetch(0,
'', $this->
id);
5362 $this->bank_account = $bac;
5364 $this->bank_account =
'';
5368 $modelpath =
"core/modules/societe/doc/";
5370 $result = $this->
commonGenerateDocument($modelpath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref, $moreparams);
5390 require_once DOL_DOCUMENT_ROOT.
'/categories/class/categorie.class.php';
5393 if (!in_array($type_categ, array(Categorie::TYPE_CUSTOMER, Categorie::TYPE_SUPPLIER))) {
5394 dol_syslog(__METHOD__.
': Type '.$type_categ.
'is an unknown company category type. Done nothing.', LOG_ERR);
5398 return parent::setCategoriesCommon($categories, $type_categ);
5413 if (!is_array($salesrep)) {
5414 $salesrep = array($salesrep);
5418 $to_add = $salesrep;
5419 if ($onlyAdd ===
false) {
5424 if (is_array($existing)) {
5425 $to_del = array_diff($existing, $salesrep);
5426 $to_add = array_diff($salesrep, $existing);
5433 foreach ($to_del as $del) {
5436 foreach ($to_add as $add) {
5444 return $error ? -1 : 1;
5460 $result = $this->
setValueFrom(
'fk_typent', $typent_id,
'',
null,
'',
'', $user,
'COMPANY_MODIFY');
5463 $this->typent_id = $typent_id;
5464 $this->typent_code =
dol_getIdFromCode($this->db, $this->typent_id,
'c_typent',
'id',
'code');
5485 if ($origin_id == $dest_id) {
5486 dol_syslog(
'Error: Try to merge a thirdparty into itself');
5492 $sql =
'SELECT rowid FROM '.MAIN_DB_PREFIX.
'societe_commerciaux ';
5493 $sql .=
' WHERE fk_soc = '.(int) $dest_id.
' AND fk_user IN ( ';
5494 $sql .=
' SELECT fk_user ';
5495 $sql .=
' FROM '.MAIN_DB_PREFIX.
'societe_commerciaux ';
5496 $sql .=
' WHERE fk_soc = '.(int) $origin_id.
') ';
5498 $resql = $dbs->
query($sql);
5500 $dbs->
query(
'DELETE FROM '.MAIN_DB_PREFIX.
'societe_commerciaux WHERE rowid = '.((
int) $obj->rowid));
5507 'societe_commerciaux',
5510 'societe_remise_except',
5529 global $user, $langs,
$conf;
5533 if ($type ==
'buy') {
5534 $field =
'accountancy_code_buy';
5535 } elseif ($type ==
'sell') {
5536 $field =
'accountancy_code_sell';
5541 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element.
" SET ";
5542 $sql .= $field.
" = '".$this->db->escape($value).
"'";
5543 $sql .=
" WHERE rowid = ".((int) $this->
id);
5545 dol_syslog(get_class($this).
"::".__FUNCTION__, LOG_DEBUG);
5546 $resql = $this->db->query($sql);
5550 include_once DOL_DOCUMENT_ROOT.
'/core/class/interfaces.class.php';
5552 $result = $interface->run_triggers(
'COMPANY_MODIFY', $this, $user, $langs,
$conf);
5554 $this->errors = $interface->errors;
5555 $this->db->rollback();
5560 $this->$field = $value;
5562 $this->db->commit();
5565 $this->error = $this->db->lasterror();
5566 $this->db->rollback();
5579 require_once DOL_DOCUMENT_ROOT.
'/partnership/class/partnership.class.php';
5581 $this->partnerships[] = array();
5595 $selected = (empty($arraydata[
'selected']) ? 0 : $arraydata[
'selected']);
5597 $return =
'<div class="box-flex-item box-flex-grow-zero">';
5598 $return .=
'<div class="info-box info-box-sm">';
5599 $return .=
'<span class="info-box-icon bg-infobox-action">';
5601 $return .=
'</span>';
5602 $return .=
'<div class="info-box-content">';
5603 $return .=
'<div class="info-box-ref inline-block tdoverflowmax125 valignmiddle">'.(method_exists($this,
'getNomUrl') ? $this->
getNomUrl(1) : $this->ref);
5604 $return .=
'</div>';
5605 if (!empty($this->phone)) {
5606 $return .=
'<div class="inline-block valignmiddle">';
5608 $return .=
dol_print_phone($this->phone, $this->country_code, 0, $this->
id,
'tel',
'hidenum',
'phone', $this->phone, 0,
'paddingleft paddingright');
5609 $return .=
'</div>';
5611 if (!empty($this->
email)) {
5612 $return .=
'<div class="inline-block valignmiddle">';
5613 $return .=
dol_print_email($this->
email, 0, $this->
id,
'thirdparty', -1, 1, 2,
'paddingleft paddingright');
5614 $return .=
'</div>';
5616 if ($selected >= 0) {
5617 $return .=
'<input id="cb'.$this->id.
'" class="flat checkforselect fright" type="checkbox" name="toselect[]" value="'.$this->
id.
'"'.($selected ?
' checked="checked"' :
'').
'>';
5619 if (property_exists($this,
'code_client')) {
5620 $return .=
'<br><span class="info-box-label opacitymedium">'.$this->code_client.
'</span>';
5622 if (method_exists($this,
'getLibStatut')) {
5623 $return .=
'<br><div class="info-box-status">'.$this->getLibStatut(3).
'</div>';
5625 $return .=
'</div>';
5626 $return .=
'</div>';
5627 $return .=
'</div>';
5647 $sql =
"SELECT sc.rowid, sc.fk_socpeople as id, sc.fk_c_type_contact";
5648 $sql .=
", t.fk_soc as socid, t.statut as statuscontact";
5649 $sql .=
", t.civility as civility, t.lastname as lastname, t.firstname, t.email";
5650 $sql .=
", tc.source, tc.element, tc.code, tc.libelle as type_label";
5651 $sql .=
" FROM ".$this->db->prefix().
"c_type_contact tc";
5652 $sql .=
", ".$this->db->prefix().
"societe_contacts sc";
5653 $sql .=
" LEFT JOIN ".$this->db->prefix().
"socpeople t on sc.fk_socpeople = t.rowid";
5654 $sql .=
" WHERE sc.fk_soc = ".((int) $this->
id);
5655 $sql .=
" AND sc.fk_c_type_contact = tc.rowid";
5656 if (!empty($element)) {
5657 $sql .=
" AND tc.element = '".$this->db->escape($element).
"'";
5660 $sql .=
" AND tc.code = '".$this->db->escape($code).
"'";
5662 $sql .=
" AND sc.entity IN (".getEntity($this->element).
")";
5663 $sql .=
" AND tc.source = 'external'";
5664 $sql .=
" AND tc.active = 1";
5666 $sql .=
" ORDER BY t.lastname ASC";
5668 dol_syslog(get_class($this).
"::getContacts", LOG_DEBUG);
5669 $resql = $this->db->query($sql);
5671 $num = $this->db->num_rows($resql);
5674 $obj = $this->db->fetch_object($resql);
5677 $transkey =
"TypeContact_".$obj->element.
"_".$obj->source.
"_".$obj->code;
5678 $libelle_type = ($langs->trans($transkey) != $transkey ? $langs->trans($transkey) : $obj->type_label);
5680 'source' => $obj->source,
5681 'socid' => $obj->socid,
5683 'nom' => $obj->lastname,
5684 'civility' => $obj->civility,
5685 'lastname' => $obj->lastname,
5686 'firstname' => $obj->firstname,
5687 'email' => $obj->email,
5688 'login' => (empty($obj->login) ?
'' : $obj->login),
5689 'photo' => (empty($obj->photo) ?
'' : $obj->photo),
5690 'statuscontact' => $obj->statuscontact,
5691 'rowid' => $obj->rowid,
5692 'code' => $obj->code,
5693 'element' => $obj->element,
5694 'libelle' => $libelle_type,
5695 'status' => $obj->statuslink,
5696 'fk_c_type_contact' => $obj->fk_c_type_contact
5699 $tab[$i] = $obj->id;
5707 $this->error = $this->db->lasterror();
5725 global
$conf, $langs, $hookmanager, $user, $action;
5728 $soc_origin =
new Societe($this->db);
5730 dol_syslog(
"mergeCompany merge thirdparty id=".$soc_origin_id.
" (will be deleted) into the thirdparty id=".$this->id);
5732 if (!$error && $soc_origin->fetch($soc_origin_id) < 1) {
5733 $this->error = $langs->trans(
'ErrorRecordNotFound');
5741 $this->client |= $soc_origin->client;
5742 $this->fournisseur |= $soc_origin->fournisseur;
5743 $listofproperties = array(
5744 'address',
'zip',
'town',
'state_id',
'country_id',
'phone',
'phone_mobile',
'fax',
'email',
'socialnetworks',
'url',
'barcode',
5745 'idprof1',
'idprof2',
'idprof3',
'idprof4',
'idprof5',
'idprof6',
5746 'tva_intra',
'effectif_id',
'forme_juridique',
'remise_percent',
'remise_supplier_percent',
'mode_reglement_supplier_id',
'cond_reglement_supplier_id',
'name_bis',
5747 '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',
5748 'code_client',
'code_fournisseur',
'code_compta',
'code_compta_fournisseur',
5749 'model_pdf',
'webservices_url',
'webservices_key',
'accountancy_code_sell',
'accountancy_code_buy',
'typent_id'
5751 foreach ($listofproperties as $property) {
5752 if (empty($this->$property)) {
5753 $this->$property = $soc_origin->$property;
5757 if ($this->typent_id == -1) {
5758 $this->typent_id = $soc_origin->typent_id;
5762 $listofproperties = array(
5763 'note_public',
'note_private'
5765 foreach ($listofproperties as $property) {
5766 $this->$property =
dol_concatdesc($this->$property, $soc_origin->$property);
5770 if (is_array($soc_origin->array_options)) {
5771 foreach ($soc_origin->array_options as $key => $val) {
5772 if (empty($this->array_options[$key])) {
5773 $this->array_options[$key] = $val;
5779 if (empty($this->name_bis) && $this->
name != $soc_origin->name) {
5780 $this->name_bis = $this->name;
5784 include_once DOL_DOCUMENT_ROOT.
'/categories/class/categorie.class.php';
5787 $custcats_ori = $static_cat->containing($soc_origin->id,
'customer',
'id');
5788 $custcats = $static_cat->containing($this->
id,
'customer',
'id');
5789 $custcats = array_merge($custcats, $custcats_ori);
5792 $suppcats_ori = $static_cat->containing($soc_origin->id,
'supplier',
'id');
5793 $suppcats = $static_cat->containing($this->
id,
'supplier',
'id');
5794 $suppcats = array_merge($suppcats, $suppcats_ori);
5798 if ($soc_origin->code_client == $this->code_client
5799 || $soc_origin->code_fournisseur == $this->code_fournisseur
5800 || $soc_origin->barcode == $this->barcode) {
5801 dol_syslog(
"We clean customer and supplier code so we will be able to make the update of target");
5802 $soc_origin->code_client =
'';
5803 $soc_origin->code_fournisseur =
'';
5804 $soc_origin->barcode =
'';
5805 $soc_origin->update($soc_origin->id, $user, 0, 1, 1,
'merge');
5809 $result = $this->
update($this->
id, $user, 0, 1, 1,
'merge');
5818 'Adherent' =>
'/adherents/class/adherent.class.php',
5820 'ActionComm' =>
'/comm/action/class/actioncomm.class.php',
5821 'Propal' =>
'/comm/propal/class/propal.class.php',
5822 'Commande' =>
'/commande/class/commande.class.php',
5823 'Facture' =>
'/compta/facture/class/facture.class.php',
5824 'FactureRec' =>
'/compta/facture/class/facture-rec.class.php',
5825 'LignePrelevement' =>
'/compta/prelevement/class/ligneprelevement.class.php',
5826 'Contact' =>
'/contact/class/contact.class.php',
5827 'Contrat' =>
'/contrat/class/contrat.class.php',
5828 'Expedition' =>
'/expedition/class/expedition.class.php',
5829 'CommandeFournisseur' =>
'/fourn/class/fournisseur.commande.class.php',
5830 'FactureFournisseur' =>
'/fourn/class/fournisseur.facture.class.php',
5831 'FactureFournisseurRec' =>
'/fourn/class/fournisseur.facture-rec.class.php',
5832 'Reception' =>
'/reception/class/reception.class.php',
5833 'SupplierProposal' =>
'/supplier_proposal/class/supplier_proposal.class.php',
5834 'ProductFournisseur' =>
'/fourn/class/fournisseur.product.class.php',
5835 'Product' =>
'/product/class/product.class.php',
5837 'Project' =>
'/projet/class/project.class.php',
5838 'User' =>
'/user/class/user.class.php',
5839 'Account' =>
'/compta/bank/class/account.class.php',
5840 'ConferenceOrBoothAttendee' =>
'/eventorganization/class/conferenceorboothattendee.class.php',
5841 'Societe' =>
'/societe/class/societe.class.php',
5844 if ($this->db->DDLListTables(
$conf->db->name, $this->db->prefix().
'delivery')) {
5845 $objects[
'Delivery'] =
'/delivery/class/delivery.class.php';
5847 if ($this->db->DDLListTables(
$conf->db->name, $this->db->prefix().
'mrp_mo')) {
5848 $objects[
'Mo'] =
'/mrp/class/mo.class.php';
5850 if ($this->db->DDLListTables(
$conf->db->name, $this->db->prefix().
'don')) {
5851 $objects[
'Don'] =
'/don/class/don.class.php';
5853 if ($this->db->DDLListTables(
$conf->db->name, $this->db->prefix().
'partnership')) {
5854 $objects[
'PartnerShip'] =
'/partnership/class/partnership.class.php';
5856 if ($this->db->DDLListTables(
$conf->db->name, $this->db->prefix().
'fichinter')) {
5857 $objects[
'Fichinter'] =
'/fichinter/class/fichinter.class.php';
5859 if ($this->db->DDLListTables(
$conf->db->name, $this->db->prefix().
'ticket')) {
5860 $objects[
'Ticket'] =
'/ticket/class/ticket.class.php';
5864 foreach ($objects as $object_name => $object_file) {
5874 require_once DOL_DOCUMENT_ROOT.$object_file;
5876 if (!$error && !$object_name::replaceThirdparty($this->db, $soc_origin->id, $this->id)) {
5878 $this->error = $this->db->lasterror();
5886 $parameters = array(
'soc_origin' => $soc_origin->id,
'soc_dest' => $this->id);
5887 $reshook = $hookmanager->executeHooks(
'replaceThirdparty', $parameters, $this, $action);
5890 $this->error = $hookmanager->error;
5891 $this->errors = $hookmanager->errors;
5898 $this->context = array(
'merge' => 1,
'mergefromid' => $soc_origin->id,
'mergefromname' => $soc_origin->name);
5901 $result = $this->
call_trigger(
'COMPANY_MODIFY', $user);
5910 if ($soc_origin->delete($soc_origin->id, $user) < 1) {
5911 $this->error = $soc_origin->error;
5912 $this->errors = $soc_origin->errors;
5920 if (!empty(
$conf->societe->multidir_output[$this->entity])) {
5921 $srcdir =
$conf->societe->multidir_output[$this->entity].
"/".$soc_origin->id;
5922 $destdir =
$conf->societe->multidir_output[$this->entity].
"/".$this->id;
5926 foreach ($dirlist as $filetomove) {
5927 $destfile = $destdir.
'/'.$filetomove[
'relativename'];
5929 dol_move($filetomove[
'fullname'], $destfile,
'0', 0, 0, 1);
5937 $this->db->commit();
5940 $langs->load(
"errors");
5941 $this->error = $langs->trans(
'ErrorsThirdpartyMerge');
5942 $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.
call_trigger($triggerName, $user)
Call trigger based on this instance.
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)
getContacts($list=0, $code='', $element='')
Get array of all contacts for a society (stored in societe_contacts instead of element_contacts for a...
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.
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.
setCategories($categories, $type_categ)
Sets object to supplied categories.
useRevenueStamp()
Check if we must use revenue stamps feature or not according to country (country of $mysoc in most ca...
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.
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)
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.
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.
LibProspLevel($fk_prospectlevel)
Return label of prospect level.
set_remise_supplier($remise, $note, User $user)
Defines the company as a customer.
useLocalTax($localTaxNum=0)
Check if we must use localtax feature or not according to country (country of $mysoc in most cases).
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.
id_prof_check($idprof, $soc)
Check the validity of a professional identifier according to the country of the company (siren,...
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=0)
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_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.
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_print_phone($phone, $countrycode='', $cid=0, $socid=0, $addlink='', $separ=" ", $withpicto='', $titlealt='', $adddivfloat=0, $morecss='paddingright')
Format phone numbers according to country.
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.
dol_now($mode='auto')
Return date for now.
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, $cid=0, $socid=0, $addlink=0, $max=64, $showinvalid=1, $withpicto=0, $morecss='paddingrightonly')
Show EMail link formatted for HTML output.
dolGetStatus($statusLabel='', $statusLabelShort='', $html='', $statusType='status0', $displayMode=0, $url='', $params=array())
Output the badge of a status.
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.
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.
global $conf
The following vars must be defined: $type2label $form $conf, $lang, The following vars may also be de...
isValidSiren($siren)
Check the syntax validity of a SIREN.
isValidTinForPT($str)
Check the syntax validity of a Portuguese (PT) Tax Identification Number (TIN).
isValidSiret($siret)
Check the syntax validity of a SIRET.
isValidTinForES($str)
Check the syntax validity of a Spanish (ES) Tax Identification Number (TIN), where:
isValidTinForBE($str)
Check the syntax validity of a Belgium (BE) Tax Identification Number (TIN).
isValidTinForDZ($str)
Check the syntax validity of an Algerian (DZ) Tax Identification Number (TIN).
$conf db name
Only used if Module[ID]Name translation string is not found.