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->total_ttc = (float)
price2num($remise,
'MT');
2765 $discount->total_ht = (float)
price2num((
float) $remise / (1 + (float) $vatrate / 100),
'MT');
2766 $discount->total_tva = (float)
price2num((
float) $discount->total_ttc - (float) $discount->total_ht,
'MT');
2768 $discount->multicurrency_total_ttc = (float)
price2num((
float) $remise * (float) $discount->multicurrency_tx,
'MT');
2769 $discount->multicurrency_total_ht = (float)
price2num(((
float) $remise / (1 + (float) $vatrate / 100)) * (
float) $discount->multicurrency_tx,
'MT');
2770 $discount->multicurrency_total_tva = (float)
price2num(((
float) $discount->total_ttc - (float) $discount->total_ht) * (float) $discount->multicurrency_tx,
'MT');
2772 $discount->total_ht = (float)
price2num($remise,
'MT');
2773 $discount->total_tva = (float)
price2num((
float) $remise * (float) $vatrate / 100,
'MT');
2774 $discount->total_ttc = (float)
price2num((
float) $discount->total_ht + (float) $discount->total_tva,
'MT');
2776 $discount->multicurrency_total_ht = (float)
price2num((
float) $remise * (float) $discount->multicurrency_tx,
'MT');
2777 $discount->multicurrency_total_tva = (float)
price2num(((
float) $remise * (float) $vatrate / 100) * (float) $discount->multicurrency_tx,
'MT');
2778 $discount->multicurrency_total_ttc = (float)
price2num(((
float) $discount->total_ht + (float) $discount->total_tva) * (float) $discount->multicurrency_tx,
'MT');
2782 $discount->amount_ht = $discount->total_ht;
2783 $discount->amount_tva = $discount->total_tva;
2784 $discount->amount_ttc = $discount->total_ttc;
2785 $discount->multicurrency_amount_ht = $discount->multicurrency_total_ht;
2786 $discount->multicurrency_amount_tva = $discount->multicurrency_total_tva;
2787 $discount->multicurrency_amount_ttc = $discount->multicurrency_total_ttc;
2790 $discount->tva_tx = (float)
price2num($vatrate);
2791 $discount->vat_src_code = $vat_src_code;
2793 $discount->description = $desc;
2795 $result = $discount->create($user);
2799 $this->error = $discount->error;
2818 require_once DOL_DOCUMENT_ROOT.
'/core/class/discount.class.php';
2821 $result = $discountstatic->getAvailableDiscounts($this, $user, $filter, $maxvalue, $discount_type);
2825 $this->error = $discountstatic->error;
2843 $reparray = array();
2845 $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";
2846 $sql .=
", u.office_fax, u.user_mobile, u.personal_mobile";
2847 $sql .=
" FROM ".MAIN_DB_PREFIX.
"societe_commerciaux as sc, ".MAIN_DB_PREFIX.
"user as u";
2849 if (isModEnabled(
'multicompany') &&
getDolGlobalString(
'MULTICOMPANY_TRANSVERSE_MODE')) {
2850 $sql .=
" WHERE u.rowid IN (SELECT ug.fk_user FROM ".$this->db->prefix().
"usergroup_user as ug WHERE ug.entity IN (".
getEntity(
'usergroup').
"))";
2852 $sql .=
" WHERE entity IN (0, ".((int)
$conf->entity).
")";
2855 $sql .=
" AND u.rowid = sc.fk_user AND sc.fk_soc = ".((int) $this->
id);
2856 if (empty($sortfield)) {
2857 $sortfield =
'u.lastname,u.firstname';
2859 if (empty($sortorder)) {
2860 $sortorder = str_repeat(
'ASC,', count(explode(
',', $sortfield)) - 1) .
'ASC';
2862 $sql .= $this->db->order($sortfield, $sortorder);
2864 $resql = $this->db->query($sql);
2866 $num = $this->db->num_rows($resql);
2869 $obj = $this->db->fetch_object($resql);
2872 $reparray[$i][
'id'] = (int) $obj->rowid;
2873 $reparray[$i][
'lastname'] = $obj->lastname;
2874 $reparray[$i][
'firstname'] = $obj->firstname;
2875 $reparray[$i][
'email'] = $obj->email;
2876 $reparray[$i][
'phone'] = $obj->office_phone;
2877 $reparray[$i][
'office_phone'] = $obj->office_phone;
2878 $reparray[$i][
'office_fax'] = $obj->office_fax;
2879 $reparray[$i][
'user_mobile'] = $obj->user_mobile;
2880 $reparray[$i][
'personal_mobile'] = $obj->personal_mobile;
2881 $reparray[$i][
'job'] = $obj->job;
2882 $reparray[$i][
'statut'] = $obj->status;
2883 $reparray[$i][
'status'] = $obj->status;
2884 $reparray[$i][
'entity'] = $obj->entity;
2885 $reparray[$i][
'login'] = $obj->login;
2886 $reparray[$i][
'photo'] = $obj->photo;
2887 $reparray[$i][
'gender'] = $obj->gender;
2889 $reparray[] = (int) $obj->rowid;
2912 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"societe";
2913 $sql .=
" SET price_level = ".((int) $price_level);
2914 $sql .=
" WHERE rowid = ".((int) $this->
id);
2916 if (!$this->db->query($sql)) {
2921 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"societe_prices";
2922 $sql .=
" (datec, fk_soc, price_level, fk_user_author)";
2923 $sql .=
" VALUES ('".$this->db->idate($now).
"', ".((int) $this->
id).
", ".((int) $price_level).
", ".((int) $user->id).
")";
2925 if (!$this->db->query($sql)) {
2947 if ($this->
id > 0 && $commid > 0) {
2951 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"societe_commerciaux";
2952 $sql .=
" WHERE fk_soc = ".((int) $this->
id).
" AND fk_user = ".((int) $commid);
2954 $resql = $this->db->query($sql);
2956 dol_syslog(get_class($this).
"::add_commercial Error ".$this->db->lasterror());
2962 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"societe_commerciaux";
2963 $sql .=
" (fk_soc, fk_user)";
2964 $sql .=
" VALUES (".((int) $this->
id).
", ".((int) $commid).
")";
2966 $resql = $this->db->query($sql);
2968 dol_syslog(get_class($this).
"::add_commercial Error ".$this->db->lasterror());
2974 $this->context = array(
'commercial_modified' => $commid);
2976 $result = $this->
call_trigger(
'COMPANY_LINK_SALE_REPRESENTATIVE', $user);
2983 $this->db->commit();
2986 $this->db->rollback();
3006 $this->context = array(
'commercial_modified' => $commid);
3008 $result = $this->
call_trigger(
'COMPANY_UNLINK_SALE_REPRESENTATIVE', $user);
3013 if ($this->
id > 0 && $commid > 0) {
3014 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"societe_commerciaux ";
3015 $sql .=
" WHERE fk_soc = ".((int) $this->
id).
" AND fk_user = ".((int) $commid);
3017 if (!$this->db->query($sql)) {
3019 dol_syslog(get_class($this).
"::del_commercial Erreur");
3039 global
$conf, $langs, $user;
3041 $langs->loadLangs([
'companies',
'commercial']);
3045 $option = $params[
'option'] ??
'';
3046 $nofetch = !empty($params[
'nofetch']);
3048 $noaliasinname = (empty($params[
'noaliasinname']) ? 0 : $params[
'noaliasinname']);
3051 return [
'optimize' => $langs->trans(
"ShowCompany")];
3054 if (!empty($this->logo) && class_exists(
'Form')) {
3055 $photo =
'<div class="photointooltip floatright">';
3056 $photo .=
Form::showphoto(
'societe', $this, 0, 40, 0,
'photoref',
'mini', 0);
3058 $datas[
'photo'] = $photo;
3065 $datas[
'divopen'] =
'<div class="centpercent">';
3067 if ($option ==
'customer' || $option ==
'compta' || $option ==
'category') {
3068 $datas[
'picto'] =
img_picto(
'', $this->picto).
' <u class="paddingrightonly">'.$langs->trans(
"Customer").
'</u>';
3069 } elseif ($option ==
'prospect' && !
getDolGlobalString(
'SOCIETE_DISABLE_PROSPECTS')) {
3070 $datas[
'picto'] =
img_picto(
'', $this->picto).
' <u class="paddingrightonly">'.$langs->trans(
"Prospect").
'</u>';
3071 } elseif ($option ==
'supplier' || $option ==
'category_supplier') {
3072 $datas[
'picto'] =
img_picto(
'', $this->picto).
' <u class="paddingrightonly">'.$langs->trans(
"Supplier").
'</u>';
3073 } elseif ($option ==
'agenda') {
3074 $datas[
'picto'] =
img_picto(
'', $this->picto).
' <u class="paddingrightonly">'.$langs->trans(
"ThirdParty").
'</u>';
3075 } elseif ($option ==
'project') {
3076 $datas[
'picto'] =
img_picto(
'', $this->picto).
' <u class="paddingrightonly">'.$langs->trans(
"ThirdParty").
'</u>';
3077 } elseif ($option ==
'margin') {
3078 $datas[
'picto'] =
img_picto(
'', $this->picto).
' <u class="paddingrightonly">'.$langs->trans(
"ThirdParty").
'</u>';
3079 } elseif ($option ==
'contact') {
3080 $datas[
'picto'] =
img_picto(
'', $this->picto).
' <u class="paddingrightonly">'.$langs->trans(
"ThirdParty").
'</u>';
3081 } elseif ($option ==
'ban') {
3082 $datas[
'picto'] =
img_picto(
'', $this->picto).
' <u class="paddingrightonly">'.$langs->trans(
"ThirdParty").
'</u>';
3086 if (empty($datas[
'picto'])) {
3087 $datas[
'picto'] =
img_picto(
'', $this->picto).
' <u class="paddingrightonly">'.$langs->trans(
"ThirdParty").
'</u>';
3089 if (isset($this->
status)) {
3090 $datas[
'status'] =
' '.$this->getLibStatut(5);
3092 if (isset($this->client) && isset($this->fournisseur)) {
3093 $datas[
'type'] =
' ' . $this->
getTypeUrl(1,
'', 0,
'span');
3096 if (!empty($this->name_alias) && empty($noaliasinname)) {
3099 if (!empty($this->
email)) {
3100 $datas[
'email'] =
'<br>'.img_picto(
'',
'email',
'class="pictofixedwidth"').$this->email;
3102 if (!empty($this->url)) {
3103 $datas[
'url'] =
'<br>'.img_picto(
'',
'globe',
'class="pictofixedwidth"').$this->url;
3105 if (!empty($this->phone) || !empty($this->phone_mobile) || !empty($this->fax)) {
3106 $phonelist = array();
3108 $phonelist[] =
dol_print_phone($this->phone, $this->country_code, $this->
id, 0,
'',
' ',
'phone');
3111 if ($this->phone_mobile) {
3112 $phonelist[] =
dol_print_phone($this->phone_mobile, $this->country_code, $this->
id, 0,
'',
' ',
'mobile');
3115 $phonelist[] =
dol_print_phone($this->fax, $this->country_code, $this->
id, 0,
'',
' ',
'fax');
3117 $datas[
'phonelist'] =
'<br>'.implode(
' ', $phonelist);
3121 $datas[
'address'] =
'<br><b>'.$langs->trans(
"Address").
':</b> '.
dol_format_address($this, 1,
', ', $langs);
3122 } elseif (!empty($this->country_code)) {
3123 $datas[
'address'] =
'<br><b>'.$langs->trans(
'Country').
':</b> '.$this->country_code;
3125 if (!empty($this->tva_intra) || (
getDolGlobalString(
'SOCIETE_SHOW_FIELD_IN_TOOLTIP') && strpos(
$conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP,
'vatnumber') !==
false)) {
3126 $datas[
'vatintra'] =
'<br><b>'.$langs->trans(
'VATIntra').
':</b> '.
dol_escape_htmltag($this->tva_intra);
3130 if (strpos(
$conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP,
'profid1') !==
false && $langs->trans(
'ProfId1'.$this->country_code) !=
'-') {
3131 $datas[
'profid1'] =
'<br><b>'.$langs->trans(
'ProfId1'.$this->country_code).
':</b> '.$this->idprof1;
3133 if (strpos(
$conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP,
'profid2') !==
false && $langs->trans(
'ProfId2'.$this->country_code) !=
'-') {
3134 $datas[
'profid2'] =
'<br><b>'.$langs->trans(
'ProfId2'.$this->country_code).
':</b> '.$this->idprof2;
3136 if (strpos(
$conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP,
'profid3') !==
false && $langs->trans(
'ProfId3'.$this->country_code) !=
'-') {
3137 $datas[
'profid3'] =
'<br><b>'.$langs->trans(
'ProfId3'.$this->country_code).
':</b> '.$this->idprof3;
3139 if (strpos(
$conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP,
'profid4') !==
false && $langs->trans(
'ProfId4'.$this->country_code) !=
'-') {
3140 $datas[
'profid4'] =
'<br><b>'.$langs->trans(
'ProfId4'.$this->country_code).
':</b> '.$this->idprof4;
3142 if (strpos(
$conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP,
'profid5') !==
false && $langs->trans(
'ProfId5'.$this->country_code) !=
'-') {
3143 $datas[
'profid5'] =
'<br><b>'.$langs->trans(
'ProfId5'.$this->country_code).
':</b> '.$this->idprof5;
3145 if (strpos(
$conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP,
'profid6') !==
false && $langs->trans(
'ProfId6'.$this->country_code) !=
'-') {
3146 $datas[
'profid6'] =
'<br><b>'.$langs->trans(
'ProfId6'.$this->country_code).
':</b> '.$this->idprof6;
3150 $datas[
'separator'] =
'<br>';
3152 if (!empty($this->code_client) && ($this->client == 1 || $this->client == 3)) {
3153 $datas[
'customercode'] =
'<br><b>'.$langs->trans(
'CustomerCode').
':</b> '.$this->code_client;
3155 if (isModEnabled(
'accounting') && ($this->client == 1 || $this->client == 3)) {
3156 $langs->load(
'compta');
3157 $datas[
'accountancycustomercode'] =
'<br><b>'.$langs->trans(
'CustomerAccountancyCode').
':</b> '.$this->code_compta_client;
3160 if (!$nofetch && isModEnabled(
'category') && $this->client) {
3161 require_once DOL_DOCUMENT_ROOT .
'/categories/class/categorie.class.php';
3162 $form =
new Form($this->db);
3163 $datas[
'categories_customer'] =
'<br>' . $form->showCategories($this->
id, Categorie::TYPE_CUSTOMER, 1, 1);
3165 if (!empty($this->code_fournisseur) && $this->fournisseur) {
3166 $datas[
'suppliercode'] =
'<br><b>'.$langs->trans(
'SupplierCode').
':</b> '.$this->code_fournisseur;
3168 if (isModEnabled(
'accounting') && $this->fournisseur) {
3169 $langs->load(
'compta');
3170 $datas[
'accountancysuppliercode'] =
'<br><b>'.$langs->trans(
'SupplierAccountancyCode').
':</b> '.$this->code_compta_fournisseur;
3173 if (!$nofetch && isModEnabled(
'category') && $this->fournisseur) {
3174 require_once DOL_DOCUMENT_ROOT .
'/categories/class/categorie.class.php';
3175 $form =
new Form($this->db);
3176 $datas[
'categories_supplier'] =
'<br>' . $form->showCategories($this->
id, Categorie::TYPE_SUPPLIER, 1, 1);
3179 $datas[
'divclose'] =
'</div>';
3197 public function getNomUrl($withpicto = 0, $option =
'', $maxlen = 0, $notooltip = 0, $save_lastsearch_value = -1, $noaliasinname = 0, $target =
'', $morecss =
'')
3199 global
$conf, $langs, $hookmanager, $user;
3201 if (!empty(
$conf->dol_no_mouse_hover)) {
3205 $name = $this->
name ? $this->
name : $this->nom;
3207 if (
getDolGlobalString(
'SOCIETE_ON_SEARCH_AND_LIST_GO_ON_CUSTOMER_OR_SUPPLIER_CARD')) {
3208 if (empty($option) && $this->client > 0) {
3209 $option =
'customer';
3211 if (empty($option) && $this->fournisseur > 0) {
3212 $option =
'supplier';
3218 if (($this->client) && (!empty($this->code_client)) && (
getDolGlobalInt(
'SOCIETE_ADD_REF_IN_LIST') == 1 ||
getDolGlobalInt(
'SOCIETE_ADD_REF_IN_LIST') == 2)) {
3219 $code = $this->code_client.
' - ';
3222 if (($this->fournisseur) && (!empty($this->code_fournisseur)) && (
getDolGlobalInt(
'SOCIETE_ADD_REF_IN_LIST') == 1 ||
getDolGlobalInt(
'SOCIETE_ADD_REF_IN_LIST') == 3)) {
3223 $code .= $this->code_fournisseur.
' - ';
3228 $name = $code.
' '.$name;
3235 if (!empty($this->name_alias) && empty($noaliasinname)) {
3236 $name .=
' ('.$this->name_alias.
')';
3242 'objecttype' => $this->element,
3243 'option' => $option,
3246 $classfortooltip =
'classfortooltip';
3249 $classfortooltip =
'classforajaxtooltip';
3250 $dataparams =
' data-params="'.dol_escape_htmltag(json_encode($params)).
'"';
3259 if ($option ==
'customer' || $option ==
'compta' || $option ==
'category') {
3260 $linkstart =
'<a href="'.DOL_URL_ROOT.
'/comm/card.php?socid='.$this->id;
3261 } elseif ($option ==
'prospect' && !
getDolGlobalString(
'SOCIETE_DISABLE_PROSPECTS')) {
3262 $linkstart =
'<a href="'.DOL_URL_ROOT.
'/comm/card.php?socid='.$this->id;
3263 } elseif ($option ==
'supplier' || $option ==
'category_supplier') {
3264 $linkstart =
'<a href="'.DOL_URL_ROOT.
'/fourn/card.php?socid='.$this->id;
3265 } elseif ($option ==
'agenda') {
3266 $linkstart =
'<a href="'.DOL_URL_ROOT.
'/societe/agenda.php?socid='.$this->id;
3267 } elseif ($option ==
'project') {
3268 $linkstart =
'<a href="'.DOL_URL_ROOT.
'/societe/project.php?socid='.$this->id;
3269 } elseif ($option ==
'margin') {
3270 $linkstart =
'<a href="'.DOL_URL_ROOT.
'/margin/tabs/thirdpartyMargins.php?socid='.$this->
id.
'&type=1';
3271 } elseif ($option ==
'contact') {
3272 $linkstart =
'<a href="'.DOL_URL_ROOT.
'/societe/contact.php?socid='.$this->id;
3273 } elseif ($option ==
'ban') {
3274 $linkstart =
'<a href="'.DOL_URL_ROOT.
'/societe/paymentmodes.php?socid='.$this->id;
3278 if (empty($linkstart)) {
3279 $linkstart =
'<a href="'.DOL_URL_ROOT.
'/societe/card.php?socid='.$this->id;
3283 $linkstart .= (!empty($this->canvas) ?
'&canvas='.$this->canvas :
'');
3285 $add_save_lastsearch_values = ($save_lastsearch_value == 1 ? 1 : 0);
3286 if ($save_lastsearch_value == -1 && isset($_SERVER[
"PHP_SELF"]) && preg_match(
'/list\.php/', $_SERVER[
"PHP_SELF"])) {
3287 $add_save_lastsearch_values = 1;
3289 if ($add_save_lastsearch_values) {
3290 $linkstart .=
'&save_lastsearch_values=1';
3295 if (empty($notooltip)) {
3297 $label = $langs->trans(
"ShowCompany");
3298 $linkclose .=
' alt="'.dolPrintHTMLForAttribute($label).
'"';
3300 $linkclose .= ($label ?
' title="'.dolPrintHTMLForAttribute($label).
'"' :
' title="tocomplete"');
3301 $linkclose .= $dataparams.
' class="'.$classfortooltip.($morecss ?
' '.$morecss :
'').
' refurl valignmiddle"';
3302 $target_value = array(
'_self',
'_blank',
'_parent',
'_top');
3303 if (in_array($target, $target_value)) {
3304 $linkclose .=
' target="'.dol_escape_htmltag($target).
'"';
3307 $linkclose .=
' class="valignmiddle'.($morecss ?
' '.$morecss :
'').
'"';
3309 $linkstart .= $linkclose.
'>';
3312 if (!$user->hasRight(
'societe',
'client',
'voir') && $user->socid > 0 && $this->id != $user->socid) {
3317 $result .= $linkstart;
3319 $result .=
img_object(($notooltip ?
'' : $label), ($this->picto ? $this->picto :
'generic'), (
' class="'.(($withpicto != 2) ?
'paddingright' :
'').
'"'), 0, 0, $notooltip ? 0 : 1);
3321 if ($withpicto != 2) {
3324 $result .= $linkend;
3327 $hookmanager->initHooks(array(
'thirdpartydao'));
3328 $parameters = array(
3330 'getnomurl' => &$result,
3331 'withpicto ' => $withpicto,
3332 'option' => $option,
3333 'maxlen' => $maxlen,
3334 'notooltip' => $notooltip,
3335 'save_lastsearch_value' => $save_lastsearch_value
3337 $reshook = $hookmanager->executeHooks(
'getNomUrl', $parameters, $this, $action);
3339 $result = $hookmanager->resPrint;
3341 $result .= $hookmanager->resPrint;
3356 public function getTypeUrl($withpicto = 0, $option =
'', $notooltip = 0, $tag =
'a')
3361 if (empty($option) || preg_match(
'/prospect/', $option)) {
3362 if (($this->client == 2 || $this->client == 3) && !
getDolGlobalString(
'SOCIETE_DISABLE_PROSPECTS')) {
3363 $s .=
'<'.$tag.
' class="customer-back opacitymedium" title="'.
dolPrintHTMLForAttribute($langs->trans(
"Prospect")).
'"';
3364 $s .= $tag ==
'a' ?
' href="'.DOL_URL_ROOT.
'/comm/card.php?socid='.$this->
id.
'"' :
'';
3365 $s .=
'>'.dol_substr($langs->trans(
"Prospect"), 0, 1).
'</'.$tag.
'>';
3368 if (empty($option) || preg_match(
'/customer/', $option)) {
3369 if (($this->client == 1 || $this->client == 3) && !
getDolGlobalString(
'SOCIETE_DISABLE_CUSTOMERS')) {
3371 $s .= $tag ==
'a' ?
' href="'.DOL_URL_ROOT.
'/comm/card.php?socid='.$this->
id.
'"' :
'';
3372 $s .=
'>'.dol_substr($langs->trans(
"Customer"), 0, 1).
'</'.$tag.
'>';
3375 if (empty($option) || preg_match(
'/supplier/', $option)) {
3376 if ((isModEnabled(
"supplier_order") || isModEnabled(
"supplier_invoice")) && $this->fournisseur) {
3378 $s .= $tag ==
'a' ?
' href="'.DOL_URL_ROOT.
'/fourn/card.php?socid='.$this->
id.
'"' :
'';
3379 $s .=
'>'.dol_substr($langs->trans(
"Supplier"), 0, 1).
'</'.$tag.
'>';
3410 $langs->load(
'companies');
3412 $statusType =
'status4';
3414 $statusType =
'status6';
3417 if (empty($this->labelStatus) || empty($this->labelStatusShort)) {
3418 $this->labelStatus[0] = $langs->transnoentitiesnoconv(
"ActivityCeased");
3419 $this->labelStatus[1] = $langs->transnoentitiesnoconv(
"InActivity");
3420 $this->labelStatusShort[0] = $langs->transnoentitiesnoconv(
"ActivityCeased");
3421 $this->labelStatusShort[1] = $langs->transnoentitiesnoconv(
"InActivity");
3424 return dolGetStatus($this->labelStatus[$status], $this->labelStatusShort[$status],
'', $statusType, $mode);
3441 if ($this->
email && $addthirdparty) {
3442 if (empty($this->
name)) {
3443 $this->
name = $this->nom;
3445 $contact_emails[
'thirdparty'] = ($addthirdparty == 2 ?
'<span class="opacitymedium">' :
'').$langs->transnoentitiesnoconv(
"ThirdParty").($addthirdparty == 2 ?
'</span>' :
'').
': '.
dol_trunc($this->
name, 16).
" <".$this->
email.
">";
3449 return $contact_emails;
3465 if (!empty($this->phone)) {
3466 if (empty($this->
name)) {
3467 $this->
name = $this->nom;
3470 $contact_phone[
'thirdparty'] = $langs->transnoentitiesnoconv(
"ThirdParty").
': '.
dol_trunc($this->
name, 16).
" <".$this->phone.
">";
3472 return $contact_phone;
3488 $contact_property = array();
3491 $sql =
"SELECT rowid, email, statut as status, phone_mobile, lastname, poste, firstname";
3492 $sql .=
" FROM ".MAIN_DB_PREFIX.
"socpeople";
3493 $sql .=
" WHERE fk_soc = ".((int) $this->
id);
3494 $sql .=
" AND entity IN (".getEntity($this->element).
")";
3495 $sql .=
" ORDER BY lastname, firstname";
3497 $resql = $this->db->query($sql);
3499 $nump = $this->db->num_rows($resql);
3503 if ($mode ==
'email') {
3509 while ($i < $nump) {
3510 $obj = $this->db->fetch_object($resql);
3511 if ($mode ==
'email') {
3512 $property = $obj->email;
3513 } elseif ($mode ==
'mobile') {
3514 $property = $obj->phone_mobile;
3516 $property = $obj->$mode;
3520 if ($obj->status == 1 || empty($hidedisabled)) {
3521 if (empty($property)) {
3522 if ($mode ==
'email') {
3523 $property = $langs->transnoentitiesnoconv(
"NoEMail");
3524 } elseif ($mode ==
'mobile') {
3525 $property = $langs->transnoentitiesnoconv(
"NoMobilePhone");
3529 if (!empty($obj->poste)) {
3530 $contact_property[$obj->rowid] = trim(
dolGetFirstLastname($obj->firstname, $obj->lastname)).($obj->poste ?
" - ".$obj->poste :
"").(($mode !=
'poste' && $property) ?
" ".$sepa.$property.$sepb :
'');
3532 $contact_property[$obj->rowid] = trim(
dolGetFirstLastname($obj->firstname, $obj->lastname)).(($mode !=
'poste' && $property) ?
" ".$sepa.$property.$sepb :
'');
3541 return $contact_property;
3554 $contacts = array();
3556 $sql =
"SELECT rowid, lastname, firstname FROM ".MAIN_DB_PREFIX.
"socpeople WHERE fk_soc = ".((int) $this->
id);
3557 $resql = $this->db->query($sql);
3559 $nump = $this->db->num_rows($resql);
3562 while ($i < $nump) {
3563 $obj = $this->db->fetch_object($resql);
3583 require_once DOL_DOCUMENT_ROOT.
'/contact/class/contact.class.php';
3584 $contacts = array();
3586 $sql =
"SELECT rowid FROM ".MAIN_DB_PREFIX.
"socpeople WHERE fk_soc = ".((int) $this->
id);
3587 $resql = $this->db->query($sql);
3589 $nump = $this->db->num_rows($resql);
3592 while ($i < $nump) {
3593 $obj = $this->db->fetch_object($resql);
3594 $contact =
new Contact($this->db);
3595 $contact->fetch($obj->rowid);
3596 $contacts[] = $contact;
3617 $contact_property =
'';
3619 if (empty($rowid)) {
3623 $sql =
"SELECT rowid, email, phone_mobile, lastname, firstname";
3624 $sql .=
" FROM ".MAIN_DB_PREFIX.
"socpeople";
3625 $sql .=
" WHERE rowid = ".((int) $rowid);
3627 $resql = $this->db->query($sql);
3629 $nump = $this->db->num_rows($resql);
3632 $obj = $this->db->fetch_object($resql);
3634 if ($mode ==
'email') {
3636 } elseif ($mode ==
'mobile') {
3637 $contact_property = $obj->phone_mobile;
3640 return $contact_property;
3659 require_once DOL_DOCUMENT_ROOT.
'/societe/class/companybankaccount.class.php';
3663 $bac->fetch(0,
'', $this->
id);
3666 if ($mode ==
'label') {
3667 return $bac->getRibLabel(
true);
3668 } elseif ($mode ==
'rum') {
3669 if (empty($bac->rum)) {
3670 require_once DOL_DOCUMENT_ROOT.
'/compta/prelevement/class/bonprelevement.class.php';
3672 $bac->fetch_thirdparty();
3673 $bac->rum = $prelevement->buildRumNumber($bac->thirdparty->code_client, $bac->datec, (
string) $bac->id);
3676 } elseif ($mode ==
'format') {
3677 return $bac->frstrecur;
3679 return 'BadParameterToFunctionDisplayRib';
3695 require_once DOL_DOCUMENT_ROOT.
'/societe/class/companybankaccount.class.php';
3696 $sql =
"SELECT rowid FROM ".MAIN_DB_PREFIX.
"societe_rib WHERE type = 'ban' AND fk_soc = ".((int) $this->
id);
3697 $result = $this->db->query($sql);
3699 $this->error = $this->db->lasterror();
3700 $this->errors[] = $this->db->lasterror();
3703 $num_rows = $this->db->num_rows($result);
3704 $rib_array = array();
3706 while ($obj = $this->db->fetch_object($result)) {
3708 $rib->fetch($obj->rowid);
3709 $rib_array[] = $rib;
3722 require_once DOL_DOCUMENT_ROOT.
'/societe/class/companybankaccount.class.php';
3723 $sql =
"SELECT rowid FROM ".MAIN_DB_PREFIX.
"societe_rib WHERE type = 'ban' AND default_rib = 1 AND fk_soc = ". (int) $this->
id;
3724 $resql = $this->db->query($sql);
3726 $this->error = $this->db->lasterror();
3727 $this->errors[] = $this->db->lasterror();
3730 $num_rows = $this->db->num_rows($resql);
3731 $rib_array = array();
3733 while ($obj = $this->db->fetch_object($resql)) {
3751 public function get_codeclient($objsoc =
null, $type = 0)
3758 $dirsociete = array_merge(array(
'/core/modules/societe/'),
$conf->modules_parts[
'societe']);
3759 foreach ($dirsociete as $dirroot) {
3766 $mod =
new $module($this->db);
3767 '@phan-var-force ModeleThirdPartyCode $mod';
3769 $this->code_client = $mod->getNextValue($objsoc, $type);
3770 $this->prefixCustomerIsRequired = $mod->prefixIsRequired;
3772 dol_syslog(get_class($this).
"::get_codeclient code_client=".$this->code_client.
" module=".$module);
3785 public function get_codefournisseur($objsoc =
null, $type = 1)
3792 $dirsociete = array_merge(array(
'/core/modules/societe/'),
$conf->modules_parts[
'societe']);
3793 foreach ($dirsociete as $dirroot) {
3800 $mod =
new $module($this->db);
3801 '@phan-var-force ModeleThirdPartyCode $mod';
3803 $this->code_fournisseur = $mod->getNextValue($objsoc, $type);
3805 dol_syslog(get_class($this).
"::get_codefournisseur code_fournisseur=".$this->code_fournisseur.
" module=".$module);
3823 $dirsociete = array_merge(array(
'/core/modules/societe/'),
$conf->modules_parts[
'societe']);
3824 foreach ($dirsociete as $dirroot) {
3831 $mod =
new $module($this->db);
3832 '@phan-var-force ModeleThirdPartyCode $mod';
3834 dol_syslog(get_class($this).
"::codeclient_modifiable code_client=".$this->code_client.
" module=".$module);
3835 if ($mod->code_modifiable_null && !$this->code_client) {
3838 if ($mod->code_modifiable_invalide && $this->check_codeclient() < 0) {
3841 if ($mod->code_modifiable) {
3864 $dirsociete = array_merge(array(
'/core/modules/societe/'),
$conf->modules_parts[
'societe']);
3865 foreach ($dirsociete as $dirroot) {
3872 $mod =
new $module($this->db);
3873 '@phan-var-force ModeleThirdPartyCode $mod';
3875 dol_syslog(get_class($this).
"::codefournisseur_modifiable code_founisseur=".$this->code_fournisseur.
" module=".$module);
3876 if ($mod->code_modifiable_null && !$this->code_fournisseur) {
3879 if ($mod->code_modifiable_invalide && $this->check_codefournisseur() < 0) {
3882 if ($mod->code_modifiable) {
3911 $dirsociete = array_merge(array(
'/core/modules/societe/'),
$conf->modules_parts[
'societe']);
3912 foreach ($dirsociete as $dirroot) {
3919 $mod =
new $module($this->db);
3920 '@phan-var-force ModeleThirdPartyCode $mod';
3922 dol_syslog(get_class($this).
"::check_codeclient code_client=".$this->code_client.
" module=".$module);
3923 $result = $mod->verif($this->db, $this->code_client, $this, 0);
3925 $this->error = $mod->error;
3926 $this->errors = $mod->errors;
3953 $dirsociete = array_merge(array(
'/core/modules/societe/'),
$conf->modules_parts[
'societe']);
3954 foreach ($dirsociete as $dirroot) {
3961 $mod =
new $module($this->db);
3962 '@phan-var-force ModeleThirdPartyCode $mod';
3964 dol_syslog(get_class($this).
"::check_codefournisseur code_fournisseur=".$this->code_fournisseur.
" module=".$module);
3965 $result = $mod->verif($this->db, $this->code_fournisseur, $this, 1);
3967 $this->error = $mod->error;
3968 $this->errors = $mod->errors;
3993 $dirsociete = array_merge(array(
'/core/modules/societe/'),
$conf->modules_parts[
'societe']);
3994 foreach ($dirsociete as $dirroot) {
4002 $mod =
new $module();
4003 '@phan-var-force ModeleAccountancyCode $mod';
4006 $result = $mod->get_code($this->db, $this, $type);
4008 if ($type ==
'customer') {
4009 $this->code_compta_client = $mod->code;
4010 } elseif ($type ==
'supplier') {
4011 $this->code_compta_fournisseur = $mod->code;
4016 $this->error =
'ErrorAccountancyCodeNotDefined';
4020 if ($type ==
'customer') {
4021 $this->code_compta_client =
'';
4022 } elseif ($type ==
'supplier') {
4023 $this->code_compta_fournisseur =
'';
4038 dol_syslog(get_class($this).
'::setParent', LOG_DEBUG);
4044 if ($sameparent < 0) {
4047 if ($sameparent == 1) {
4048 setEventMessages(
'ParentCompanyToAddIsAlreadyAChildOfModifiedCompany',
null,
'warnings');
4053 $sql =
'UPDATE '.MAIN_DB_PREFIX.
'societe SET parent = '.($id > 0 ? $id :
'null').
' WHERE rowid = '.((
int) $this->id);
4055 $resql = $this->db->query($sql);
4057 $this->parent = $id;
4077 if ($counter > 100) {
4078 dol_syslog(
"Too high level of parent - child for company. May be an infinite loop ?", LOG_WARNING);
4081 $sql =
'SELECT s.parent';
4082 $sql .=
' FROM '.MAIN_DB_PREFIX.
'societe as s';
4083 $sql .=
' WHERE rowid = '.((int) $idparent);
4084 $resql = $this->db->query($sql);
4086 $obj = $this->db->fetch_object($resql);
4088 if ($obj->parent ==
'') {
4090 } elseif ($obj->parent == $idchild) {
4112 if ($company_id > 0) {
4113 $sql =
"SELECT parent FROM " . MAIN_DB_PREFIX .
"societe WHERE rowid = ".((int) $company_id);
4114 $resql = $this->db->query($sql);
4116 if ($obj = $this->db->fetch_object($resql)) {
4117 $parent = $obj->parent;
4118 if ($parent > 0 && !in_array($parent, $parents)) {
4119 $parents[] = $parent;
4125 $this->db->free($resql);
4127 setEventMessage($langs->trans(
'GetCompanyParentsError', $this->db->lasterror()),
'errors');
4212 $sql =
"SELECT COUNT(*) as nb FROM ".MAIN_DB_PREFIX.
"societe WHERE ".$field.
" = '".$this->db->escape($value).
"' AND entity IN (".
getEntity(
'societe').
")";
4214 $sql .=
" AND rowid <> ".$socid;
4216 $resql = $this->db->query($sql);
4218 $obj = $this->db->fetch_object($resql);
4222 print $this->db->error();
4224 $this->db->free($resql);
4248 require_once DOL_DOCUMENT_ROOT.
'/core/lib/profid.lib.php';
4257 if ($idprof == 1 && $soc->country_code ==
'FR' && !
isValidSiren($this->idprof1)) {
4262 if ($idprof == 2 && $soc->country_code ==
'FR' && !
isValidSiret($this->idprof2)) {
4267 if ($idprof == 1 && $soc->country_code ==
'ES') {
4272 if ($idprof == 1 && $soc->country_code ==
'PT' && !
isValidTinForPT($this->idprof1)) {
4277 if ($idprof == 1 && $soc->country_code ==
'DZ' && !
isValidTinForDZ($this->idprof1)) {
4282 if ($idprof == 1 && $soc->country_code ==
'BE' && !
isValidTinForBE($this->idprof1)) {
4301 global
$conf, $langs, $hookmanager;
4306 $hookmanager->initHooks(array(
'idprofurl'));
4307 $parameters = array(
'idprof' => $idprof,
'company' => $thirdparty);
4308 $reshook = $hookmanager->executeHooks(
'getIdProfUrl', $parameters, $this, $action);
4309 if (empty($reshook)) {
4315 $strippedIdProf1 = str_replace(
' ',
'', $thirdparty->idprof1);
4316 if ($idprof == 1 && $thirdparty->country_code ==
'FR') {
4317 $url =
'https://annuaire-entreprises.data.gouv.fr/entreprise/'.$strippedIdProf1;
4319 if ($idprof == 1 && ($thirdparty->country_code ==
'GB' || $thirdparty->country_code ==
'UK')) {
4320 $url =
'https://beta.companieshouse.gov.uk/company/'.$strippedIdProf1;
4322 if ($idprof == 1 && $thirdparty->country_code ==
'ES') {
4323 $url =
'http://www.e-informa.es/servlet/app/portal/ENTP/screen/SProducto/prod/ETIQUETA_EMPRESA/nif/'.$strippedIdProf1;
4325 if ($idprof == 1 && $thirdparty->country_code ==
'IN') {
4326 $url =
'http://www.tinxsys.com/TinxsysInternetWeb/dealerControllerServlet?tinNumber='.$strippedIdProf1.
';&searchBy=TIN&backPage=searchByTin_Inter.jsp';
4328 if ($idprof == 1 && $thirdparty->country_code ==
'DZ') {
4329 $url =
'http://nif.mfdgi.gov.dz/nif.asp?Nif='.$strippedIdProf1;
4331 if ($idprof == 1 && $thirdparty->country_code ==
'PT') {
4332 $url =
'http://www.nif.pt/'.$strippedIdProf1;
4336 return '<a target="_blank" rel="noopener noreferrer" href="'.$url.
'">'.$langs->trans(
"Check").
'</a>';
4339 return $hookmanager->resPrint;
4354 $sql =
"SELECT COUNT(*) as numproj FROM ".MAIN_DB_PREFIX.
"projet WHERE fk_soc = ".((int) $this->
id);
4355 $resql = $this->db->query($sql);
4357 $obj = $this->db->fetch_object($resql);
4358 $count = $obj->numproj;
4361 print $this->db->error();
4363 $this->db->free($resql);
4364 return ($count > 0);
4376 $sql =
"SELECT s.rowid, s.nom as name, s.datec, tms as datem,";
4377 $sql .=
" fk_user_creat, fk_user_modif";
4378 $sql .=
" FROM ".MAIN_DB_PREFIX.
"societe as s";
4379 $sql .=
" WHERE s.rowid = ".((int) $id);
4381 $result = $this->db->query($sql);
4383 if ($this->db->num_rows($result)) {
4384 $obj = $this->db->fetch_object($result);
4386 $this->
id = $obj->rowid;
4388 $this->user_creation_id = $obj->fk_user_creat;
4389 $this->user_modification_id = $obj->fk_user_modif;
4390 $this->date_creation = $this->db->jdate($obj->datec);
4391 $this->date_modification = empty($obj->datem) ?
'' : $this->db->jdate($obj->datem);
4393 $this->
ref = $obj->name;
4396 $this->db->free($result);
4410 $isACompany =
getDolGlobalInt(
'MAIN_UNKNOWN_CUSTOMERS_ARE_COMPANIES', 1);
4413 if (!empty($this->tva_intra)) {
4415 } elseif (!empty($this->idprof1) || !empty($this->idprof2) || !empty($this->idprof3) || !empty($this->idprof4) || !empty($this->idprof5) || !empty($this->idprof6)) {
4419 if (preg_match(
'/^TE_PRIVATE/', $this->typent_code)) {
4427 return (
bool) $isACompany;
4437 require_once DOL_DOCUMENT_ROOT.
'/core/lib/company.lib.php';
4448 require_once DOL_DOCUMENT_ROOT.
'/core/lib/company.lib.php';
4461 $this->SupplierCategories = array();
4462 $sql =
"SELECT rowid, label";
4463 $sql .=
" FROM ".MAIN_DB_PREFIX.
"categorie";
4464 $sql .=
" WHERE type = ".Categorie::TYPE_SUPPLIER;
4466 $resql = $this->db->query($sql);
4468 while ($obj = $this->db->fetch_object($resql)) {
4469 $this->SupplierCategories[$obj->rowid] = $obj->label;
4487 if ($categorie_id > 0 && $this->
id > 0) {
4488 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"categorie_fournisseur (fk_categorie, fk_soc) ";
4489 $sql .=
" VALUES (".((int) $categorie_id).
", ".((int) $this->
id).
")";
4491 if ($resql = $this->db->query($sql)) {
4507 $sql =
"SELECT count(mc.email) as nb";
4508 $sql .=
" FROM ".MAIN_DB_PREFIX.
"mailing_cibles as mc, ".MAIN_DB_PREFIX.
"mailing as m";
4509 $sql .=
" WHERE mc.fk_mailing=m.rowid AND mc.email = '".$this->db->escape($this->
email).
"' ";
4510 $sql .=
" AND m.entity IN (".getEntity($this->element).
") AND mc.statut NOT IN (-1,0)";
4512 $resql = $this->db->query($sql);
4514 $obj = $this->db->fetch_object($resql);
4517 $this->db->free($resql);
4520 $this->error = $this->db->error();
4542 $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).
"'";
4543 $resql = $this->db->query($sql);
4545 $obj = $this->db->fetch_object($resql);
4546 $noemail = $obj->nb;
4547 if (empty($noemail)) {
4549 $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()).
"')";
4550 $resql = $this->db->query($sql);
4553 $this->error = $this->db->lasterror();
4554 $this->errors[] = $this->error;
4559 $this->error = $this->db->lasterror();
4560 $this->errors[] = $this->error;
4564 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"mailing_unsubscribe WHERE email = '".$this->db->escape($this->
email).
"' AND entity IN (".
getEntity(
'mailing', 0).
")";
4565 $resql = $this->db->query($sql);
4568 $this->error = $this->db->lasterror();
4569 $this->errors[] = $this->error;
4573 if (empty($error)) {
4574 $this->no_email = $no_email;
4575 $this->db->commit();
4578 $this->db->rollback();
4595 $sql =
"SELECT COUNT(rowid) as nb FROM ".MAIN_DB_PREFIX.
"mailing_unsubscribe WHERE entity IN (".
getEntity(
'mailing').
") AND email = '".$this->db->escape($this->
email).
"'";
4596 $resql = $this->db->query($sql);
4598 $obj = $this->db->fetch_object($resql);
4599 $this->no_email = $obj->nb;
4602 $this->error = $this->db->lasterror();
4603 $this->errors[] = $this->error;
4623 global $user, $langs;
4625 dol_syslog(get_class($this).
"::create_from_member", LOG_DEBUG);
4626 $fullname = $member->getFullName($langs);
4628 if ($member->morphy ==
'mor') {
4629 if (empty($socname)) {
4630 $socname = $member->company ? $member->company : $member->societe;
4632 if (!empty($fullname) && empty($socalias)) {
4633 $socalias = $fullname;
4635 } elseif (empty($socname) && $member->morphy ==
'phy') {
4636 if (empty($socname)) {
4637 $socname = $fullname;
4639 if (!empty($member->company) && empty($socalias)) {
4640 $socalias = $member->company;
4645 $alias = $socalias ? $socalias :
'';
4649 $this->
name = $name;
4650 $this->name_alias = $alias;
4651 $this->
address = $member->address;
4652 $this->zip = $member->zip;
4653 $this->town = $member->town;
4654 $this->country_code = $member->country_code;
4655 $this->country_id = $member->country_id;
4656 $this->phone = $member->phone;
4657 $this->
email = $member->email;
4658 $this->socialnetworks = $member->socialnetworks;
4659 $this->entity = $member->entity;
4663 $this->code_client = $member->ref;
4665 $this->code_client = ($customercode ? $customercode : -1);
4667 $this->code_fournisseur =
'-1';
4668 $this->typent_code = ($member->morphy ==
'phy' ?
'TE_PRIVATE' : 0);
4669 $this->typent_id = $this->typent_code ?
dol_getIdFromCode($this->db, $this->typent_code,
'c_typent',
'id',
'code') : 0;
4674 $result = $this->
create($user);
4680 $this->name_bis = $member->lastname;
4681 $this->firstname = $member->firstname;
4682 $this->civility_id = (empty($member->civility_code) ? $member->civility_id : $member->civility_code);
4683 $this->civility_code = (empty($member->civility_code) ? $member->civility_id : $member->civility_code);
4685 dol_syslog(
"We ask to create a contact/address too", LOG_DEBUG);
4690 $this->db->rollback();
4695 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"adherent";
4696 $sql .=
" SET fk_soc = ".((int) $this->
id);
4697 $sql .=
" WHERE rowid = ".((int) $member->id);
4699 $resql = $this->db->query($sql);
4701 $this->db->commit();
4704 $this->error = $this->db->error();
4706 $this->db->rollback();
4711 dol_syslog(get_class($this).
"::create_from_member - 2 - ".$this->error.
" - ".implode(
',', $this->errors), LOG_ERR);
4713 $this->db->rollback();
4729 $this->entity =
$conf->entity;
4731 $this->nom = $this->name;
4745 $country_code = $country_label =
'';
4748 $country_id = (is_numeric($tmp[0])) ? (
int) $tmp[0] : 0;
4749 if (!empty($tmp[1])) {
4750 $country_code = $tmp[1];
4751 $country_label = $tmp[2];
4754 dol_syslog(
"Your country setup use an old syntax. Reedit it using setup area.", LOG_WARNING);
4755 include_once DOL_DOCUMENT_ROOT.
'/core/lib/company.lib.php';
4756 $country_code =
getCountry($country_id,
'2', $this->db);
4757 $country_label =
getCountry($country_id,
'', $this->db);
4760 $this->country_id = $country_id;
4761 $this->country_code = $country_code;
4762 $this->country = $country_label;
4763 if (is_object($langs)) {
4764 $this->country = ($langs->trans(
'Country'.$country_code) !=
'Country'.$country_code) ? $langs->trans(
'Country'.$country_code) : $country_label;
4774 $state_id = (int) $tmp[0];
4775 if (!empty($tmp[1])) {
4776 $state_code = $tmp[1];
4777 $state_label = $tmp[2];
4779 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);
4780 include_once DOL_DOCUMENT_ROOT.
'/core/lib/company.lib.php';
4781 $state_code =
getState($state_id,
'2', $this->db);
4782 $state_label =
getState($state_id,
'0', $this->db);
4785 $this->state_id = $state_id;
4786 $this->state_code = $state_code;
4787 $this->state = $state_label;
4788 if (is_object($langs)) {
4789 $this->state = ($langs->trans(
'State'.$state_code) !=
'State'.$state_code) ? $langs->trans(
'State'.$state_code) : $state_label;
4804 $this->socialnetworks = array();
4805 if (!empty($facebook_url)) {
4806 $this->socialnetworks[
'facebook'] = $facebook_url;
4808 if (!empty($twitter_url)) {
4809 $this->socialnetworks[
'twitter'] = $twitter_url;
4811 if (!empty($linkedin_url)) {
4812 $this->socialnetworks[
'linkedin'] = $linkedin_url;
4814 if (!empty($instagram_url)) {
4815 $this->socialnetworks[
'instagram'] = $instagram_url;
4817 if (!empty($youtube_url)) {
4818 $this->socialnetworks[
'youtube'] = $youtube_url;
4820 if (!empty($github_url)) {
4821 $this->socialnetworks[
'github'] = $github_url;
4838 $this->forme_juridique_code =
getDolGlobalInt(
'MAIN_INFO_SOCIETE_FORME_JURIDIQUE');
4845 $this->logo_squarred_small =
getDolGlobalString(
'MAIN_INFO_SOCIETE_LOGO_SQUARRED_SMALL');
4846 $this->logo_squarred_mini =
getDolGlobalString(
'MAIN_INFO_SOCIETE_LOGO_SQUARRED_MINI');
4852 $this->localtax1_assuj = ((isset(
$conf->global->FACTURE_LOCAL_TAX1_OPTION) && (
getDolGlobalString(
'FACTURE_LOCAL_TAX1_OPTION') ==
'1' ||
getDolGlobalString(
'FACTURE_LOCAL_TAX1_OPTION') ==
'localtax1on')) ? 1 : 0);
4853 $this->localtax2_assuj = ((isset(
$conf->global->FACTURE_LOCAL_TAX2_OPTION) && (
getDolGlobalString(
'FACTURE_LOCAL_TAX2_OPTION') ==
'1' ||
getDolGlobalString(
'FACTURE_LOCAL_TAX2_OPTION') ==
'localtax2on')) ? 1 : 0);
4872 $this->
name =
'THIRDPARTY SPECIMEN '.dol_print_date($now,
'dayhourlog');
4873 $this->ref_ext =
'Ref ext';
4874 $this->specimen = 1;
4875 $this->
address =
'21 jump street';
4876 $this->zip =
'99999';
4877 $this->town =
'MyTown';
4878 $this->state_id = 1;
4879 $this->state_code =
'AA';
4880 $this->state =
'MyState';
4881 $this->country_id = 1;
4882 $this->country_code =
'FR';
4883 $this->
email =
'specimen@specimen.com';
4884 $this->socialnetworks = array(
4885 'skype' =>
'skypepseudo',
4886 'twitter' =>
'twitterpseudo',
4887 'facebook' =>
'facebookpseudo',
4888 'linkedin' =>
'linkedinpseudo',
4890 $this->url =
'http://www.specimen.com';
4892 $this->phone =
'0909090901';
4893 $this->phone_mobile =
'0909090901';
4894 $this->fax =
'0909090909';
4896 $this->code_client =
'CC-'.dol_print_date($now,
'dayhourlog');
4897 $this->code_fournisseur =
'SC-'.dol_print_date($now,
'dayhourlog');
4898 $this->typent_code =
'TE_OTHER';
4899 $this->capital = 10000;
4901 $this->prospect = 1;
4902 $this->fournisseur = 1;
4903 $this->tva_assuj = 1;
4904 $this->tva_intra =
'EU1234567';
4905 $this->note_public =
'This is a comment (public)';
4906 $this->note_private =
'This is a comment (private)';
4908 $this->idprof1 =
'idprof1';
4909 $this->idprof2 =
'idprof2';
4910 $this->idprof3 =
'idprof3';
4911 $this->idprof4 =
'idprof4';
4912 $this->idprof5 =
'idprof5';
4913 $this->idprof6 =
'idprof6';
4926 $sql =
"SELECT t.localtax1, t.localtax2";
4927 $sql .=
" FROM ".MAIN_DB_PREFIX.
"c_tva as t, ".MAIN_DB_PREFIX.
"c_country as c";
4928 $sql .=
" WHERE t.fk_pays = c.rowid AND c.code = '".$this->db->escape($this->country_code).
"'";
4929 $sql .=
" AND t.active = 1";
4930 $sql .=
" AND t.entity IN (".getEntity(
'c_tva').
")";
4931 if (empty($localTaxNum)) {
4932 $sql .=
" AND (t.localtax1_type <> '0' OR t.localtax2_type <> '0')";
4933 } elseif ($localTaxNum == 1) {
4934 $sql .=
" AND t.localtax1_type <> '0'";
4935 } elseif ($localTaxNum == 2) {
4936 $sql .=
" AND t.localtax2_type <> '0'";
4939 $resql = $this->db->query($sql);
4941 return ($this->db->num_rows($resql) > 0);
4954 $sql =
"SELECT t.rowid";
4955 $sql .=
" FROM ".MAIN_DB_PREFIX.
"c_tva as t, ".MAIN_DB_PREFIX.
"c_country as c";
4956 $sql .=
" WHERE t.fk_pays = c.rowid AND c.code = '".$this->db->escape($this->country_code).
"'";
4957 $sql .=
" AND t.active = 1 AND t.recuperableonly = 1";
4958 $sql .=
" AND t.entity IN (".getEntity(
'c_tva').
")";
4961 $resql = $this->db->query($sql);
4963 return ($this->db->num_rows($resql) > 0);
4977 $sql =
"SELECT COUNT(*) as nb";
4978 $sql .=
" FROM ".MAIN_DB_PREFIX.
"c_revenuestamp as r, ".MAIN_DB_PREFIX.
"c_country as c";
4979 $sql .=
" WHERE r.fk_pays = c.rowid AND c.code = '".$this->db->escape($this->country_code).
"'";
4980 $sql .=
" AND r.active = 1";
4983 $resql = $this->db->query($sql);
4985 $obj = $this->db->fetch_object($resql);
4986 return ($obj->nb > 0);
4988 $this->error = $this->db->lasterror();
5016 if ($fk_prospectlevel !=
'') {
5017 $label = $langs->trans(
"ProspectLevel".$fk_prospectlevel);
5019 if ($label ==
"ProspectLevel".$fk_prospectlevel) {
5020 $label = $langs->getLabelFromKey($this->db, $fk_prospectlevel,
'c_prospectlevel',
'code',
'label');
5036 return $this->
LibProspCommStatut($this->stcomm_id, $mode, $label, $this->stcomm_picto);
5058 $langs->load(
'customers');
5061 if ($status ==
'-1' || $status ==
'ST_NO') {
5062 return img_action($langs->trans(
"StatusProspect-1"),
'-1', $picto,
'class="inline-block valignmiddle"').
' '.$langs->trans(
"StatusProspect-1");
5063 } elseif ($status ==
'0' || $status ==
'ST_NEVER') {
5064 return img_action($langs->trans(
"StatusProspect0"),
'0', $picto,
'class="inline-block valignmiddle"').
' '.$langs->trans(
"StatusProspect0");
5065 } elseif ($status ==
'1' || $status ==
'ST_TODO') {
5066 return img_action($langs->trans(
"StatusProspect1"),
'1', $picto,
'class="inline-block valignmiddle"').
' '.$langs->trans(
"StatusProspect1");
5067 } elseif ($status ==
'2' || $status ==
'ST_PEND') {
5068 return img_action($langs->trans(
"StatusProspect2"),
'2', $picto,
'class="inline-block valignmiddle"').
' '.$langs->trans(
"StatusProspect2");
5069 } elseif ($status ==
'3' || $status ==
'ST_DONE') {
5070 return img_action($langs->trans(
"StatusProspect3"),
'3', $picto,
'class="inline-block valignmiddle"').
' '.$langs->trans(
"StatusProspect3");
5072 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);
5074 } elseif ($mode == 3) {
5075 if ($status ==
'-1' || $status ==
'ST_NO') {
5076 return img_action($langs->trans(
"StatusProspect-1"),
'-1', $picto,
'class="inline-block valignmiddle"');
5077 } elseif ($status ==
'0' || $status ==
'ST_NEVER') {
5078 return img_action($langs->trans(
"StatusProspect0"),
'0', $picto,
'class="inline-block valignmiddle"');
5079 } elseif ($status ==
'1' || $status ==
'ST_TODO') {
5080 return img_action($langs->trans(
"StatusProspect1"),
'1', $picto,
'class="inline-block valignmiddle"');
5081 } elseif ($status ==
'2' || $status ==
'ST_PEND') {
5082 return img_action($langs->trans(
"StatusProspect2"),
'2', $picto,
'class="inline-block valignmiddle"');
5083 } elseif ($status ==
'3' || $status ==
'ST_DONE') {
5084 return img_action($langs->trans(
"StatusProspect3"),
'3', $picto,
'class="inline-block valignmiddle"');
5086 return img_action(($langs->trans(
"StatusProspect".$status) !=
"StatusProspect".$status) ? $langs->trans(
"StatusProspect".$status) : $label,
'0', $picto,
'class="inline-block valignmiddle"');
5088 } elseif ($mode == 4) {
5089 if ($status ==
'-1' || $status ==
'ST_NO') {
5090 return img_action($langs->trans(
"StatusProspect-1"),
'-1', $picto,
'class="inline-block valignmiddle"').
' '.$langs->trans(
"StatusProspect-1");
5091 } elseif ($status ==
'0' || $status ==
'ST_NEVER') {
5092 return img_action($langs->trans(
"StatusProspect0"),
'0', $picto,
'class="inline-block valignmiddle"').
' '.$langs->trans(
"StatusProspect0");
5093 } elseif ($status ==
'1' || $status ==
'ST_TODO') {
5094 return img_action($langs->trans(
"StatusProspect1"),
'1', $picto,
'class="inline-block valignmiddle"').
' '.$langs->trans(
"StatusProspect1");
5095 } elseif ($status ==
'2' || $status ==
'ST_PEND') {
5096 return img_action($langs->trans(
"StatusProspect2"),
'2', $picto,
'class="inline-block valignmiddle"').
' '.$langs->trans(
"StatusProspect2");
5097 } elseif ($status ==
'3' || $status ==
'ST_DONE') {
5098 return img_action($langs->trans(
"StatusProspect3"),
'3', $picto,
'class="inline-block valignmiddle"').
' '.$langs->trans(
"StatusProspect3");
5100 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);
5104 return "Error, mode/status not found";
5116 if ($mode ==
'supplier') {
5117 $table =
'supplier_proposal';
5120 $sql =
"SELECT rowid, ref, total_ht, total_ttc, fk_statut as status FROM ".MAIN_DB_PREFIX.$table.
" as f";
5121 $sql .=
" WHERE fk_soc = ".((int) $this->
id);
5122 if ($mode ==
'supplier') {
5123 $sql .=
" AND entity IN (".getEntity(
'supplier_proposal').
")";
5125 $sql .=
" AND entity IN (".getEntity(
'propal').
")";
5128 dol_syslog(
"getOutstandingProposals for fk_soc = ".((
int) $this->
id), LOG_DEBUG);
5130 $resql = $this->db->query($sql);
5132 $outstandingOpened = 0;
5133 $outstandingTotal = 0;
5134 $outstandingTotalIncTax = 0;
5135 $arrayofref = array();
5136 while ($obj = $this->db->fetch_object($resql)) {
5137 $arrayofref[$obj->rowid] = $obj->ref;
5138 $outstandingTotal += $obj->total_ht;
5139 $outstandingTotalIncTax += $obj->total_ttc;
5140 if ($obj->status != 0) {
5142 $outstandingOpened += $obj->total_ttc;
5145 return array(
'opened' => $outstandingOpened,
'total_ht' => $outstandingTotal,
'total_ttc' => $outstandingTotalIncTax,
'refs' => $arrayofref);
5159 $table =
'commande';
5160 if ($mode ==
'supplier') {
5161 $table =
'commande_fournisseur';
5164 $sql =
"SELECT rowid, ref, total_ht, total_ttc, fk_statut as status FROM ".MAIN_DB_PREFIX.$table.
" as f";
5165 $sql .=
" WHERE fk_soc = ".((int) $this->
id);
5166 if ($mode ==
'supplier') {
5167 $sql .=
" AND entity IN (".getEntity(
'supplier_order').
")";
5169 $sql .=
" AND entity IN (".getEntity(
'commande').
")";
5172 dol_syslog(
"getOutstandingOrders", LOG_DEBUG);
5173 $resql = $this->db->query($sql);
5175 $outstandingOpened = 0;
5176 $outstandingTotal = 0;
5177 $outstandingTotalIncTax = 0;
5178 $arrayofref = array();
5179 while ($obj = $this->db->fetch_object($resql)) {
5180 $arrayofref[$obj->rowid] = $obj->ref;
5181 $outstandingTotal += $obj->total_ht;
5182 $outstandingTotalIncTax += $obj->total_ttc;
5183 if ($obj->status != 0) {
5185 $outstandingOpened += $obj->total_ttc;
5188 return array(
'opened' => $outstandingOpened,
'total_ht' => $outstandingTotal,
'total_ttc' => $outstandingTotalIncTax,
'refs' => $arrayofref);
5203 include_once DOL_DOCUMENT_ROOT.
'/core/lib/date.lib.php';
5206 if ($mode ==
'supplier') {
5207 $table =
'facture_fourn';
5219 $sql =
"SELECT rowid, ref, total_ht, total_ttc, paye, type, fk_statut as status, close_code FROM ".MAIN_DB_PREFIX.$table.
" as f";
5220 $sql .=
" WHERE fk_soc = ".((int) $this->
id);
5221 if (!empty($late)) {
5222 $sql .=
" AND date_lim_reglement < '".$this->db->idate($today).
"'";
5224 if ($mode ==
'supplier') {
5225 $sql .=
" AND entity IN (".getEntity(
'facture_fourn').
")";
5227 $sql .=
" AND entity IN (".getEntity(
'invoice').
")";
5230 dol_syslog(
"getOutstandingBills", LOG_DEBUG);
5231 $resql = $this->db->query($sql);
5233 $outstandingOpened = 0;
5234 $outstandingTotal = 0;
5235 $outstandingTotalIncTax = 0;
5236 $arrayofref = array();
5237 $arrayofrefopened = array();
5238 if ($mode ==
'supplier') {
5239 require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.facture.class.php';
5242 require_once DOL_DOCUMENT_ROOT.
'/compta/facture/class/facture.class.php';
5243 $tmpobject =
new Facture($this->db);
5245 while ($obj = $this->db->fetch_object($resql)) {
5246 $arrayofref[$obj->rowid] = $obj->ref;
5247 $tmpobject->id = $obj->rowid;
5249 if ($obj->status != $tmpobject::STATUS_DRAFT
5250 && !($obj->status == $tmpobject::STATUS_ABANDONED && $obj->close_code ==
'replaced')
5252 $outstandingTotal += $obj->total_ht;
5253 $outstandingTotalIncTax += $obj->total_ttc;
5259 && $obj->status != $tmpobject::STATUS_DRAFT
5260 && $obj->status != $tmpobject::STATUS_ABANDONED
5261 && $obj->status != $tmpobject::STATUS_CLOSED) {
5263 $paiement = $tmpobject->getSommePaiement();
5264 $creditnotes = $tmpobject->getSumCreditNotesUsed();
5265 $deposits = $tmpobject->getSumDepositsUsed();
5267 $remaintopay = ($obj->total_ttc - $paiement - $creditnotes - $deposits);
5268 $outstandingOpened += $remaintopay;
5274 $remainingcreditnote = $tmpobject->getSumFromThisCreditNotesNotUsed();
5275 $remaintopay -= $remainingcreditnote;
5276 $outstandingOpened -= $remainingcreditnote;
5280 $arrayofrefopened[$obj->rowid] = $obj->ref;
5283 return array(
'opened' => $outstandingOpened,
'total_ht' => $outstandingTotal,
'total_ttc' => $outstandingTotalIncTax,
'refs' => $arrayofref,
'refsopened' => $arrayofrefopened);
5285 dol_syslog(
"Sql error ".$this->db->lasterror, LOG_ERR);
5312 $langs->load(
'companies');
5315 return $langs->trans(
"NorProspectNorCustomer");
5316 } elseif ($status == 1) {
5317 return $langs->trans(
"Customer");
5318 } elseif ($status == 2) {
5319 return $langs->trans(
"Prospect");
5320 } elseif ($status == 3) {
5321 return $langs->trans(
"ProspectCustomer");
5339 public function generateDocument($modele, $outputlangs, $hidedetails = 0, $hidedesc = 0, $hideref = 0, $moreparams =
null)
5343 if (!empty($moreparams) && !empty($moreparams[
'use_companybankid'])) {
5344 $modelpath =
"core/modules/bank/doc/";
5346 include_once DOL_DOCUMENT_ROOT.
'/societe/class/companybankaccount.class.php';
5348 $result = $companybankaccount->fetch($moreparams[
'use_companybankid']);
5350 dol_print_error($this->db, $companybankaccount->error, $companybankaccount->errors);
5352 $result = $companybankaccount->commonGenerateDocument($modelpath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref, $moreparams);
5353 $this->last_main_doc = $companybankaccount->last_main_doc;
5360 print $langs->trans(
"Error").
" ".$langs->trans(
"Error_COMPANY_ADDON_PDF_NotDefined");
5365 if (!isset($this->bank_account)) {
5366 require_once DOL_DOCUMENT_ROOT.
'/societe/class/companybankaccount.class.php';
5369 $result = $bac->fetch(0,
'', $this->
id);
5371 $this->bank_account = $bac;
5373 $this->bank_account =
'';
5377 $modelpath =
"core/modules/societe/doc/";
5379 $result = $this->
commonGenerateDocument($modelpath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref, $moreparams);
5399 require_once DOL_DOCUMENT_ROOT.
'/categories/class/categorie.class.php';
5402 if (!in_array($type_categ, array(Categorie::TYPE_CUSTOMER, Categorie::TYPE_SUPPLIER))) {
5403 dol_syslog(__METHOD__.
': Type '.$type_categ.
'is an unknown company category type. Done nothing.', LOG_ERR);
5407 return parent::setCategoriesCommon($categories, $type_categ);
5422 if (!is_array($salesrep)) {
5423 $salesrep = array($salesrep);
5427 $to_add = $salesrep;
5428 if ($onlyAdd ===
false) {
5433 if (is_array($existing)) {
5434 $to_del = array_diff($existing, $salesrep);
5435 $to_add = array_diff($salesrep, $existing);
5442 foreach ($to_del as $del) {
5445 foreach ($to_add as $add) {
5453 return $error ? -1 : 1;
5469 $result = $this->
setValueFrom(
'fk_typent', $typent_id,
'',
null,
'',
'', $user,
'COMPANY_MODIFY');
5472 $this->typent_id = $typent_id;
5473 $this->typent_code =
dol_getIdFromCode($this->db, $this->typent_id,
'c_typent',
'id',
'code');
5494 if ($origin_id == $dest_id) {
5495 dol_syslog(
'Error: Try to merge a thirdparty into itself');
5501 $sql =
'SELECT rowid FROM '.MAIN_DB_PREFIX.
'societe_commerciaux ';
5502 $sql .=
' WHERE fk_soc = '.(int) $dest_id.
' AND fk_user IN ( ';
5503 $sql .=
' SELECT fk_user ';
5504 $sql .=
' FROM '.MAIN_DB_PREFIX.
'societe_commerciaux ';
5505 $sql .=
' WHERE fk_soc = '.(int) $origin_id.
') ';
5507 $resql = $dbs->
query($sql);
5509 $dbs->
query(
'DELETE FROM '.MAIN_DB_PREFIX.
'societe_commerciaux WHERE rowid = '.((
int) $obj->rowid));
5516 'societe_commerciaux',
5519 'societe_remise_except',
5538 global $user, $langs,
$conf;
5542 if ($type ==
'buy') {
5543 $field =
'accountancy_code_buy';
5544 } elseif ($type ==
'sell') {
5545 $field =
'accountancy_code_sell';
5550 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element.
" SET ";
5551 $sql .= $field.
" = '".$this->db->escape($value).
"'";
5552 $sql .=
" WHERE rowid = ".((int) $this->
id);
5554 dol_syslog(get_class($this).
"::".__FUNCTION__, LOG_DEBUG);
5555 $resql = $this->db->query($sql);
5559 include_once DOL_DOCUMENT_ROOT.
'/core/class/interfaces.class.php';
5561 $result = $interface->run_triggers(
'COMPANY_MODIFY', $this, $user, $langs,
$conf);
5563 $this->errors = $interface->errors;
5564 $this->db->rollback();
5569 $this->$field = $value;
5571 $this->db->commit();
5574 $this->error = $this->db->lasterror();
5575 $this->db->rollback();
5588 require_once DOL_DOCUMENT_ROOT.
'/partnership/class/partnership.class.php';
5590 $this->partnerships[] = array();
5604 $selected = (empty($arraydata[
'selected']) ? 0 : $arraydata[
'selected']);
5606 $return =
'<div class="box-flex-item box-flex-grow-zero">';
5607 $return .=
'<div class="info-box info-box-sm">';
5608 $return .=
'<span class="info-box-icon bg-infobox-action">';
5610 $return .=
'</span>';
5611 $return .=
'<div class="info-box-content">';
5612 $return .=
'<div class="info-box-ref inline-block tdoverflowmax125 valignmiddle">'.(method_exists($this,
'getNomUrl') ? $this->
getNomUrl(1) : $this->ref);
5613 $return .=
'</div>';
5614 if (!empty($this->phone)) {
5615 $return .=
'<div class="inline-block valignmiddle">';
5617 $return .=
dol_print_phone($this->phone, $this->country_code, 0, $this->
id,
'tel',
'hidenum',
'phone', $this->phone, 0,
'paddingleft paddingright');
5618 $return .=
'</div>';
5620 if (!empty($this->
email)) {
5621 $return .=
'<div class="inline-block valignmiddle">';
5622 $return .=
dol_print_email($this->
email, 0, $this->
id,
'thirdparty', -1, 1, 2,
'paddingleft paddingright');
5623 $return .=
'</div>';
5625 if ($selected >= 0) {
5626 $return .=
'<input id="cb'.$this->id.
'" class="flat checkforselect fright" type="checkbox" name="toselect[]" value="'.$this->
id.
'"'.($selected ?
' checked="checked"' :
'').
'>';
5628 if (property_exists($this,
'code_client')) {
5629 $return .=
'<br><span class="info-box-label opacitymedium">'.$this->code_client.
'</span>';
5631 if (method_exists($this,
'getLibStatut')) {
5632 $return .=
'<br><div class="info-box-status">'.$this->getLibStatut(3).
'</div>';
5634 $return .=
'</div>';
5635 $return .=
'</div>';
5636 $return .=
'</div>';
5656 $sql =
"SELECT sc.rowid, sc.fk_socpeople as id, sc.fk_c_type_contact";
5657 $sql .=
", t.fk_soc as socid, t.statut as statuscontact";
5658 $sql .=
", t.civility as civility, t.lastname as lastname, t.firstname, t.email";
5659 $sql .=
", tc.source, tc.element, tc.code, tc.libelle as type_label";
5660 $sql .=
" FROM ".$this->db->prefix().
"c_type_contact tc";
5661 $sql .=
", ".$this->db->prefix().
"societe_contacts sc";
5662 $sql .=
" LEFT JOIN ".$this->db->prefix().
"socpeople t on sc.fk_socpeople = t.rowid";
5663 $sql .=
" WHERE sc.fk_soc = ".((int) $this->
id);
5664 $sql .=
" AND sc.fk_c_type_contact = tc.rowid";
5665 if (!empty($element)) {
5666 $sql .=
" AND tc.element = '".$this->db->escape($element).
"'";
5669 $sql .=
" AND tc.code = '".$this->db->escape($code).
"'";
5671 $sql .=
" AND sc.entity IN (".getEntity($this->element).
")";
5672 $sql .=
" AND tc.source = 'external'";
5673 $sql .=
" AND tc.active = 1";
5675 $sql .=
" ORDER BY t.lastname ASC";
5677 dol_syslog(get_class($this).
"::getContacts", LOG_DEBUG);
5678 $resql = $this->db->query($sql);
5680 $num = $this->db->num_rows($resql);
5683 $obj = $this->db->fetch_object($resql);
5686 $transkey =
"TypeContact_".$obj->element.
"_".$obj->source.
"_".$obj->code;
5687 $libelle_type = ($langs->trans($transkey) != $transkey ? $langs->trans($transkey) : $obj->type_label);
5689 'source' => $obj->source,
5690 'socid' => $obj->socid,
5692 'nom' => $obj->lastname,
5693 'civility' => $obj->civility,
5694 'lastname' => $obj->lastname,
5695 'firstname' => $obj->firstname,
5696 'email' => $obj->email,
5697 'login' => (empty($obj->login) ?
'' : $obj->login),
5698 'photo' => (empty($obj->photo) ?
'' : $obj->photo),
5699 'statuscontact' => $obj->statuscontact,
5700 'rowid' => $obj->rowid,
5701 'code' => $obj->code,
5702 'element' => $obj->element,
5703 'libelle' => $libelle_type,
5704 'status' => $obj->statuslink,
5705 'fk_c_type_contact' => $obj->fk_c_type_contact
5708 $tab[$i] = $obj->id;
5716 $this->error = $this->db->lasterror();
5734 global
$conf, $langs, $hookmanager, $user, $action;
5737 $soc_origin =
new Societe($this->db);
5739 dol_syslog(
"mergeCompany merge thirdparty id=".$soc_origin_id.
" (will be deleted) into the thirdparty id=".$this->id);
5741 if (!$error && $soc_origin->fetch($soc_origin_id) < 1) {
5742 $this->error = $langs->trans(
'ErrorRecordNotFound');
5750 $this->client |= $soc_origin->client;
5751 $this->fournisseur |= $soc_origin->fournisseur;
5752 $listofproperties = array(
5753 'address',
'zip',
'town',
'state_id',
'country_id',
'phone',
'phone_mobile',
'fax',
'email',
'socialnetworks',
'url',
'barcode',
5754 'idprof1',
'idprof2',
'idprof3',
'idprof4',
'idprof5',
'idprof6',
5755 'tva_intra',
'effectif_id',
'forme_juridique',
'remise_percent',
'remise_supplier_percent',
'mode_reglement_supplier_id',
'cond_reglement_supplier_id',
'name_bis',
5756 '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',
5757 'code_client',
'code_fournisseur',
'code_compta',
'code_compta_fournisseur',
5758 'model_pdf',
'webservices_url',
'webservices_key',
'accountancy_code_sell',
'accountancy_code_buy',
'typent_id'
5760 foreach ($listofproperties as $property) {
5761 if (empty($this->$property)) {
5762 $this->$property = $soc_origin->$property;
5766 if ($this->typent_id == -1) {
5767 $this->typent_id = $soc_origin->typent_id;
5771 $listofproperties = array(
5772 'note_public',
'note_private'
5774 foreach ($listofproperties as $property) {
5775 $this->$property =
dol_concatdesc($this->$property, $soc_origin->$property);
5779 if (is_array($soc_origin->array_options)) {
5780 foreach ($soc_origin->array_options as $key => $val) {
5781 if (empty($this->array_options[$key])) {
5782 $this->array_options[$key] = $val;
5788 if (empty($this->name_bis) && $this->
name != $soc_origin->name) {
5789 $this->name_bis = $this->name;
5793 include_once DOL_DOCUMENT_ROOT.
'/categories/class/categorie.class.php';
5796 $custcats_ori = $static_cat->containing($soc_origin->id,
'customer',
'id');
5797 $custcats = $static_cat->containing($this->
id,
'customer',
'id');
5798 $custcats = array_merge($custcats, $custcats_ori);
5801 $suppcats_ori = $static_cat->containing($soc_origin->id,
'supplier',
'id');
5802 $suppcats = $static_cat->containing($this->
id,
'supplier',
'id');
5803 $suppcats = array_merge($suppcats, $suppcats_ori);
5807 if ($soc_origin->code_client == $this->code_client
5808 || $soc_origin->code_fournisseur == $this->code_fournisseur
5809 || $soc_origin->barcode == $this->barcode) {
5810 dol_syslog(
"We clean customer and supplier code so we will be able to make the update of target");
5811 $soc_origin->code_client =
'';
5812 $soc_origin->code_fournisseur =
'';
5813 $soc_origin->barcode =
'';
5814 $soc_origin->update($soc_origin->id, $user, 0, 1, 1,
'merge');
5818 $result = $this->
update($this->
id, $user, 0, 1, 1,
'merge');
5827 'Adherent' =>
'/adherents/class/adherent.class.php',
5829 'ActionComm' =>
'/comm/action/class/actioncomm.class.php',
5830 'Propal' =>
'/comm/propal/class/propal.class.php',
5831 'Commande' =>
'/commande/class/commande.class.php',
5832 'Facture' =>
'/compta/facture/class/facture.class.php',
5833 'FactureRec' =>
'/compta/facture/class/facture-rec.class.php',
5834 'LignePrelevement' =>
'/compta/prelevement/class/ligneprelevement.class.php',
5835 'Contact' =>
'/contact/class/contact.class.php',
5836 'Contrat' =>
'/contrat/class/contrat.class.php',
5837 'Expedition' =>
'/expedition/class/expedition.class.php',
5838 'CommandeFournisseur' =>
'/fourn/class/fournisseur.commande.class.php',
5839 'FactureFournisseur' =>
'/fourn/class/fournisseur.facture.class.php',
5840 'FactureFournisseurRec' =>
'/fourn/class/fournisseur.facture-rec.class.php',
5841 'Reception' =>
'/reception/class/reception.class.php',
5842 'SupplierProposal' =>
'/supplier_proposal/class/supplier_proposal.class.php',
5843 'ProductFournisseur' =>
'/fourn/class/fournisseur.product.class.php',
5844 'Product' =>
'/product/class/product.class.php',
5846 'Project' =>
'/projet/class/project.class.php',
5847 'User' =>
'/user/class/user.class.php',
5848 'Account' =>
'/compta/bank/class/account.class.php',
5849 'ConferenceOrBoothAttendee' =>
'/eventorganization/class/conferenceorboothattendee.class.php',
5850 'Societe' =>
'/societe/class/societe.class.php',
5853 if ($this->db->DDLListTables(
$conf->db->name, $this->db->prefix().
'delivery')) {
5854 $objects[
'Delivery'] =
'/delivery/class/delivery.class.php';
5856 if ($this->db->DDLListTables(
$conf->db->name, $this->db->prefix().
'mrp_mo')) {
5857 $objects[
'Mo'] =
'/mrp/class/mo.class.php';
5859 if ($this->db->DDLListTables(
$conf->db->name, $this->db->prefix().
'don')) {
5860 $objects[
'Don'] =
'/don/class/don.class.php';
5862 if ($this->db->DDLListTables(
$conf->db->name, $this->db->prefix().
'partnership')) {
5863 $objects[
'PartnerShip'] =
'/partnership/class/partnership.class.php';
5865 if ($this->db->DDLListTables(
$conf->db->name, $this->db->prefix().
'fichinter')) {
5866 $objects[
'Fichinter'] =
'/fichinter/class/fichinter.class.php';
5868 if ($this->db->DDLListTables(
$conf->db->name, $this->db->prefix().
'ticket')) {
5869 $objects[
'Ticket'] =
'/ticket/class/ticket.class.php';
5873 foreach ($objects as $object_name => $object_file) {
5883 require_once DOL_DOCUMENT_ROOT.$object_file;
5885 if (!$error && !$object_name::replaceThirdparty($this->db, $soc_origin->id, $this->id)) {
5887 $this->error = $this->db->lasterror();
5895 $parameters = array(
'soc_origin' => $soc_origin->id,
'soc_dest' => $this->id);
5896 $reshook = $hookmanager->executeHooks(
'replaceThirdparty', $parameters, $this, $action);
5899 $this->error = $hookmanager->error;
5900 $this->errors = $hookmanager->errors;
5907 $this->context = array(
'merge' => 1,
'mergefromid' => $soc_origin->id,
'mergefromname' => $soc_origin->name);
5910 $result = $this->
call_trigger(
'COMPANY_MODIFY', $user);
5919 if ($soc_origin->delete($soc_origin->id, $user) < 1) {
5920 $this->error = $soc_origin->error;
5921 $this->errors = $soc_origin->errors;
5929 if (!empty(
$conf->societe->multidir_output[$this->entity])) {
5930 $srcdir =
$conf->societe->multidir_output[$this->entity].
"/".$soc_origin->id;
5931 $destdir =
$conf->societe->multidir_output[$this->entity].
"/".$this->id;
5935 foreach ($dirlist as $filetomove) {
5936 $destfile = $destdir.
'/'.$filetomove[
'relativename'];
5938 dol_move($filetomove[
'fullname'], $destfile,
'0', 0, 0, 1);
5946 $this->db->commit();
5949 $langs->load(
"errors");
5950 $this->error = $langs->trans(
'ErrorsThirdpartyMerge');
5951 $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.