41require_once DOL_DOCUMENT_ROOT.
'/core/class/commonobject.class.php';
42require_once DOL_DOCUMENT_ROOT.
'/core/class/commonincoterm.class.php';
43require_once DOL_DOCUMENT_ROOT.
'/core/class/commonsocialnetworks.class.php';
44require_once DOL_DOCUMENT_ROOT.
'/core/class/commonpeople.class.php';
45require_once DOL_DOCUMENT_ROOT.
'/multicurrency/class/multicurrency.class.php';
60 public $module =
'societe';
65 public $element =
'societe';
70 public $table_element =
'societe';
75 public $fk_element =
'fk_soc';
80 public $fieldsforcombobox =
'nom,name_alias';
85 protected $childtables = array(
86 'supplier_proposal' => array(
'name' =>
'SupplierProposal'),
87 'propal' => array(
'name' =>
'Proposal'),
88 'commande' => array(
'name' =>
'Order'),
89 'facture' => array(
'name' =>
'Invoice'),
90 'facture_rec' => array(
'name' =>
'RecurringInvoiceTemplate'),
91 'contrat' => array(
'name' =>
'Contract'),
92 'fichinter' => array(
'name' =>
'Fichinter'),
93 'facture_fourn' => array(
'name' =>
'SupplierInvoice'),
94 'commande_fournisseur' => array(
'name' =>
'SupplierOrder'),
95 'projet' => array(
'name' =>
'Project'),
96 'expedition' => array(
'name' =>
'Shipment'),
97 'prelevement_lignes' => array(
'name' =>
'DirectDebitRecord'),
104 protected $childtablesoncascade = array(
107 'product_fournisseur_price',
108 'product_customer_price_log',
109 'product_customer_price',
110 '@Contact:/contact/class/contact.class.php:fk_soc',
115 'societe_remise_except',
116 'societe_commerciaux',
126 public $picto =
'company';
132 public $ismultientitymanaged = 1;
137 public $isextrafieldmanaged = 1;
143 public $restrictiononfksoc = 1;
154 public $SupplierCategories = array();
160 public $prefixCustomerIsRequired;
191 public $fields = array(
192 'rowid' =>array(
'type'=>
'integer',
'label'=>
'TechnicalID',
'enabled'=>1,
'visible'=>-1,
'notnull'=>1,
'position'=>10),
193 'parent' =>array(
'type'=>
'integer',
'label'=>
'Parent',
'enabled'=>1,
'visible'=>-1,
'position'=>20),
194 'tms' =>array(
'type'=>
'timestamp',
'label'=>
'DateModification',
'enabled'=>1,
'visible'=>-1,
'notnull'=>1,
'position'=>25),
195 'datec' =>array(
'type'=>
'datetime',
'label'=>
'DateCreation',
'enabled'=>1,
'visible'=>-1,
'position'=>30),
196 'nom' =>array(
'type'=>
'varchar(128)',
'label'=>
'Nom',
'enabled'=>1,
'visible'=>-1,
'position'=>35,
'showoncombobox'=>1),
197 'name_alias' =>array(
'type'=>
'varchar(128)',
'label'=>
'Name alias',
'enabled'=>1,
'visible'=>-1,
'position'=>36,
'showoncombobox'=>2),
198 'entity' =>array(
'type'=>
'integer',
'label'=>
'Entity',
'default'=>1,
'enabled'=>1,
'visible'=>-2,
'notnull'=>1,
'position'=>40,
'index'=>1),
199 'ref_ext' =>array(
'type'=>
'varchar(255)',
'label'=>
'RefExt',
'enabled'=>1,
'visible'=>0,
'position'=>45),
200 'code_client' =>array(
'type'=>
'varchar(24)',
'label'=>
'CustomerCode',
'enabled'=>1,
'visible'=>-1,
'position'=>55),
201 'code_fournisseur' =>array(
'type'=>
'varchar(24)',
'label'=>
'SupplierCode',
'enabled'=>1,
'visible'=>-1,
'position'=>60),
202 'code_compta' =>array(
'type'=>
'varchar(24)',
'label'=>
'CustomerAccountancyCode',
'enabled'=>1,
'visible'=>-1,
'position'=>65),
203 'code_compta_fournisseur' =>array(
'type'=>
'varchar(24)',
'label'=>
'SupplierAccountancyCode',
'enabled'=>1,
'visible'=>-1,
'position'=>70),
204 'address' =>array(
'type'=>
'varchar(255)',
'label'=>
'Address',
'enabled'=>1,
'visible'=>-1,
'position'=>75),
205 'zip' =>array(
'type'=>
'varchar(25)',
'label'=>
'Zip',
'enabled'=>1,
'visible'=>-1,
'position'=>80),
206 'town' =>array(
'type'=>
'varchar(50)',
'label'=>
'Town',
'enabled'=>1,
'visible'=>-1,
'position'=>85),
207 'fk_departement' =>array(
'type'=>
'integer',
'label'=>
'State',
'enabled'=>1,
'visible'=>-1,
'position'=>90),
208 'fk_pays' =>array(
'type'=>
'integer:Ccountry:core/class/ccountry.class.php',
'label'=>
'Country',
'enabled'=>1,
'visible'=>-1,
'position'=>95),
209 'phone' =>array(
'type'=>
'varchar(20)',
'label'=>
'Phone',
'enabled'=>1,
'visible'=>-1,
'position'=>100),
210 'fax' =>array(
'type'=>
'varchar(20)',
'label'=>
'Fax',
'enabled'=>1,
'visible'=>-1,
'position'=>105),
211 'url' =>array(
'type'=>
'varchar(255)',
'label'=>
'Url',
'enabled'=>1,
'visible'=>-1,
'position'=>110),
212 'email' =>array(
'type'=>
'varchar(128)',
'label'=>
'Email',
'enabled'=>1,
'visible'=>-1,
'position'=>115),
213 'socialnetworks' =>array(
'type'=>
'text',
'label'=>
'Socialnetworks',
'enabled'=>1,
'visible'=>-1,
'position'=>120),
214 'fk_effectif' =>array(
'type'=>
'integer',
'label'=>
'Workforce',
'enabled'=>1,
'visible'=>-1,
'position'=>170),
215 'fk_typent' =>array(
'type'=>
'integer',
'label'=>
'TypeOfCompany',
'enabled'=>1,
'visible'=>-1,
'position'=>175,
'csslist'=>
'minwidth200'),
216 'fk_forme_juridique' =>array(
'type'=>
'integer',
'label'=>
'JuridicalStatus',
'enabled'=>1,
'visible'=>-1,
'position'=>180),
217 'fk_currency' =>array(
'type'=>
'varchar(3)',
'label'=>
'Currency',
'enabled'=>1,
'visible'=>-1,
'position'=>185),
218 'siren' =>array(
'type'=>
'varchar(128)',
'label'=>
'Idprof1',
'enabled'=>1,
'visible'=>-1,
'position'=>190),
219 'siret' =>array(
'type'=>
'varchar(128)',
'label'=>
'Idprof2',
'enabled'=>1,
'visible'=>-1,
'position'=>195),
220 'ape' =>array(
'type'=>
'varchar(128)',
'label'=>
'Idprof3',
'enabled'=>1,
'visible'=>-1,
'position'=>200),
221 'idprof4' =>array(
'type'=>
'varchar(128)',
'label'=>
'Idprof4',
'enabled'=>1,
'visible'=>-1,
'position'=>205),
222 'idprof5' =>array(
'type'=>
'varchar(128)',
'label'=>
'Idprof5',
'enabled'=>1,
'visible'=>-1,
'position'=>206),
223 'idprof6' =>array(
'type'=>
'varchar(128)',
'label'=>
'Idprof6',
'enabled'=>1,
'visible'=>-1,
'position'=>207),
224 'tva_intra' =>array(
'type'=>
'varchar(20)',
'label'=>
'Tva intra',
'enabled'=>1,
'visible'=>-1,
'position'=>210),
225 'capital' =>array(
'type'=>
'double(24,8)',
'label'=>
'Capital',
'enabled'=>1,
'visible'=>-1,
'position'=>215),
226 'fk_stcomm' =>array(
'type'=>
'integer',
'label'=>
'CommercialStatus',
'enabled'=>1,
'visible'=>-1,
'notnull'=>1,
'position'=>220),
227 'note_public' =>array(
'type'=>
'html',
'label'=>
'NotePublic',
'enabled'=>1,
'visible'=>0,
'position'=>225),
228 'note_private' =>array(
'type'=>
'html',
'label'=>
'NotePrivate',
'enabled'=>1,
'visible'=>0,
'position'=>230),
229 'prefix_comm' =>array(
'type'=>
'varchar(5)',
'label'=>
'Prefix comm',
'enabled'=>
"getDolGlobalInt('SOCIETE_USEPREFIX')",
'visible'=>-1,
'position'=>235),
230 'client' =>array(
'type'=>
'tinyint(4)',
'label'=>
'Client',
'enabled'=>1,
'visible'=>-1,
'position'=>240),
231 'fournisseur' =>array(
'type'=>
'tinyint(4)',
'label'=>
'Fournisseur',
'enabled'=>1,
'visible'=>-1,
'position'=>245),
232 'supplier_account' =>array(
'type'=>
'varchar(32)',
'label'=>
'Supplier account',
'enabled'=>1,
'visible'=>-1,
'position'=>250),
233 'fk_prospectlevel' =>array(
'type'=>
'varchar(12)',
'label'=>
'ProspectLevel',
'enabled'=>1,
'visible'=>-1,
'position'=>255),
234 'customer_bad' =>array(
'type'=>
'tinyint(4)',
'label'=>
'Customer bad',
'enabled'=>1,
'visible'=>-1,
'position'=>260),
235 'customer_rate' =>array(
'type'=>
'double',
'label'=>
'Customer rate',
'enabled'=>1,
'visible'=>-1,
'position'=>265),
236 'supplier_rate' =>array(
'type'=>
'double',
'label'=>
'Supplier rate',
'enabled'=>1,
'visible'=>-1,
'position'=>270),
237 'fk_user_creat' =>array(
'type'=>
'integer:User:user/class/user.class.php',
'label'=>
'UserAuthor',
'enabled'=>1,
'visible'=>-2,
'position'=>275),
238 'fk_user_modif' =>array(
'type'=>
'integer:User:user/class/user.class.php',
'label'=>
'UserModif',
'enabled'=>1,
'visible'=>-2,
'notnull'=>-1,
'position'=>280),
241 'mode_reglement' =>array(
'type'=>
'tinyint(4)',
'label'=>
'Mode reglement',
'enabled'=>1,
'visible'=>-1,
'position'=>295),
242 'cond_reglement' =>array(
'type'=>
'tinyint(4)',
'label'=>
'Cond reglement',
'enabled'=>1,
'visible'=>-1,
'position'=>300),
243 'deposit_percent' =>array(
'type'=>
'varchar(63)',
'label'=>
'DepositPercent',
'enabled'=>1,
'visible'=>-1,
'position'=>301),
244 'mode_reglement_supplier' =>array(
'type'=>
'integer',
'label'=>
'Mode reglement supplier',
'enabled'=>1,
'visible'=>-1,
'position'=>305),
245 'cond_reglement_supplier' =>array(
'type'=>
'integer',
'label'=>
'Cond reglement supplier',
'enabled'=>1,
'visible'=>-1,
'position'=>308),
246 'outstanding_limit' =>array(
'type'=>
'double(24,8)',
'label'=>
'OutstandingBill',
'enabled'=>1,
'visible'=>-1,
'position'=>310,
'isameasure'=>1),
247 'order_min_amount' =>array(
'type'=>
'double(24,8)',
'label'=>
'Order min amount',
'enabled'=>
'isModEnabled("commande") && !empty($conf->global->ORDER_MANAGE_MIN_AMOUNT)',
'visible'=>-1,
'position'=>315,
'isameasure'=>1),
248 'supplier_order_min_amount' =>array(
'type'=>
'double(24,8)',
'label'=>
'Supplier order min amount',
'enabled'=>
'isModEnabled("commande") && !empty($conf->global->ORDER_MANAGE_MIN_AMOUNT)',
'visible'=>-1,
'position'=>320,
'isameasure'=>1),
249 'fk_shipping_method' =>array(
'type'=>
'integer',
'label'=>
'Fk shipping method',
'enabled'=>1,
'visible'=>-1,
'position'=>330),
250 'tva_assuj' =>array(
'type'=>
'tinyint(4)',
'label'=>
'Tva assuj',
'enabled'=>1,
'visible'=>-1,
'position'=>335),
251 'localtax1_assuj' =>array(
'type'=>
'tinyint(4)',
'label'=>
'Localtax1 assuj',
'enabled'=>1,
'visible'=>-1,
'position'=>340),
252 'localtax1_value' =>array(
'type'=>
'double(6,3)',
'label'=>
'Localtax1 value',
'enabled'=>1,
'visible'=>-1,
'position'=>345),
253 'localtax2_assuj' =>array(
'type'=>
'tinyint(4)',
'label'=>
'Localtax2 assuj',
'enabled'=>1,
'visible'=>-1,
'position'=>350),
254 'localtax2_value' =>array(
'type'=>
'double(6,3)',
'label'=>
'Localtax2 value',
'enabled'=>1,
'visible'=>-1,
'position'=>355),
255 'vat_reverse_charge' =>array(
'type'=>
'tinyint(4)',
'label'=>
'Vat reverse charge',
'enabled'=>1,
'visible'=>-1,
'position'=>335),
256 'barcode' =>array(
'type'=>
'varchar(255)',
'label'=>
'Barcode',
'enabled'=>1,
'visible'=>-1,
'position'=>360),
257 'price_level' =>array(
'type'=>
'integer',
'label'=>
'Price level',
'enabled'=>
'$conf->global->PRODUIT_MULTIPRICES || $conf->global->PRODUIT_CUSTOMER_PRICES_BY_QTY_MULTIPRICES',
'visible'=>-1,
'position'=>365),
258 'default_lang' =>array(
'type'=>
'varchar(6)',
'label'=>
'Default lang',
'enabled'=>1,
'visible'=>-1,
'position'=>370),
259 'canvas' =>array(
'type'=>
'varchar(32)',
'label'=>
'Canvas',
'enabled'=>1,
'visible'=>-1,
'position'=>375),
260 'fk_barcode_type' =>array(
'type'=>
'integer',
'label'=>
'Fk barcode type',
'enabled'=>1,
'visible'=>-1,
'position'=>405),
261 'webservices_url' =>array(
'type'=>
'varchar(255)',
'label'=>
'Webservices url',
'enabled'=>1,
'visible'=>-1,
'position'=>410),
262 'webservices_key' =>array(
'type'=>
'varchar(128)',
'label'=>
'Webservices key',
'enabled'=>1,
'visible'=>-1,
'position'=>415),
263 'fk_incoterms' =>array(
'type'=>
'integer',
'label'=>
'Fk incoterms',
'enabled'=>1,
'visible'=>-1,
'position'=>425),
264 'location_incoterms' =>array(
'type'=>
'varchar(255)',
'label'=>
'Location incoterms',
'enabled'=>1,
'visible'=>-1,
'position'=>430),
265 'model_pdf' =>array(
'type'=>
'varchar(255)',
'label'=>
'Model pdf',
'enabled'=>1,
'visible'=>0,
'position'=>435),
266 'last_main_doc' =>array(
'type'=>
'varchar(255)',
'label'=>
'LastMainDoc',
'enabled'=>1,
'visible'=>-1,
'position'=>270),
267 'fk_multicurrency' =>array(
'type'=>
'integer',
'label'=>
'Fk multicurrency',
'enabled'=>1,
'visible'=>-1,
'position'=>440),
268 'multicurrency_code' =>array(
'type'=>
'varchar(255)',
'label'=>
'Multicurrency code',
'enabled'=>1,
'visible'=>-1,
'position'=>445),
269 'fk_account' =>array(
'type'=>
'integer',
'label'=>
'PaymentBankAccount',
'enabled'=>1,
'visible'=>-1,
'position'=>450),
270 'fk_warehouse' =>array(
'type'=>
'integer',
'label'=>
'Warehouse',
'enabled'=>1,
'visible'=>-1,
'position'=>455),
271 'logo' =>array(
'type'=>
'varchar(255)',
'label'=>
'Logo',
'enabled'=>1,
'visible'=>-1,
'position'=>400),
272 'logo_squarred' =>array(
'type'=>
'varchar(255)',
'label'=>
'Logo squarred',
'enabled'=>1,
'visible'=>-1,
'position'=>401),
273 'status' =>array(
'type'=>
'tinyint(4)',
'label'=>
'Status',
'enabled'=>1,
'visible'=>-1,
'position'=>500),
274 'import_key' =>array(
'type'=>
'varchar(14)',
'label'=>
'ImportId',
'enabled'=>1,
'visible'=>-2,
'position'=>1000),
328 public $departement_code;
471 public $socialobject;
481 public $tva_assuj = 1;
492 public $vat_reverse_charge = 0;
495 public $localtax1_assuj;
496 public $localtax1_value;
497 public $localtax2_assuj;
498 public $localtax2_value;
513 public $typent_id = 0;
516 public $effectif_id = 0;
517 public $forme_juridique_code;
518 public $forme_juridique = 0;
520 public $remise_percent;
521 public $remise_supplier_percent;
523 public $mode_reglement_id;
524 public $cond_reglement_id;
525 public $deposit_percent;
526 public $mode_reglement_supplier_id;
527 public $cond_reglement_supplier_id;
528 public $transport_mode_supplier_id;
533 public $fk_prospectlevel;
546 public $date_modification;
552 public $user_modification;
558 public $date_creation;
564 public $user_creation;
576 public $prospect = 0;
594 public $code_fournisseur;
600 public $code_compta_client;
614 public $accountancy_code_customer;
620 public $code_compta_fournisseur;
626 public $accountancy_code_supplier;
632 public $code_compta_product;
645 public $note_private;
663 public $stcomm_picto;
669 public $status_prospect_label;
680 public $outstanding_limit;
685 public $order_min_amount;
690 public $supplier_order_min_amount;
696 public $commercial_id;
708 public $default_lang;
734 public $webservices_url;
740 public $webservices_key;
760 public $logo_squarred;
765 public $logo_squarred_small;
770 public $logo_squarred_mini;
775 public $accountancy_code_sell;
780 public $accountancy_code_buy;
786 public $fk_multicurrency;
792 public $fk_warehouse;
797 public $multicurrency_code;
801 public $partnerships = array();
807 public $bank_account;
810 const STATUS_CEASED = 0;
811 const STATUS_INACTIVITY = 1;
857 $this->fournisseur = 0;
858 $this->typent_id = 0;
859 $this->effectif_id = 0;
860 $this->forme_juridique_code = 0;
861 $this->tva_assuj = 1;
862 $this->vat_reverse_charge = 0;
865 if (!empty($conf->global->COMPANY_SHOW_ADDRESS_SELECTLIST)) {
866 $this->fields[
'address'][
'showoncombobox'] = $conf->global->COMPANY_SHOW_ADDRESS_SELECTLIST;
867 $this->fields[
'zip'][
'showoncombobox'] = $conf->global->COMPANY_SHOW_ADDRESS_SELECTLIST;
868 $this->fields[
'town'][
'showoncombobox'] = $conf->global->COMPANY_SHOW_ADDRESS_SELECTLIST;
884 global $langs, $conf, $mysoc;
889 if (empty($this->status)) {
892 $this->
name = $this->
name ?trim($this->
name) : trim($this->nom);
894 $this->nom = $this->name;
895 if (empty($this->client)) {
898 if (empty($this->fournisseur)) {
899 $this->fournisseur = 0;
901 $this->import_key = trim($this->import_key);
903 $this->accountancy_code_customer = trim($this->code_compta);
904 $this->accountancy_code_supplier = trim($this->code_compta_fournisseur);
905 $this->accountancy_code_buy = trim($this->accountancy_code_buy);
906 $this->accountancy_code_sell = trim($this->accountancy_code_sell);
908 if (!empty($this->multicurrency_code)) {
911 if (empty($this->fk_multicurrency)) {
912 $this->multicurrency_code =
'';
913 $this->fk_multicurrency = 0;
923 if ($this->code_client == -1 || $this->code_client ===
'auto') {
926 if ($this->code_fournisseur == -1 || $this->code_fournisseur ===
'auto') {
932 $result = $this->
verify();
935 $this->entity = ((isset($this->entity) && is_numeric($this->entity)) ? $this->entity : $conf->entity);
937 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"societe (";
939 $sql .=
", name_alias";
942 $sql .=
", fk_user_creat";
943 $sql .=
", fk_typent";
947 $sql .=
", fk_stcomm";
948 $sql .=
", fk_incoterms";
949 $sql .=
", location_incoterms";
950 $sql .=
", import_key";
951 $sql .=
", fk_multicurrency";
952 $sql .=
", multicurrency_code";
953 if (empty($conf->global->MAIN_COMPANY_PERENTITY_SHARED)) {
954 $sql .=
", vat_reverse_charge";
955 $sql .=
", accountancy_code_buy";
956 $sql .=
", accountancy_code_sell";
958 $sql .=
") VALUES ('".$this->db->escape($this->name).
"', '".$this->db->escape($this->name_alias).
"', ".((int) $this->entity).
", '".$this->db->idate($now).
"'";
959 $sql .=
", ".(!empty($user->id) ? ((int) $user->id) :
"null");
960 $sql .=
", ".(!empty($this->typent_id) ? ((int) $this->typent_id) :
"null");
961 $sql .=
", ".(!empty($this->canvas) ?
"'".$this->db->escape($this->canvas).
"'" :
"null");
962 $sql .=
", ".((int) $this->status);
963 $sql .=
", ".(!empty($this->ref_ext) ?
"'".$this->db->escape($this->ref_ext).
"'" :
"null");
965 $sql .=
", ".(int) $this->fk_incoterms;
966 $sql .=
", '".$this->db->escape($this->location_incoterms).
"'";
967 $sql .=
", ".(!empty($this->import_key) ?
"'".$this->db->escape($this->import_key).
"'" :
"null");
968 $sql .=
", ".(int) $this->fk_multicurrency;
969 $sql .=
", '".$this->db->escape($this->multicurrency_code).
"'";
970 if (empty($conf->global->MAIN_COMPANY_PERENTITY_SHARED)) {
971 $sql .=
", ".(empty($this->vat_reverse_charge) ?
'0' :
'1');
972 $sql .=
", '" . $this->db->escape($this->accountancy_code_buy) .
"'";
973 $sql .=
", '" . $this->db->escape($this->accountancy_code_sell) .
"'";
977 dol_syslog(get_class($this).
"::create", LOG_DEBUG);
978 $result = $this->db->query($sql);
980 $this->
id = $this->db->last_insert_id(MAIN_DB_PREFIX.
"societe");
982 $ret = $this->
update($this->
id, $user, 0, 1, 1,
'add');
985 if (!$error && !empty($conf->global->MAIN_COMPANY_PERENTITY_SHARED)) {
986 $this->db->query(
"DELETE FROM ".MAIN_DB_PREFIX.
"societe_perentity WHERE fk_soc = ".((
int) $this->id).
" AND entity = ".((
int) $conf->entity));
988 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"societe_perentity (";
991 $sql .=
", vat_reverse_charge";
992 $sql .=
", accountancy_code_customer";
993 $sql .=
", accountancy_code_supplier";
994 $sql .=
", accountancy_code_buy";
995 $sql .=
", accountancy_code_sell";
996 $sql .=
") VALUES (";
998 $sql .=
", ".((int) $conf->entity);
999 $sql .=
", ".(empty($this->vat_reverse_charge) ?
'0' :
'1');
1000 $sql .=
", '".$this->db->escape($this->accountancy_code_customer).
"'";
1001 $sql .=
", '".$this->db->escape($this->accountancy_code_supplier).
"'";
1002 $sql .=
", '".$this->db->escape($this->accountancy_code_buy).
"'";
1003 $sql .=
", '".$this->db->escape($this->accountancy_code_sell).
"'";
1005 $result = $this->db->query($sql);
1008 $this->error =
'ErrorFailedToUpdateAccountancyForEntity';
1013 if ($this->commercial_id !=
'' && $this->commercial_id != -1) {
1015 } elseif (empty($user->rights->societe->client->voir)) {
1023 $result = $this->
call_trigger(
'COMPANY_CREATE', $user);
1034 dol_syslog(get_class($this).
"::Create success id=".$this->
id);
1035 $this->db->commit();
1038 dol_syslog(get_class($this).
"::Create echec update ".$this->error.(empty($this->errors) ?
'' :
' '.join(
',', $this->errors)), LOG_ERR);
1039 $this->db->rollback();
1043 if ($this->db->lasterrno() ==
'DB_ERROR_RECORD_ALREADY_EXISTS') {
1044 $this->error = $langs->trans(
"ErrorCompanyNameAlreadyExists", $this->name);
1047 $this->error = $this->db->lasterror();
1050 $this->db->rollback();
1054 $this->db->rollback();
1055 dol_syslog(get_class($this).
"::Create fails verify ".join(
',', $this->errors), LOG_WARNING);
1080 require_once DOL_DOCUMENT_ROOT.
'/contact/class/contact.class.php';
1081 $contact =
new Contact($this->db);
1083 $contact->name = $this->name_bis;
1084 $contact->firstname = $this->firstname;
1085 $contact->civility_id = $this->civility_id;
1086 $contact->socid = $this->id;
1087 $contact->statut = 1;
1088 $contact->status = 1;
1090 $contact->country_id = $this->country_id;
1091 $contact->state_id = $this->state_id;
1092 $contact->address = $this->address;
1093 $contact->email = $this->email;
1094 $contact->zip = $this->zip;
1095 $contact->town = $this->town;
1097 $contact->phone_pro = $this->phone;
1099 $contactId = $contact->create($user, $notrigger);
1100 if ($contactId < 0) {
1102 $this->error = $contact->error;
1103 $this->errors = $contact->errors;
1104 dol_syslog(get_class($this).
"::create_individual ERROR:".$this->error, LOG_ERR);
1107 if (empty($error) && is_array($tags) && !empty($tags)) {
1108 $result = $contact->setCategories($tags);
1111 $this->error = $contact->error;
1112 $this->errors = array_merge($this->errors, $contact->errors);
1113 dol_syslog(get_class($this).
"::create_individual Affect Tag ERROR:".$this->error, LOG_ERR);
1114 $contactId = $result;
1118 if (empty($error) && isModEnabled(
'mailing') && !empty($contact->email) && isset($no_email)) {
1119 $result = $contact->setNoEmail($no_email);
1121 $this->error = $contact->error;
1122 $this->errors = array_merge($this->errors, $contact->errors);
1123 dol_syslog(get_class($this).
"::create_individual set mailing status ERROR:".$this->error, LOG_ERR);
1124 $contactId = $result;
1128 if (empty($error)) {
1129 dol_syslog(get_class($this).
"::create_individual success");
1130 $this->db->commit();
1132 $this->db->rollback();
1146 global $conf, $langs, $mysoc;
1149 $this->errors = array();
1153 $this->nom = $this->name;
1156 $this->errors[] =
'ErrorBadThirdPartyName';
1160 if ($this->client) {
1162 if ($rescode != 0 && $rescode != -5) {
1163 if ($rescode == -1) {
1164 $this->errors[] =
'ErrorBadCustomerCodeSyntax';
1165 } elseif ($rescode == -2) {
1166 $this->errors[] =
'ErrorCustomerCodeRequired';
1167 } elseif ($rescode == -3) {
1168 $this->errors[] =
'ErrorCustomerCodeAlreadyUsed';
1169 } elseif ($rescode == -4) {
1170 $this->errors[] =
'ErrorPrefixRequired';
1172 $this->errors[] =
'ErrorUnknownOnCustomerCodeCheck';
1179 if ($this->fournisseur) {
1181 if ($rescode != 0 && $rescode != -5) {
1182 if ($rescode == -1) {
1183 $this->errors[] =
'ErrorBadSupplierCodeSyntax';
1184 } elseif ($rescode == -2) {
1185 $this->errors[] =
'ErrorSupplierCodeRequired';
1186 } elseif ($rescode == -3) {
1187 $this->errors[] =
'ErrorSupplierCodeAlreadyUsed';
1188 } elseif ($rescode == -4) {
1189 $this->errors[] =
'ErrorPrefixRequired';
1191 $this->errors[] =
'ErrorUnknownOnSupplierCodeCheck';
1198 $array_to_check = array(
'IDPROF1',
'IDPROF2',
'IDPROF3',
'IDPROF4',
'IDPROF5',
'IDPROF6',
'EMAIL',
'TVA_INTRA');
1199 foreach ($array_to_check as $key) {
1200 $keymin = strtolower($key);
1201 $i = (int) preg_replace(
'/[^0-9]/',
'', $key);
1202 $vallabel = $this->$keymin;
1207 if ($mysoc->country_id > 0 && $this->country_id == $mysoc->country_id) {
1208 $idprof_mandatory =
'SOCIETE_'.$key.
'_MANDATORY';
1209 if (!$vallabel && !empty($conf->global->$idprof_mandatory)) {
1210 $langs->load(
"errors");
1212 $this->errors[] = $langs->trans(
"ErrorProdIdIsMandatory", $langs->transcountry(
'ProfId'.$i, $this->country_code)).
' ('.$langs->trans(
"ForbiddenBySetupRules").
')';
1219 if ($this->
id_prof_exists($keymin, $vallabel, ($this->
id > 0 ? $this->
id : 0))) {
1220 $langs->load(
"errors");
1222 $this->errors[] = $langs->transcountry(
'ProfId'.$i, $this->country_code).
" ".$langs->trans(
"ErrorProdIdAlreadyExist", $vallabel).
' ('.$langs->trans(
"ForbiddenBySetupRules").
')';
1228 if ($key ==
'EMAIL') {
1230 if (!empty($conf->global->SOCIETE_EMAIL_MANDATORY) && !isValidEMail($this->email)) {
1231 $langs->load(
"errors");
1233 $this->errors[] = $langs->trans(
"ErrorBadEMail", $this->email).
' ('.$langs->trans(
"ForbiddenBySetupRules").
')';
1237 if (!$error && $vallabel && !empty($conf->global->SOCIETE_EMAIL_UNIQUE)) {
1238 if ($this->
id_prof_exists($keymin, $vallabel, ($this->
id > 0 ? $this->
id : 0))) {
1239 $langs->load(
"errors");
1240 $error++; $this->errors[] = $langs->trans(
'Email').
" ".$langs->trans(
"ErrorProdIdAlreadyExist", $vallabel).
' ('.$langs->trans(
"ForbiddenBySetupRules").
')';
1243 } elseif ($key ==
'TVA_INTRA') {
1245 if ($vallabel && !empty($conf->global->SOCIETE_VAT_INTRA_UNIQUE)) {
1246 if ($this->
id_prof_exists($keymin, $vallabel, ($this->
id > 0 ? $this->
id : 0))) {
1247 $langs->load(
"errors");
1248 $error++; $this->errors[] = $langs->trans(
'VATIntra').
" ".$langs->trans(
"ErrorProdIdAlreadyExist", $vallabel).
' ('.$langs->trans(
"ForbiddenBySetupRules").
')';
1274 public function update($id, $user =
'', $call_trigger = 1, $allowmodcodeclient = 0, $allowmodcodefournisseur = 0, $action =
'update', $nosyncmember = 1)
1276 global $langs, $conf, $hookmanager;
1278 require_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
1286 dol_syslog(get_class($this).
"::Update id=".$id.
" call_trigger=".$call_trigger.
" allowmodcodeclient=".$allowmodcodeclient.
" allowmodcodefournisseur=".$allowmodcodefournisseur);
1292 $this->entity = ((isset($this->entity) && is_numeric($this->entity)) ? $this->entity : $conf->entity);
1293 $this->
name = $this->
name ? trim($this->
name) : trim($this->nom);
1294 $this->nom = $this->name;
1295 $this->name_alias = trim($this->name_alias);
1296 $this->ref_ext = trim($this->ref_ext);
1297 $this->address = $this->address ?trim($this->address) : trim($this->address);
1298 $this->zip = $this->zip ?trim($this->zip) : trim($this->zip);
1299 $this->town = $this->town ?trim($this->town) : trim($this->town);
1300 $this->state_id = trim($this->state_id);
1301 $this->country_id = ($this->country_id > 0) ? $this->country_id : 0;
1302 $this->phone = trim($this->phone);
1303 $this->phone = preg_replace(
"/\s/",
"", $this->phone);
1304 $this->phone = preg_replace(
"/\./",
"", $this->phone);
1305 $this->fax = trim($this->fax);
1306 $this->fax = preg_replace(
"/\s/",
"", $this->fax);
1307 $this->fax = preg_replace(
"/\./",
"", $this->fax);
1308 $this->email = trim($this->email);
1309 $this->url = $this->url ?
clean_url($this->url, 0) :
'';
1310 $this->note_private = trim($this->note_private);
1311 $this->note_public = trim($this->note_public);
1312 $this->idprof1 = trim($this->idprof1);
1313 $this->idprof2 = trim($this->idprof2);
1314 $this->idprof3 = trim($this->idprof3);
1315 $this->idprof4 = trim($this->idprof4);
1316 $this->idprof5 = (!empty($this->idprof5) ?trim($this->idprof5) :
'');
1317 $this->idprof6 = (!empty($this->idprof6) ?trim($this->idprof6) :
'');
1318 $this->prefix_comm = trim($this->prefix_comm);
1319 $this->outstanding_limit =
price2num($this->outstanding_limit);
1320 $this->order_min_amount =
price2num($this->order_min_amount);
1321 $this->supplier_order_min_amount =
price2num($this->supplier_order_min_amount);
1323 $this->tva_assuj = trim($this->tva_assuj);
1325 $this->vat_reverse_charge = empty($this->vat_reverse_charge) ?
'0' :
'1';
1326 if (empty($this->status)) {
1330 if (!empty($this->multicurrency_code)) {
1333 if (empty($this->fk_multicurrency)) {
1334 $this->multicurrency_code =
'';
1335 $this->fk_multicurrency = 0;
1339 $this->localtax1_assuj = trim($this->localtax1_assuj);
1340 $this->localtax2_assuj = trim($this->localtax2_assuj);
1342 $this->localtax1_value = trim($this->localtax1_value);
1343 $this->localtax2_value = trim($this->localtax2_value);
1345 if ($this->capital !=
'') {
1346 $this->capital =
price2num(trim($this->capital));
1348 if (!is_numeric($this->capital)) {
1349 $this->capital =
'';
1352 $this->effectif_id = trim($this->effectif_id);
1353 $this->forme_juridique_code = trim($this->forme_juridique_code);
1356 $this->barcode = trim($this->barcode);
1359 if ($this->code_client == -1 || $this->code_client ===
'auto') {
1362 if ($this->code_fournisseur == -1 || $this->code_fournisseur ===
'auto') {
1366 $this->code_compta_client = trim(empty($this->code_compta) ? $this->code_compta_client : $this->code_compta);
1367 $this->code_compta = $this->code_compta_client;
1368 $this->code_compta_fournisseur = trim($this->code_compta_fournisseur);
1371 if (!is_numeric($this->client) && !is_numeric($this->fournisseur)) {
1372 $langs->load(
"errors");
1373 $this->error = $langs->trans(
"BadValueForParameterClientOrSupplier");
1378 if (!empty($allowmodcodeclient) && !empty($this->client)) {
1380 if (empty($this->code_compta_client)) {
1391 if (!empty($allowmodcodefournisseur) && !empty($this->fournisseur)) {
1393 if (empty($this->code_compta_fournisseur)) {
1404 $this->webservices_url = $this->webservices_url ?
clean_url($this->webservices_url, 0) :
'';
1405 $this->webservices_key = trim($this->webservices_key);
1407 $this->accountancy_code_buy = trim($this->accountancy_code_buy);
1408 $this->accountancy_code_sell = trim($this->accountancy_code_sell);
1411 $this->fk_incoterms = (int) $this->fk_incoterms;
1412 $this->location_incoterms = trim($this->location_incoterms);
1419 if ($action !=
'add' && $action !=
'merge') {
1422 $result = $this->
verify();
1426 if (is_array($this->errors)) {
1427 if (in_array(
'ErrorBadCustomerCodeSyntax', $this->errors) && is_object($this->oldcopy) && $this->oldcopy->code_client == $this->code_client) {
1428 if (($key = array_search(
'ErrorBadCustomerCodeSyntax', $this->errors)) !==
false) {
1429 unset($this->errors[$key]);
1432 if (in_array(
'ErrorBadSupplierCodeSyntax', $this->errors) && is_object($this->oldcopy) && $this->oldcopy->code_fournisseur == $this->code_fournisseur) {
1433 if (($key = array_search(
'ErrorBadSupplierCodeSyntax', $this->errors)) !==
false) {
1434 unset($this->errors[$key]);
1437 if (empty($this->errors)) {
1444 dol_syslog(get_class($this).
"::update verify ok or not done");
1446 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"societe SET ";
1447 $sql .=
"entity = ".$this->db->escape($this->entity);
1448 $sql .=
",nom = '".$this->db->escape($this->
name).
"'";
1449 $sql .=
",name_alias = '".$this->db->escape($this->name_alias).
"'";
1450 $sql .=
",ref_ext = ".(!empty($this->ref_ext) ?
"'".$this->db->escape($this->ref_ext).
"'" :
"null");
1451 $sql .=
",address = '".$this->db->escape($this->address).
"'";
1453 $sql .=
",zip = ".(!empty($this->zip) ?
"'".$this->db->escape($this->zip).
"'" :
"null");
1454 $sql .=
",town = ".(!empty($this->town) ?
"'".$this->db->escape($this->town).
"'" :
"null");
1456 $sql .=
",fk_departement = ".((!empty($this->state_id) && $this->state_id > 0) ? ((
int) $this->state_id) :
'null');
1457 $sql .=
",fk_pays = ".((!empty($this->country_id) && $this->country_id > 0) ? ((
int) $this->country_id) :
'null');
1459 $sql .=
",phone = ".(!empty($this->phone) ?
"'".$this->db->escape($this->phone).
"'" :
"null");
1460 $sql .=
",fax = ".(!empty($this->fax) ?
"'".$this->db->escape($this->fax).
"'" :
"null");
1461 $sql .=
",email = ".(!empty($this->email) ?
"'".$this->db->escape($this->email).
"'" :
"null");
1462 $sql .=
",socialnetworks = '".$this->db->escape(json_encode($this->socialnetworks)).
"'";
1463 $sql .=
",url = ".(!empty($this->url) ?
"'".$this->db->escape($this->url).
"'" :
"null");
1465 $sql .=
",parent = ".($this->parent > 0 ? $this->parent :
"null");
1467 $sql .=
",note_private = ".(!empty($this->note_private) ?
"'".$this->db->escape($this->note_private).
"'" :
"null");
1468 $sql .=
",note_public = ".(!empty($this->note_public) ?
"'".$this->db->escape($this->note_public).
"'" :
"null");
1470 $sql .=
",siren = '".$this->db->escape($this->idprof1).
"'";
1471 $sql .=
",siret = '".$this->db->escape($this->idprof2).
"'";
1472 $sql .=
",ape = '".$this->db->escape($this->idprof3).
"'";
1473 $sql .=
",idprof4 = '".$this->db->escape($this->idprof4).
"'";
1474 $sql .=
",idprof5 = '".$this->db->escape($this->idprof5).
"'";
1475 $sql .=
",idprof6 = '".$this->db->escape($this->idprof6).
"'";
1477 $sql .=
",tva_assuj = ".($this->tva_assuj !=
'' ?
"'".$this->db->escape($this->tva_assuj).
"'" :
"null");
1478 $sql .=
",tva_intra = '".$this->db->escape($this->tva_intra).
"'";
1479 if (empty($conf->global->MAIN_COMPANY_PERENTITY_SHARED)) {
1480 $sql .=
",vat_reverse_charge = " . ($this->vat_reverse_charge !=
'' ?
"'" . $this->db->escape($this->vat_reverse_charge) .
"'" : 0);
1482 $sql .=
",status = ".((int) $this->status);
1485 $sql .=
",localtax1_assuj = ".($this->localtax1_assuj !=
'' ?
"'".$this->db->escape($this->localtax1_assuj).
"'" :
"null");
1486 $sql .=
",localtax2_assuj = ".($this->localtax2_assuj !=
'' ?
"'".$this->db->escape($this->localtax2_assuj).
"'" :
"null");
1487 if ($this->localtax1_assuj == 1) {
1488 if ($this->localtax1_value !=
'') {
1489 $sql .=
",localtax1_value =".$this->localtax1_value;
1491 $sql .=
",localtax1_value =0.000";
1494 $sql .=
",localtax1_value =0.000";
1497 if ($this->localtax2_assuj == 1) {
1498 if ($this->localtax2_value !=
'') {
1499 $sql .=
",localtax2_value =".$this->localtax2_value;
1501 $sql .=
",localtax2_value =0.000";
1504 $sql .=
",localtax2_value =0.000";
1507 $sql .=
",capital = ".($this->capital ==
'' ?
"null" : $this->capital);
1509 $sql .=
",prefix_comm = ".(!empty($this->prefix_comm) ?
"'".$this->db->escape($this->prefix_comm).
"'" :
"null");
1511 $sql .=
",fk_effectif = ".($this->effectif_id > 0 ? ((int) $this->effectif_id) :
"null");
1512 if (isset($this->stcomm_id)) {
1513 $sql .=
",fk_stcomm=".(int) $this->stcomm_id;
1515 if (isset($this->typent_id)) {
1516 $sql .=
",fk_typent = ".($this->typent_id > 0 ? ((int) $this->typent_id) :
"0");
1519 $sql .=
",fk_forme_juridique = ".(!empty($this->forme_juridique_code) ?
"'".$this->db->escape($this->forme_juridique_code).
"'" :
"null");
1521 $sql .=
",mode_reglement = ".(!empty($this->mode_reglement_id) ?
"'".$this->db->escape($this->mode_reglement_id).
"'" :
"null");
1522 $sql .=
",cond_reglement = ".(!empty($this->cond_reglement_id) ?
"'".$this->db->escape($this->cond_reglement_id).
"'" :
"null");
1523 $sql .=
",deposit_percent = ".(!empty($this->deposit_percent) ?
"'".$this->db->escape($this->deposit_percent).
"'" :
"null");
1524 $sql .=
",transport_mode = ".(!empty($this->transport_mode_id) ?
"'".$this->db->escape($this->transport_mode_id).
"'" :
"null");
1525 $sql .=
",mode_reglement_supplier = ".(!empty($this->mode_reglement_supplier_id) ?
"'".$this->db->escape($this->mode_reglement_supplier_id).
"'" :
"null");
1526 $sql .=
",cond_reglement_supplier = ".(!empty($this->cond_reglement_supplier_id) ?
"'".$this->db->escape($this->cond_reglement_supplier_id).
"'" :
"null");
1527 $sql .=
",transport_mode_supplier = ".(!empty($this->transport_mode_supplier_id) ?
"'".$this->db->escape($this->transport_mode_supplier_id).
"'" :
"null");
1528 $sql .=
",fk_shipping_method = ".(!empty($this->shipping_method_id) ?
"'".$this->db->escape($this->shipping_method_id).
"'" :
"null");
1530 $sql .=
",client = ".(!empty($this->client) ? $this->client : 0);
1531 $sql .=
",fournisseur = ".(!empty($this->fournisseur) ? $this->fournisseur : 0);
1532 $sql .=
",barcode = ".(!empty($this->barcode) ?
"'".$this->db->escape($this->barcode).
"'" :
"null");
1533 $sql .=
",default_lang = ".(!empty($this->default_lang) ?
"'".$this->db->escape($this->default_lang).
"'" :
"null");
1534 $sql .=
",logo = ".(!empty($this->logo) ?
"'".$this->db->escape($this->logo).
"'" :
"null");
1535 $sql .=
",logo_squarred = ".(!empty($this->logo_squarred) ?
"'".$this->db->escape($this->logo_squarred).
"'" :
"null");
1536 $sql .=
",outstanding_limit= ".($this->outstanding_limit !=
'' ? $this->outstanding_limit :
'null');
1537 $sql .=
",order_min_amount= ".($this->order_min_amount !=
'' ? $this->order_min_amount :
'null');
1538 $sql .=
",supplier_order_min_amount= ".($this->supplier_order_min_amount !=
'' ? $this->supplier_order_min_amount :
'null');
1539 $sql .=
",fk_prospectlevel='".$this->db->escape($this->fk_prospectlevel).
"'";
1540 if (empty($conf->global->MAIN_COMPANY_PERENTITY_SHARED)) {
1541 $sql .=
", accountancy_code_buy = '" . $this->db->escape($this->accountancy_code_buy) .
"'";
1542 $sql .=
", accountancy_code_sell= '" . $this->db->escape($this->accountancy_code_sell) .
"'";
1544 $sql .=
", code_compta = ".(!empty($this->code_compta_client) ?
"'".$this->db->escape($this->code_compta_client).
"'" :
"null");
1548 $sql .=
", code_compta_fournisseur = ".(($this->code_compta_fournisseur !=
"") ?
"'".$this->db->escape($this->code_compta_fournisseur).
"'" :
"null");
1551 $sql .=
",webservices_url = ".(!empty($this->webservices_url) ?
"'".$this->db->escape($this->webservices_url).
"'" :
"null");
1552 $sql .=
",webservices_key = ".(!empty($this->webservices_key) ?
"'".$this->db->escape($this->webservices_key).
"'" :
"null");
1555 $sql .=
", fk_incoterms = ".((int) $this->fk_incoterms);
1556 $sql .=
", location_incoterms = ".(!empty($this->location_incoterms) ?
"'".$this->db->escape($this->location_incoterms).
"'" :
"null");
1559 $sql .=
", code_client = ".(!empty($this->code_client) ?
"'".$this->db->escape($this->code_client).
"'" :
"null");
1563 $sql .=
", code_fournisseur = ".(!empty($this->code_fournisseur) ?
"'".$this->db->escape($this->code_fournisseur).
"'" :
"null");
1565 $sql .=
", fk_user_modif = ".($user->id > 0 ? $user->id :
"null");
1566 $sql .=
", fk_multicurrency = ".(int) $this->fk_multicurrency;
1567 $sql .=
", multicurrency_code = '".$this->db->escape($this->multicurrency_code).
"'";
1568 $sql .=
", model_pdf = '".$this->db->escape($this->model_pdf).
"'";
1569 $sql .=
" WHERE rowid = ".(int) $id;
1571 $resql = $this->db->query($sql);
1573 if (is_object($this->oldcopy)) {
1574 if ($this->oldcopy->country_id != $this->country_id) {
1575 unset($this->country_code);
1576 unset($this->country);
1578 if ($this->oldcopy->state_id != $this->state_id) {
1579 unset($this->state_code);
1580 unset($this->state);
1583 unset($this->country_code);
1584 unset($this->country);
1585 unset($this->state_code);
1586 unset($this->state);
1589 $nbrowsaffected = $this->db->affected_rows($resql);
1591 if (!$error && $nbrowsaffected) {
1593 if (!$nosyncmember && isModEnabled(
'adherent')) {
1594 require_once DOL_DOCUMENT_ROOT.
'/adherents/class/adherent.class.php';
1596 dol_syslog(get_class($this).
"::update update linked member");
1598 $lmember =
new Adherent($this->db);
1599 $result = $lmember->fetch(0, 0, $this->
id);
1602 $lmember->company = $this->name;
1605 $lmember->address = $this->address;
1606 $lmember->zip = $this->zip;
1607 $lmember->town = $this->town;
1608 $lmember->email = $this->email;
1609 $lmember->socialnetworks = $this->socialnetworks;
1610 $lmember->phone = $this->phone;
1611 $lmember->state_id = $this->state_id;
1612 $lmember->country_id = $this->country_id;
1613 $lmember->default_lang = $this->default_lang;
1615 $result = $lmember->update($user, 0, 1, 1, 1);
1617 $this->error = $lmember->error;
1618 $this->errors = array_merge($this->errors, $lmember->errors);
1619 dol_syslog(get_class($this).
"::update ".$this->error, LOG_ERR);
1622 } elseif ($result < 0) {
1623 $this->error = $lmember->error;
1632 if (!$error && !empty($conf->global->MAIN_COMPANY_PERENTITY_SHARED)) {
1633 $this->db->query(
"DELETE FROM ".MAIN_DB_PREFIX.
"societe_perentity WHERE fk_soc = ".((
int) $this->id).
" AND entity = ".((
int) $conf->entity));
1635 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"societe_perentity (";
1638 $sql .=
", vat_reverse_charge";
1639 $sql .=
", accountancy_code_customer";
1640 $sql .=
", accountancy_code_supplier";
1641 $sql .=
", accountancy_code_buy";
1642 $sql .=
", accountancy_code_sell";
1643 $sql .=
") VALUES (";
1645 $sql .=
", ".$conf->entity;
1646 $sql .=
", ".(empty($this->vat_reverse_charge) ?
'0' :
'1');
1647 $sql .=
", '".$this->db->escape($this->code_compta_client).
"'";
1648 $sql .=
", '".$this->db->escape($this->code_compta_fournisseur).
"'";
1649 $sql .=
", '".$this->db->escape($this->accountancy_code_buy).
"'";
1650 $sql .=
", '".$this->db->escape($this->accountancy_code_sell).
"'";
1652 $result = $this->db->query($sql);
1655 $this->error =
'ErrorFailedToUpdateAccountancyForEntity';
1667 if (!$error && empty($conf->global->MAIN_EXTRALANGUAGES_DISABLED)) {
1674 if (!$error && $call_trigger) {
1676 $result = $this->
call_trigger(
'COMPANY_MODIFY', $user);
1684 dol_syslog(get_class($this).
"::Update success");
1685 $this->db->commit();
1688 $this->db->rollback();
1692 if ($this->db->errno() ==
'DB_ERROR_RECORD_ALREADY_EXISTS') {
1694 $this->error = $langs->trans(
"ErrorDuplicateField");
1697 $this->error = $this->db->lasterror();
1700 $this->db->rollback();
1704 $this->db->rollback();
1705 dol_syslog(get_class($this).
"::Update fails verify ".join(
',', $this->errors), LOG_WARNING);
1727 public function fetch($rowid, $ref =
'', $ref_ext =
'', $barcode =
'', $idprof1 =
'', $idprof2 =
'', $idprof3 =
'', $idprof4 =
'', $idprof5 =
'', $idprof6 =
'', $email =
'', $ref_alias =
'')
1732 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)) {
1736 $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';
1737 $sql .=
', s.status, s.fk_warehouse';
1738 $sql .=
', s.price_level';
1739 $sql .=
', s.tms as date_modification, s.fk_user_creat, s.fk_user_modif';
1740 $sql .=
', s.phone, s.fax, s.email';
1741 $sql .=
', s.socialnetworks';
1742 $sql .=
', s.url, s.zip, s.town, s.note_private, s.note_public, s.client, s.fournisseur';
1743 $sql .=
', s.siren as idprof1, s.siret as idprof2, s.ape as idprof3, s.idprof4, s.idprof5, s.idprof6';
1744 $sql .=
', s.capital, s.tva_intra';
1745 $sql .=
', s.fk_typent as typent_id';
1746 $sql .=
', s.fk_effectif as effectif_id';
1747 $sql .=
', s.fk_forme_juridique as forme_juridique_code';
1748 $sql .=
', s.webservices_url, s.webservices_key, s.model_pdf, s.last_main_doc';
1749 if (empty($conf->global->MAIN_COMPANY_PERENTITY_SHARED)) {
1750 $sql .=
', s.code_compta, s.code_compta_fournisseur, s.accountancy_code_buy, s.accountancy_code_sell';
1751 $sql .=
', s.vat_reverse_charge as soc_vat_reverse_charge';
1753 $sql .=
', spe.accountancy_code_customer as code_compta, spe.accountancy_code_supplier as code_compta_fournisseur, spe.accountancy_code_buy, spe.accountancy_code_sell';
1754 $sql .=
', spe.vat_reverse_charge as spe_vat_reverse_charge';
1756 $sql .=
', s.code_client, s.code_fournisseur, s.parent, s.barcode';
1757 $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';
1758 $sql .=
', s.fk_account, s.tva_assuj';
1759 $sql .=
', s.mode_reglement_supplier, s.cond_reglement_supplier, s.transport_mode_supplier';
1760 $sql .=
', s.localtax1_assuj, s.localtax1_value, s.localtax2_assuj, s.localtax2_value, s.fk_prospectlevel, s.default_lang, s.logo, s.logo_squarred';
1761 $sql .=
', s.fk_shipping_method';
1762 $sql .=
', s.outstanding_limit, s.import_key, s.canvas, s.fk_incoterms, s.location_incoterms';
1763 $sql .=
', s.order_min_amount, s.supplier_order_min_amount';
1764 $sql .=
', s.fk_multicurrency, s.multicurrency_code';
1765 $sql .=
', fj.libelle as forme_juridique';
1766 $sql .=
', e.libelle as effectif';
1767 $sql .=
', c.code as country_code, c.label as country';
1768 $sql .=
', d.code_departement as state_code, d.nom as state';
1769 $sql .=
', r.rowid as region_id, r.code_region as region_code';
1770 $sql .=
', st.libelle as stcomm, st.picto as stcomm_picto';
1771 $sql .=
', te.code as typent_code';
1772 $sql .=
', i.libelle as label_incoterms';
1773 if (!isModEnabled(
'multicompany')) {
1774 $sql .=
', s.remise_client, s.remise_supplier';
1776 $sql .=
', sr.remise_client, sr2.remise_supplier';
1778 $sql .=
' FROM '.MAIN_DB_PREFIX.
'societe as s';
1779 if (!empty($conf->global->MAIN_COMPANY_PERENTITY_SHARED)) {
1780 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"societe_perentity as spe ON spe.fk_soc = s.rowid AND spe.entity = ".((int) $conf->entity);
1782 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_effectif as e ON s.fk_effectif = e.id';
1783 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_country as c ON s.fk_pays = c.rowid';
1784 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_stcomm as st ON s.fk_stcomm = st.id';
1785 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_forme_juridique as fj ON s.fk_forme_juridique = fj.code';
1786 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_departements as d ON s.fk_departement = d.rowid';
1787 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_regions as r ON d.fk_region = r.code_region ';
1788 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_typent as te ON s.fk_typent = te.id';
1789 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_incoterms as i ON s.fk_incoterms = i.rowid';
1792 if (isModEnabled(
'multicompany')) {
1793 $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').
'))';
1794 $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').
'))';
1796 $sql .=
' WHERE s.entity IN ('.getEntity($this->element).
')';
1798 $sql .=
' AND s.rowid = '.((int) $rowid);
1801 $sql .=
" AND s.nom = '".$this->db->escape($ref).
"'";
1804 $sql .=
" AND s.name_alias = '".$this->db->escape($ref_alias).
"'";
1807 $sql .=
" AND s.ref_ext = '".$this->db->escape($ref_ext).
"'";
1810 $sql .=
" AND s.barcode = '".$this->db->escape($barcode).
"'";
1813 $sql .=
" AND s.siren = '".$this->db->escape($idprof1).
"'";
1816 $sql .=
" AND s.siret = '".$this->db->escape($idprof2).
"'";
1819 $sql .=
" AND s.ape = '".$this->db->escape($idprof3).
"'";
1822 $sql .=
" AND s.idprof4 = '".$this->db->escape($idprof4).
"'";
1825 $sql .=
" AND s.idprof5 = '".$this->db->escape($idprof5).
"'";
1828 $sql .=
" AND s.idprof6 = '".$this->db->escape($idprof6).
"'";
1831 $sql .=
" AND s.email = '".$this->db->escape($email).
"'";
1834 $resql = $this->db->query($sql);
1836 $num = $this->db->num_rows($resql);
1838 $this->error =
'Fetch found several records. Rename one of thirdparties to avoid duplicate.';
1842 $obj = $this->db->fetch_object($resql);
1844 $this->
id = $obj->rowid;
1845 $this->entity = $obj->entity;
1846 $this->canvas = $obj->canvas;
1848 $this->
ref = $obj->rowid;
1849 $this->
name = $obj->name;
1850 $this->nom = $obj->name;
1851 $this->name_alias = $obj->name_alias;
1852 $this->ref_ext = $obj->ref_ext;
1854 $this->date_creation = $this->db->jdate($obj->date_creation);
1855 $this->date_modification = $this->db->jdate($obj->date_modification);
1856 $this->user_creation = $obj->fk_user_creat;
1857 $this->user_modification = $obj->fk_user_modif;
1859 $this->address = $obj->address;
1860 $this->zip = $obj->zip;
1861 $this->town = $obj->town;
1863 $this->country_id = $obj->country_id;
1864 $this->country_code = $obj->country_id ? $obj->country_code :
'';
1865 $this->country = $obj->country_id ? (($langs->transnoentities(
'Country'.$obj->country_code) !=
'Country'.$obj->country_code) ? $langs->transnoentities(
'Country'.$obj->country_code) : $obj->country) :
'';
1867 $this->state_id = $obj->state_id;
1868 $this->state_code = $obj->state_code;
1869 $this->region_id = $obj->region_id;
1870 $this->region_code = $obj->region_code;
1871 $this->state = ($obj->state !=
'-' ? $obj->state :
'');
1873 $transcode = $langs->trans(
'StatusProspect'.$obj->fk_stcomm);
1874 $label = ($transcode !=
'StatusProspect'.$obj->fk_stcomm ? $transcode : $obj->stcomm);
1875 $this->stcomm_id = $obj->fk_stcomm;
1876 $this->status_prospect_label = $label;
1877 $this->stcomm_picto = $obj->stcomm_picto;
1879 $this->email = $obj->email;
1880 $this->socialnetworks = ($obj->socialnetworks ? (array) json_decode($obj->socialnetworks,
true) : array());
1882 $this->url = $obj->url;
1883 $this->phone = $obj->phone;
1884 $this->fax = $obj->fax;
1886 $this->parent = $obj->parent;
1888 $this->idprof1 = $obj->idprof1;
1889 $this->idprof2 = $obj->idprof2;
1890 $this->idprof3 = $obj->idprof3;
1891 $this->idprof4 = $obj->idprof4;
1892 $this->idprof5 = $obj->idprof5;
1893 $this->idprof6 = $obj->idprof6;
1895 $this->capital = $obj->capital;
1897 $this->code_client = $obj->code_client;
1898 $this->code_fournisseur = $obj->code_fournisseur;
1900 $this->code_compta = $obj->code_compta;
1901 $this->code_compta_client = $obj->code_compta;
1902 $this->code_compta_fournisseur = $obj->code_compta_fournisseur;
1904 $this->barcode = $obj->barcode;
1906 $this->tva_assuj = $obj->tva_assuj;
1907 $this->tva_intra = $obj->tva_intra;
1909 if (!empty($obj->spe_vat_reverse_charge)) {
1910 $this->vat_reverse_charge = $obj->spe_vat_reverse_charge;
1911 } elseif (!empty($obj->soc_vat_reverse_charge)) {
1912 $this->vat_reverse_charge = $obj->soc_vat_reverse_charge;
1914 $this->vat_reverse_charge = 0;
1917 $this->status = $obj->status;
1920 $this->localtax1_assuj = $obj->localtax1_assuj;
1921 $this->localtax2_assuj = $obj->localtax2_assuj;
1923 $this->localtax1_value = $obj->localtax1_value;
1924 $this->localtax2_value = $obj->localtax2_value;
1926 $this->typent_id = $obj->typent_id;
1927 $this->typent_code = $obj->typent_code;
1929 $this->effectif_id = $obj->effectif_id;
1930 $this->effectif = $obj->effectif_id ? $obj->effectif :
'';
1932 $this->forme_juridique_code = $obj->forme_juridique_code;
1933 $this->forme_juridique = $obj->forme_juridique_code ? $obj->forme_juridique :
'';
1935 $this->fk_prospectlevel = $obj->fk_prospectlevel;
1937 $this->prefix_comm = $obj->prefix_comm;
1939 $this->remise_percent = $obj->remise_client ?
price2num($obj->remise_client) : 0;
1940 $this->remise_supplier_percent = $obj->remise_supplier;
1942 $this->mode_reglement_id = $obj->mode_reglement;
1943 $this->cond_reglement_id = $obj->cond_reglement;
1944 $this->deposit_percent = $obj->deposit_percent;
1945 $this->transport_mode_id = $obj->transport_mode;
1946 $this->mode_reglement_supplier_id = $obj->mode_reglement_supplier;
1947 $this->cond_reglement_supplier_id = $obj->cond_reglement_supplier;
1948 $this->transport_mode_supplier_id = $obj->transport_mode_supplier;
1949 $this->shipping_method_id = ($obj->fk_shipping_method > 0) ? $obj->fk_shipping_method :
null;
1950 $this->fk_account = $obj->fk_account;
1952 $this->client = $obj->client;
1953 $this->fournisseur = $obj->fournisseur;
1955 $this->note = $obj->note_private;
1956 $this->note_private = $obj->note_private;
1957 $this->note_public = $obj->note_public;
1958 $this->model_pdf = $obj->model_pdf;
1959 $this->modelpdf = $obj->model_pdf;
1960 $this->default_lang = $obj->default_lang;
1961 $this->logo = $obj->logo;
1962 $this->logo_squarred = $obj->logo_squarred;
1964 $this->webservices_url = $obj->webservices_url;
1965 $this->webservices_key = $obj->webservices_key;
1967 $this->accountancy_code_buy = $obj->accountancy_code_buy;
1968 $this->accountancy_code_sell = $obj->accountancy_code_sell;
1970 $this->outstanding_limit = $obj->outstanding_limit;
1971 $this->order_min_amount = $obj->order_min_amount;
1972 $this->supplier_order_min_amount = $obj->supplier_order_min_amount;
1975 $this->price_level = $obj->price_level;
1978 $this->fk_warehouse = $obj->fk_warehouse;
1980 $this->import_key = $obj->import_key;
1983 $this->fk_incoterms = $obj->fk_incoterms;
1984 $this->location_incoterms = $obj->location_incoterms;
1985 $this->label_incoterms = $obj->label_incoterms;
1988 $this->fk_multicurrency = $obj->fk_multicurrency;
1989 $this->multicurrency_code = $obj->multicurrency_code;
1992 $this->model_pdf = $obj->model_pdf;
1993 $this->last_main_doc = $obj->last_main_doc;
2003 $this->db->free($resql);
2005 $this->error = $this->db->lasterror();
2006 $this->errors[] = $this->db->lasterror();
2011 if ((!empty($conf->global->PRODUIT_MULTIPRICES) || !empty($conf->global->PRODUIT_CUSTOMER_PRICES_BY_QTY_MULTIPRICES)) && empty($this->price_level)) {
2012 $this->price_level = 1;
2026 public function delete($id,
User $fuser =
null, $call_trigger = 1)
2028 global $langs, $conf, $user;
2030 if (empty($fuser)) {
2034 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
2036 $entity = isset($this->entity) ? $this->entity : $conf->entity;
2038 dol_syslog(get_class($this).
"::delete", LOG_DEBUG);
2043 if (empty($objectisused)) {
2047 if (!$error && $call_trigger) {
2049 $result = $this->
call_trigger(
'COMPANY_DELETE', $fuser);
2057 require_once DOL_DOCUMENT_ROOT.
'/categories/class/categorie.class.php';
2059 $toute_categs = array();
2062 if ($this->client || $this->prospect) {
2063 $toute_categs[
'customer'] = $static_cat->containing($this->
id, Categorie::TYPE_CUSTOMER);
2065 if ($this->fournisseur) {
2066 $toute_categs[
'supplier'] = $static_cat->containing($this->
id, Categorie::TYPE_SUPPLIER);
2070 foreach ($toute_categs as $type => $categs_type) {
2071 foreach ($categs_type as $cat) {
2072 $cat->del_type($this, $type);
2078 foreach ($this->childtablesoncascade as $tabletodelete) {
2079 $deleteFromObject = explode(
':', $tabletodelete);
2080 if (count($deleteFromObject) >= 2) {
2081 $className = str_replace(
'@',
'', $deleteFromObject[0]);
2082 $filepath = $deleteFromObject[1];
2083 $columnName = $deleteFromObject[2];
2085 $child_object =
new $className($this->db);
2086 $result = $child_object->deleteByParentField($id, $columnName);
2089 $this->errors[] = $child_object->error;
2094 $this->errors[] =
'Cannot include child class file '.$filepath;
2098 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.$tabletodelete;
2099 $sql .=
" WHERE fk_soc = ".((int) $id);
2100 if (!$this->db->query($sql)) {
2102 $this->errors[] = $this->db->lasterror();
2114 dol_syslog(get_class($this).
"::delete error -3 ".$this->error, LOG_ERR);
2120 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"societe";
2121 $sql .=
" SET parent = NULL";
2122 $sql .=
" WHERE parent = ".((int) $id);
2123 if (!$this->db->query($sql)) {
2125 $this->errors[] = $this->db->lasterror();
2131 if (!empty($conf->global->MAIN_COMPANY_PERENTITY_SHARED)) {
2132 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"societe_perentity";
2133 $sql .=
" WHERE fk_soc = ".((int) $id);
2134 if (!$this->db->query($sql)) {
2136 $this->errors[] = $this->db->lasterror();
2140 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"societe";
2141 $sql .=
" WHERE rowid = ".((int) $id);
2142 if (!$this->db->query($sql)) {
2144 $this->errors[] = $this->db->lasterror();
2149 $this->db->commit();
2152 if (!empty($conf->societe->multidir_output[$entity])) {
2153 $docdir = $conf->societe->multidir_output[$entity].
"/".$id;
2162 $this->db->rollback();
2166 dol_syslog(
"Can't remove thirdparty with id ".$id.
". There is ".$objectisused.
" childs", LOG_WARNING);
2183 if (($this->client == 2 || $this->client == 3) && empty($conf->global->SOCIETE_DISABLE_PROSPECTSCUSTOMERS)) {
2186 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"societe";
2187 $sql .=
" SET client = ".((int) $newclient);
2188 $sql .=
" WHERE rowid = ".((int) $this->
id);
2190 $resql = $this->db->query($sql);
2192 $this->client = $newclient;
2213 global $conf, $langs;
2216 $note = trim($note);
2218 $this->error = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"NoteReason"));
2222 dol_syslog(get_class($this).
"::set_remise_client ".$remise.
", ".$note.
", ".$user->id);
2230 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"societe ";
2231 $sql .=
" SET remise_client = '".$this->db->escape($remise).
"'";
2232 $sql .=
" WHERE rowid = ".((int) $this->
id);
2233 $resql = $this->db->query($sql);
2235 $this->db->rollback();
2236 $this->error = $this->db->error();
2241 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"societe_remise";
2242 $sql .=
" (entity, datec, fk_soc, remise_client, note, fk_user_author)";
2243 $sql .=
" VALUES (".$conf->entity.
", '".$this->db->idate($now).
"', ".((int) $this->
id).
", '".$this->db->escape($remise).
"',";
2244 $sql .=
" '".$this->db->escape($note).
"',";
2245 $sql .=
" ".((int) $user->id);
2248 $resql = $this->db->query($sql);
2250 $this->db->rollback();
2251 $this->error = $this->db->lasterror();
2255 $this->db->commit();
2274 global $conf, $langs;
2277 $note = trim($note);
2279 $this->error = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"NoteReason"));
2283 dol_syslog(get_class($this).
"::set_remise_supplier ".$remise.
", ".$note.
", ".$user->id);
2291 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"societe ";
2292 $sql .=
" SET remise_supplier = '".$this->db->escape($remise).
"'";
2293 $sql .=
" WHERE rowid = ".((int) $this->
id);
2294 $resql = $this->db->query($sql);
2296 $this->db->rollback();
2297 $this->error = $this->db->error();
2302 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"societe_remise_supplier";
2303 $sql .=
" (entity, datec, fk_soc, remise_supplier, note, fk_user_author)";
2304 $sql .=
" VALUES (".$conf->entity.
", '".$this->db->idate($now).
"', ".((int) $this->
id).
", '".$this->db->escape($remise).
"',";
2305 $sql .=
" '".$this->db->escape($note).
"',";
2306 $sql .=
" ".((int) $user->id);
2309 $resql = $this->db->query($sql);
2311 $this->db->rollback();
2312 $this->error = $this->db->lasterror();
2316 $this->db->commit();
2335 public function set_remise_except($remise,
User $user, $desc, $vatrate =
'', $discount_type = 0, $price_base_type =
'HT')
2342 $desc = trim($desc);
2345 if (!($remise > 0)) {
2346 $this->error = $langs->trans(
"ErrorWrongValueForParameter",
"1");
2350 $this->error = $langs->trans(
"ErrorWrongValueForParameter",
"3");
2354 if ($this->
id > 0) {
2358 if (preg_match(
'/\((.*)\)/', $vatrate, $reg)) {
2359 $vat_src_code = $reg[1];
2360 $vatrate = preg_replace(
'/\s*\(.*\)/',
'', $vatrate);
2363 require_once DOL_DOCUMENT_ROOT.
'/core/class/discount.class.php';
2366 $discount->fk_soc = $this->id;
2368 $discount->discount_type = $discount_type;
2370 if ($price_base_type ==
'TTC') {
2371 $discount->amount_ttc = $discount->multicurrency_amount_ttc =
price2num($remise,
'MT');
2372 $discount->amount_ht = $discount->multicurrency_amount_ht =
price2num($remise / (1 + $vatrate / 100),
'MT');
2373 $discount->amount_tva = $discount->multicurrency_amount_tva =
price2num($discount->amount_ttc - $discount->amount_ht,
'MT');
2375 $discount->amount_ht = $discount->multicurrency_amount_ht =
price2num($remise,
'MT');
2376 $discount->amount_tva = $discount->multicurrency_amount_tva =
price2num($remise * $vatrate / 100,
'MT');
2377 $discount->amount_ttc = $discount->multicurrency_amount_ttc =
price2num($discount->amount_ht + $discount->amount_tva,
'MT');
2380 $discount->tva_tx =
price2num($vatrate);
2381 $discount->vat_src_code = $vat_src_code;
2383 $discount->description = $desc;
2385 $result = $discount->create($user);
2389 $this->error = $discount->error;
2408 require_once DOL_DOCUMENT_ROOT.
'/core/class/discount.class.php';
2411 $result = $discountstatic->getAvailableDiscounts($this, $user, $filter, $maxvalue, $discount_type);
2415 $this->error = $discountstatic->error;
2433 $reparray = array();
2435 $sql =
"SELECT DISTINCT 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";
2436 $sql .=
", u.office_fax, u.user_mobile, u.personal_mobile";
2437 $sql .=
" FROM ".MAIN_DB_PREFIX.
"societe_commerciaux as sc, ".MAIN_DB_PREFIX.
"user as u";
2438 if (isModEnabled(
'multicompany') && !empty($conf->global->MULTICOMPANY_TRANSVERSE_MODE)) {
2439 $sql .=
", ".MAIN_DB_PREFIX.
"usergroup_user as ug";
2440 $sql .=
" WHERE ((ug.fk_user = sc.fk_user";
2441 $sql .=
" AND ug.entity = ".$conf->entity.
")";
2442 $sql .=
" OR u.admin = 1)";
2444 $sql .=
" WHERE entity in (0, ".$conf->entity.
")";
2447 $sql .=
" AND u.rowid = sc.fk_user AND sc.fk_soc = ".((int) $this->
id);
2448 if (empty($sortfield) && empty($sortorder)) {
2449 $sortfield =
'u.lastname,u.firstname';
2450 $sortorder =
'ASC,ASC';
2452 $sql .= $this->db->order($sortfield, $sortorder);
2454 $resql = $this->db->query($sql);
2456 $num = $this->db->num_rows($resql);
2459 $obj = $this->db->fetch_object($resql);
2462 $reparray[$i][
'id'] = $obj->rowid;
2463 $reparray[$i][
'lastname'] = $obj->lastname;
2464 $reparray[$i][
'firstname'] = $obj->firstname;
2465 $reparray[$i][
'email'] = $obj->email;
2466 $reparray[$i][
'phone'] = $obj->office_phone;
2467 $reparray[$i][
'office_phone'] = $obj->office_phone;
2468 $reparray[$i][
'office_fax'] = $obj->office_fax;
2469 $reparray[$i][
'user_mobile'] = $obj->user_mobile;
2470 $reparray[$i][
'personal_mobile'] = $obj->personal_mobile;
2471 $reparray[$i][
'job'] = $obj->job;
2472 $reparray[$i][
'statut'] = $obj->status;
2473 $reparray[$i][
'status'] = $obj->status;
2474 $reparray[$i][
'entity'] = $obj->entity;
2475 $reparray[$i][
'login'] = $obj->login;
2476 $reparray[$i][
'photo'] = $obj->photo;
2477 $reparray[$i][
'gender'] = $obj->gender;
2479 $reparray[] = $obj->rowid;
2502 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"societe";
2503 $sql .=
" SET price_level = ".((int) $price_level);
2504 $sql .=
" WHERE rowid = ".((int) $this->
id);
2506 if (!$this->db->query($sql)) {
2511 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"societe_prices";
2512 $sql .=
" (datec, fk_soc, price_level, fk_user_author)";
2513 $sql .=
" VALUES ('".$this->db->idate($now).
"', ".((int) $this->
id).
", ".((int) $price_level).
", ".((int) $user->id).
")";
2515 if (!$this->db->query($sql)) {
2537 if ($this->
id > 0 && $commid > 0) {
2541 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"societe_commerciaux";
2542 $sql .=
" WHERE fk_soc = ".((int) $this->
id).
" AND fk_user = ".((int) $commid);
2544 $resql = $this->db->query($sql);
2546 dol_syslog(get_class($this).
"::add_commercial Error ".$this->db->lasterror());
2552 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"societe_commerciaux";
2553 $sql .=
" (fk_soc, fk_user)";
2554 $sql .=
" VALUES (".((int) $this->
id).
", ".((int) $commid).
")";
2556 $resql = $this->db->query($sql);
2558 dol_syslog(get_class($this).
"::add_commercial Error ".$this->db->lasterror());
2564 $this->context = array(
'commercial_modified' => $commid);
2566 $result = $this->
call_trigger(
'COMPANY_LINK_SALE_REPRESENTATIVE', $user);
2573 $this->db->commit();
2576 $this->db->rollback();
2596 $this->context = array(
'commercial_modified'=>$commid);
2598 $result = $this->
call_trigger(
'COMPANY_UNLINK_SALE_REPRESENTATIVE', $user);
2603 if ($this->
id > 0 && $commid > 0) {
2604 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"societe_commerciaux ";
2605 $sql .=
" WHERE fk_soc = ".((int) $this->
id).
" AND fk_user = ".((int) $commid);
2607 if (!$this->db->query($sql)) {
2608 dol_syslog(get_class($this).
"::del_commercial Erreur");
2622 global $conf, $langs, $user;
2624 $langs->loadLangs([
'companies',
'commercial']);
2628 $option = $params[
'option'] ??
'';
2629 $nofetch = !empty($params[
'nofetch']);
2631 $noaliasinname = (empty($params[
'noaliasinname']) ? 0 : $params[
'noaliasinname']);
2633 if (!empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) {
2634 return [
'optimize' => $langs->trans(
"ShowCompany")];
2637 if (!empty($this->logo) && class_exists(
'Form')) {
2638 $photo =
'<div class="photointooltip floatright">';
2639 $photo .=
Form::showphoto(
'societe', $this, 0, 40, 0,
'photoref',
'mini', 0);
2641 $datas[
'photo'] = $photo;
2642 } elseif (!empty($this->logo_squarred) && class_exists(
'Form')) {
2648 $datas[
'divopen'] =
'<div class="centpercent">';
2650 if ($option ==
'customer' || $option ==
'compta' || $option ==
'category') {
2651 $datas[
'picto'] =
img_picto(
'', $this->picto).
' <u class="paddingrightonly">'.$langs->trans(
"Customer").
'</u>';
2652 } elseif ($option ==
'prospect' && empty($conf->global->SOCIETE_DISABLE_PROSPECTS)) {
2653 $datas[
'picto'] =
img_picto(
'', $this->picto).
' <u class="paddingrightonly">'.$langs->trans(
"Prospect").
'</u>';
2654 } elseif ($option ==
'supplier' || $option ==
'category_supplier') {
2655 $datas[
'picto'] =
img_picto(
'', $this->picto).
' <u class="paddingrightonly">'.$langs->trans(
"Supplier").
'</u>';
2656 } elseif ($option ==
'agenda') {
2657 $datas[
'picto'] =
img_picto(
'', $this->picto).
' <u class="paddingrightonly">'.$langs->trans(
"ThirdParty").
'</u>';
2658 } elseif ($option ==
'project') {
2659 $datas[
'picto'] =
img_picto(
'', $this->picto).
' <u class="paddingrightonly">'.$langs->trans(
"ThirdParty").
'</u>';
2660 } elseif ($option ==
'margin') {
2661 $datas[
'picto'] =
img_picto(
'', $this->picto).
' <u class="paddingrightonly">'.$langs->trans(
"ThirdParty").
'</u>';
2662 } elseif ($option ==
'contact') {
2663 $datas[
'picto'] =
img_picto(
'', $this->picto).
' <u class="paddingrightonly">'.$langs->trans(
"ThirdParty").
'</u>';
2664 } elseif ($option ==
'ban') {
2665 $datas[
'picto'] =
img_picto(
'', $this->picto).
' <u class="paddingrightonly">'.$langs->trans(
"ThirdParty").
'</u>';
2669 if (empty($datas[
'picto'])) {
2670 $datas[
'picto'] =
img_picto(
'', $this->picto).
' <u class="paddingrightonly">'.$langs->trans(
"ThirdParty").
'</u>';
2672 if (isset($this->status)) {
2673 $datas[
'status'] =
' '.$this->getLibStatut(5);
2675 if (isset($this->client) && isset($this->fournisseur)) {
2676 $datas[
'type'] =
' ' . $this->
getTypeUrl(1);
2679 if (!empty($this->name_alias) && empty($noaliasinname)) {
2682 if (!empty($this->email)) {
2683 $datas[
'email'] =
'<br>'.img_picto(
'',
'email',
'class="pictofixedwidth"').$this->email;
2685 if (!empty($this->url)) {
2686 $datas[
'url'] =
'<br>'.img_picto(
'',
'globe',
'class="pictofixedwidth"').$this->url;
2688 if (!empty($this->phone) || !empty($this->fax)) {
2689 $phonelist = array();
2691 $phonelist[] =
dol_print_phone($this->phone, $this->country_code, $this->
id, 0,
'',
' ',
'phone');
2694 $phonelist[] =
dol_print_phone($this->fax, $this->country_code, $this->
id, 0,
'',
' ',
'fax');
2696 $datas[
'phonelist'] =
'<br>'.implode(
' ', $phonelist);
2699 if (!empty($this->address)) {
2700 $datas[
'address'] =
'<br><b>'.$langs->trans(
"Address").
':</b> '.
dol_format_address($this, 1,
' ', $langs);
2701 } elseif (!empty($this->country_code)) {
2702 $datas[
'address'] =
'<br><b>'.$langs->trans(
'Country').
':</b> '.$this->country_code;
2704 if (!empty($this->tva_intra) || (!empty($conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP) && strpos($conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP,
'vatnumber') !==
false)) {
2705 $datas[
'vatintra'] =
'<br><b>'.$langs->trans(
'VATIntra').
':</b> '.
dol_escape_htmltag($this->tva_intra);
2708 if (!empty($conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP)) {
2709 if (strpos($conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP,
'profid1') !==
false && $langs->trans(
'ProfId1'.$this->country_code) !=
'-') {
2710 $datas[
'profid1'] =
'<br><b>'.$langs->trans(
'ProfId1'.$this->country_code).
':</b> '.$this->idprof1;
2712 if (strpos($conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP,
'profid2') !==
false && $langs->trans(
'ProfId2'.$this->country_code) !=
'-') {
2713 $datas[
'profid2'] =
'<br><b>'.$langs->trans(
'ProfId2'.$this->country_code).
':</b> '.$this->idprof2;
2715 if (strpos($conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP,
'profid3') !==
false && $langs->trans(
'ProfId3'.$this->country_code) !=
'-') {
2716 $datas[
'profid3'] =
'<br><b>'.$langs->trans(
'ProfId3'.$this->country_code).
':</b> '.$this->idprof3;
2718 if (strpos($conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP,
'profid4') !==
false && $langs->trans(
'ProfId4'.$this->country_code) !=
'-') {
2719 $datas[
'profid4'] =
'<br><b>'.$langs->trans(
'ProfId4'.$this->country_code).
':</b> '.$this->idprof4;
2721 if (strpos($conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP,
'profid5') !==
false && $langs->trans(
'ProfId5'.$this->country_code) !=
'-') {
2722 $datas[
'profid5'] =
'<br><b>'.$langs->trans(
'ProfId5'.$this->country_code).
':</b> '.$this->idprof5;
2724 if (strpos($conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP,
'profid6') !==
false && $langs->trans(
'ProfId6'.$this->country_code) !=
'-') {
2725 $datas[
'profid6'] =
'<br><b>'.$langs->trans(
'ProfId6'.$this->country_code).
':</b> '.$this->idprof6;
2729 $datas[
'separator'] =
'<br>';
2731 if (!empty($this->code_client) && ($this->client == 1 || $this->client == 3)) {
2732 $datas[
'customercode'] =
'<br><b>'.$langs->trans(
'CustomerCode').
':</b> '.$this->code_client;
2734 if (isModEnabled(
'accounting') && ($this->client == 1 || $this->client == 3)) {
2735 $langs->load(
'compta');
2736 $datas[
'accountancycustomercode'] =
'<br><b>'.$langs->trans(
'CustomerAccountancyCode').
':</b> '.($this->code_compta ? $this->code_compta : $this->code_compta_client);
2739 if (!$nofetch && isModEnabled(
'categorie') && $this->client) {
2740 require_once DOL_DOCUMENT_ROOT .
'/categories/class/categorie.class.php';
2741 $form =
new Form($this->db);
2742 $datas[
'categories_customer'] =
'<br>' . $form->showCategories($this->
id, Categorie::TYPE_CUSTOMER, 1, 1);
2744 if (!empty($this->code_fournisseur) && $this->fournisseur) {
2745 $datas[
'suppliercode'] =
'<br><b>'.$langs->trans(
'SupplierCode').
':</b> '.$this->code_fournisseur;
2747 if (isModEnabled(
'accounting') && $this->fournisseur) {
2748 $langs->load(
'compta');
2749 $datas[
'accountancysuppliercode'] =
'<br><b>'.$langs->trans(
'SupplierAccountancyCode').
':</b> '.$this->code_compta_fournisseur;
2752 if (!$nofetch && isModEnabled(
'categorie') && $this->fournisseur) {
2753 require_once DOL_DOCUMENT_ROOT .
'/categories/class/categorie.class.php';
2754 $form =
new Form($this->db);
2755 $datas[
'categories_supplier'] =
'<br>' . $form->showCategories($this->
id, Categorie::TYPE_SUPPLIER, 1, 1);
2758 $datas[
'divclose'] =
'</div>';
2775 public function getNomUrl($withpicto = 0, $option =
'', $maxlen = 0, $notooltip = 0, $save_lastsearch_value = -1, $noaliasinname = 0, $target =
'')
2777 global $conf, $langs, $hookmanager;
2779 if (!empty($conf->dol_no_mouse_hover)) {
2783 $name = $this->
name ? $this->
name : $this->nom;
2785 if (!empty($conf->global->SOCIETE_ON_SEARCH_AND_LIST_GO_ON_CUSTOMER_OR_SUPPLIER_CARD)) {
2786 if (empty($option) && $this->client > 0) {
2787 $option =
'customer';
2789 if (empty($option) && $this->fournisseur > 0) {
2790 $option =
'supplier';
2794 if (!empty($conf->global->SOCIETE_ADD_REF_IN_LIST) && (!empty($withpicto))) {
2796 if (($this->client) && (!empty($this->code_client)) && ($conf->global->SOCIETE_ADD_REF_IN_LIST == 1 || $conf->global->SOCIETE_ADD_REF_IN_LIST == 2)) {
2797 $code = $this->code_client.
' - ';
2800 if (($this->fournisseur) && (!empty($this->code_fournisseur)) && ($conf->global->SOCIETE_ADD_REF_IN_LIST == 1 || $conf->global->SOCIETE_ADD_REF_IN_LIST == 3)) {
2801 $code .= $this->code_fournisseur.
' - ';
2805 if ($conf->global->SOCIETE_ADD_REF_IN_LIST == 1) {
2806 $name = $code.
' '.$name;
2813 if (!empty($this->name_alias) && empty($noaliasinname)) {
2814 $name .=
' ('.$this->name_alias.
')';
2820 'objecttype' => $this->element,
2821 'option' => $option,
2824 $classfortooltip =
'classfortooltip';
2827 $classfortooltip =
'classforajaxtooltip';
2828 $dataparams =
' data-params="'.dol_escape_htmltag(json_encode($params)).
'"';
2837 if ($option ==
'customer' || $option ==
'compta' || $option ==
'category') {
2838 $linkstart =
'<a href="'.DOL_URL_ROOT.
'/comm/card.php?socid='.$this->id;
2839 } elseif ($option ==
'prospect' && empty($conf->global->SOCIETE_DISABLE_PROSPECTS)) {
2840 $linkstart =
'<a href="'.DOL_URL_ROOT.
'/comm/card.php?socid='.$this->id;
2841 } elseif ($option ==
'supplier' || $option ==
'category_supplier') {
2842 $linkstart =
'<a href="'.DOL_URL_ROOT.
'/fourn/card.php?socid='.$this->id;
2843 } elseif ($option ==
'agenda') {
2844 $linkstart =
'<a href="'.DOL_URL_ROOT.
'/societe/agenda.php?socid='.$this->id;
2845 } elseif ($option ==
'project') {
2846 $linkstart =
'<a href="'.DOL_URL_ROOT.
'/societe/project.php?socid='.$this->id;
2847 } elseif ($option ==
'margin') {
2848 $linkstart =
'<a href="'.DOL_URL_ROOT.
'/margin/tabs/thirdpartyMargins.php?socid='.$this->
id.
'&type=1';
2849 } elseif ($option ==
'contact') {
2850 $linkstart =
'<a href="'.DOL_URL_ROOT.
'/societe/contact.php?socid='.$this->id;
2851 } elseif ($option ==
'ban') {
2852 $linkstart =
'<a href="'.DOL_URL_ROOT.
'/societe/paymentmodes.php?socid='.$this->id;
2856 if (empty($linkstart)) {
2857 $linkstart =
'<a href="'.DOL_URL_ROOT.
'/societe/card.php?socid='.$this->id;
2861 $linkstart .= (!empty($this->canvas) ?
'&canvas='.$this->canvas :
'');
2863 $add_save_lastsearch_values = ($save_lastsearch_value == 1 ? 1 : 0);
2864 if ($save_lastsearch_value == -1 && preg_match(
'/list\.php/', $_SERVER[
"PHP_SELF"])) {
2865 $add_save_lastsearch_values = 1;
2867 if ($add_save_lastsearch_values) {
2868 $linkstart .=
'&save_lastsearch_values=1';
2873 if (empty($notooltip)) {
2874 if (!empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) {
2875 $label = $langs->trans(
"ShowCompany");
2876 $linkclose .=
' alt="'.dol_escape_htmltag($label, 1).
'"';
2878 $linkclose .= ($label ?
' title="'.dol_escape_htmltag($label, 1).
'"' :
' title="tocomplete"');
2879 $linkclose .= $dataparams.
' class="'.$classfortooltip.
' refurl valignmiddle"';
2880 $target_value = array(
'_self',
'_blank',
'_parent',
'_top');
2881 if (in_array($target, $target_value)) {
2882 $linkclose .=
' target="'.dol_escape_htmltag($target).
'"';
2885 $linkclose .=
' class="valignmiddle"';
2887 $linkstart .= $linkclose.
'>';
2891 if (empty($user->rights->societe->client->voir) && $user->socid > 0 && $this->id != $user->socid) {
2896 $result .= $linkstart;
2898 $result .=
img_object(($notooltip ?
'' : $label), ($this->picto ? $this->picto :
'generic'), (
' class="'.(($withpicto != 2) ?
'paddingright' :
'').
'"'), 0, 0, $notooltip ? 0 : 1);
2900 if ($withpicto != 2) {
2903 $result .= $linkend;
2906 $hookmanager->initHooks(array(
'thirdpartydao'));
2907 $parameters = array(
2909 'getnomurl' => &$result,
2910 'withpicto '=> $withpicto,
2913 'notooltip'=> $notooltip,
2914 'save_lastsearch_value'=> $save_lastsearch_value
2916 $reshook = $hookmanager->executeHooks(
'getNomUrl', $parameters, $this, $action);
2918 $result = $hookmanager->resPrint;
2920 $result .= $hookmanager->resPrint;
2935 public function getTypeUrl($withpicto = 0, $option =
'', $notooltip = 0, $tag =
'a')
2937 global $conf, $langs;
2940 if (empty($option) || preg_match(
'/prospect/', $option)) {
2941 if (($this->client == 2 || $this->client == 3) && empty($conf->global->SOCIETE_DISABLE_PROSPECTS)) {
2942 $s .=
'<'.$tag.
' class="customer-back opacitymedium" title="'.$langs->trans(
"Prospect").
'" href="'.DOL_URL_ROOT.
'/comm/card.php?socid='.$this->
id.
'">'.
dol_substr($langs->trans(
"Prospect"), 0, 1).
'</'.$tag.
'>';
2945 if (empty($option) || preg_match(
'/customer/', $option)) {
2946 if (($this->client == 1 || $this->client == 3) && empty($conf->global->SOCIETE_DISABLE_CUSTOMERS)) {
2947 $s .=
'<'.$tag.
' class="customer-back" title="'.$langs->trans(
"Customer").
'" href="'.DOL_URL_ROOT.
'/comm/card.php?socid='.$this->
id.
'">'.
dol_substr($langs->trans(
"Customer"), 0, 1).
'</'.$tag.
'>';
2950 if (empty($option) || preg_match(
'/supplier/', $option)) {
2951 if ((isModEnabled(
"supplier_order") || isModEnabled(
"supplier_invoice")) && $this->fournisseur) {
2952 $s .=
'<'.$tag.
' class="vendor-back" title="'.$langs->trans(
"Supplier").
'" href="'.DOL_URL_ROOT.
'/fourn/card.php?socid='.$this->
id.
'">'.
dol_substr($langs->trans(
"Supplier"), 0, 1).
'</'.$tag.
'>';
2967 return $this->
LibStatut($this->status, $mode);
2982 $langs->load(
'companies');
2984 $statusType =
'status4';
2986 $statusType =
'status6';
2989 if (empty($this->labelStatus) || empty($this->labelStatusShort)) {
2990 $this->labelStatus[0] = $langs->transnoentitiesnoconv(
"ActivityCeased");
2991 $this->labelStatus[1] = $langs->transnoentitiesnoconv(
"InActivity");
2992 $this->labelStatusShort[0] = $langs->transnoentitiesnoconv(
"ActivityCeased");
2993 $this->labelStatusShort[1] = $langs->transnoentitiesnoconv(
"InActivity");
2996 return dolGetStatus($this->labelStatus[$status], $this->labelStatusShort[$status],
'', $statusType, $mode);
3012 if ($this->email && $addthirdparty) {
3013 if (empty($this->
name)) {
3014 $this->
name = $this->nom;
3016 $contact_emails[
'thirdparty'] = $langs->transnoentitiesnoconv(
"ThirdParty").
': '.
dol_trunc($this->
name, 16).
" <".$this->email.
">";
3019 return $contact_emails;
3035 if (!empty($this->phone)) {
3036 if (empty($this->
name)) {
3037 $this->
name = $this->nom;
3040 $contact_phone[
'thirdparty'] = $langs->transnoentitiesnoconv(
"ThirdParty").
': '.
dol_trunc($this->
name, 16).
" <".$this->phone.
">";
3042 return $contact_phone;
3058 $contact_property = array();
3061 $sql =
"SELECT rowid, email, statut as status, phone_mobile, lastname, poste, firstname";
3062 $sql .=
" FROM ".MAIN_DB_PREFIX.
"socpeople";
3063 $sql .=
" WHERE fk_soc = ".((int) $this->
id);
3064 $sql .=
" AND entity IN (".getEntity($this->element).
")";
3065 $sql .=
" ORDER BY lastname, firstname";
3067 $resql = $this->db->query($sql);
3069 $nump = $this->db->num_rows($resql);
3071 $sepa =
"("; $sepb =
")";
3072 if ($mode ==
'email') {
3074 $sepa =
"<"; $sepb =
">";
3077 while ($i < $nump) {
3078 $obj = $this->db->fetch_object($resql);
3079 if ($mode ==
'email') {
3080 $property = $obj->email;
3081 } elseif ($mode ==
'mobile') {
3082 $property = $obj->phone_mobile;
3084 $property = $obj->$mode;
3088 if ($obj->status == 1 || empty($hidedisabled)) {
3089 if (empty($property)) {
3090 if ($mode ==
'email') {
3091 $property = $langs->transnoentitiesnoconv(
"NoEMail");
3092 } elseif ($mode ==
'mobile') {
3093 $property = $langs->transnoentitiesnoconv(
"NoMobilePhone");
3097 if (!empty($obj->poste)) {
3098 $contact_property[$obj->rowid] = trim(
dolGetFirstLastname($obj->firstname, $obj->lastname)).($obj->poste ?
" - ".$obj->poste :
"").(($mode !=
'poste' && $property) ?
" ".$sepa.$property.$sepb :
'');
3100 $contact_property[$obj->rowid] = trim(
dolGetFirstLastname($obj->firstname, $obj->lastname)).(($mode !=
'poste' && $property) ?
" ".$sepa.$property.$sepb :
'');
3109 return $contact_property;
3122 $contacts = array();
3124 $sql =
"SELECT rowid, lastname, firstname FROM ".MAIN_DB_PREFIX.
"socpeople WHERE fk_soc = ".((int) $this->
id);
3125 $resql = $this->db->query($sql);
3127 $nump = $this->db->num_rows($resql);
3130 while ($i < $nump) {
3131 $obj = $this->db->fetch_object($resql);
3151 require_once DOL_DOCUMENT_ROOT.
'/contact/class/contact.class.php';
3152 $contacts = array();
3154 $sql =
"SELECT rowid FROM ".MAIN_DB_PREFIX.
"socpeople WHERE fk_soc = ".((int) $this->
id);
3155 $resql = $this->db->query($sql);
3157 $nump = $this->db->num_rows($resql);
3160 while ($i < $nump) {
3161 $obj = $this->db->fetch_object($resql);
3162 $contact =
new Contact($this->db);
3163 $contact->fetch($obj->rowid);
3164 $contacts[] = $contact;
3185 $contact_property =
'';
3187 if (empty($rowid)) {
3191 $sql =
"SELECT rowid, email, phone_mobile, lastname, firstname";
3192 $sql .=
" FROM ".MAIN_DB_PREFIX.
"socpeople";
3193 $sql .=
" WHERE rowid = ".((int) $rowid);
3195 $resql = $this->db->query($sql);
3197 $nump = $this->db->num_rows($resql);
3200 $obj = $this->db->fetch_object($resql);
3202 if ($mode ==
'email') {
3204 } elseif ($mode ==
'mobile') {
3205 $contact_property = $obj->phone_mobile;
3208 return $contact_property;
3227 require_once DOL_DOCUMENT_ROOT.
'/societe/class/companybankaccount.class.php';
3230 $bac->fetch(0, $this->
id);
3233 if ($mode ==
'label') {
3234 return $bac->getRibLabel(
true);
3235 } elseif ($mode ==
'rum') {
3236 if (empty($bac->rum)) {
3237 require_once DOL_DOCUMENT_ROOT.
'/compta/prelevement/class/bonprelevement.class.php';
3239 $bac->fetch_thirdparty();
3240 $bac->rum = $prelevement->buildRumNumber($bac->thirdparty->code_client, $bac->datec, $bac->id);
3243 } elseif ($mode ==
'format') {
3244 return $bac->frstrecur;
3246 return 'BadParameterToFunctionDisplayRib';
3262 require_once DOL_DOCUMENT_ROOT.
'/societe/class/companybankaccount.class.php';
3263 $sql =
"SELECT rowid FROM ".MAIN_DB_PREFIX.
"societe_rib WHERE type='ban' AND fk_soc = ".((int) $this->
id);
3264 $result = $this->db->query($sql);
3267 $this->errors[] = $this->db->lasterror;
3270 $num_rows = $this->db->num_rows($result);
3271 $rib_array = array();
3273 while ($obj = $this->db->fetch_object($result)) {
3275 $rib->fetch($obj->rowid);
3276 $rib_array[] = $rib;
3296 if (!empty($conf->global->SOCIETE_CODECLIENT_ADDON)) {
3297 $module = $conf->global->SOCIETE_CODECLIENT_ADDON;
3299 $dirsociete = array_merge(array(
'/core/modules/societe/'), $conf->modules_parts[
'societe']);
3300 foreach ($dirsociete as $dirroot) {
3306 $mod =
new $module();
3308 $this->code_client = $mod->getNextValue($objsoc, $type);
3309 $this->prefixCustomerIsRequired = $mod->prefixIsRequired;
3311 dol_syslog(get_class($this).
"::get_codeclient code_client=".$this->code_client.
" module=".$module);
3328 if (!empty($conf->global->SOCIETE_CODECLIENT_ADDON)) {
3329 $module = $conf->global->SOCIETE_CODECLIENT_ADDON;
3331 $dirsociete = array_merge(array(
'/core/modules/societe/'), $conf->modules_parts[
'societe']);
3332 foreach ($dirsociete as $dirroot) {
3338 $mod =
new $module();
3340 $this->code_fournisseur = $mod->getNextValue($objsoc, $type);
3342 dol_syslog(get_class($this).
"::get_codefournisseur code_fournisseur=".$this->code_fournisseur.
" module=".$module);
3357 if (!empty($conf->global->SOCIETE_CODECLIENT_ADDON)) {
3358 $module = $conf->global->SOCIETE_CODECLIENT_ADDON;
3360 $dirsociete = array_merge(array(
'/core/modules/societe/'), $conf->modules_parts[
'societe']);
3361 foreach ($dirsociete as $dirroot) {
3368 $mod =
new $module();
3370 dol_syslog(get_class($this).
"::codeclient_modifiable code_client=".$this->code_client.
" module=".$module);
3371 if ($mod->code_modifiable_null && !$this->code_client) {
3374 if ($mod->code_modifiable_invalide && $this->check_codeclient() < 0) {
3377 if ($mod->code_modifiable) {
3397 if (!empty($conf->global->SOCIETE_CODECLIENT_ADDON)) {
3398 $module = $conf->global->SOCIETE_CODECLIENT_ADDON;
3400 $dirsociete = array_merge(array(
'/core/modules/societe/'), $conf->modules_parts[
'societe']);
3401 foreach ($dirsociete as $dirroot) {
3408 $mod =
new $module();
3410 dol_syslog(get_class($this).
"::codefournisseur_modifiable code_founisseur=".$this->code_fournisseur.
" module=".$module);
3411 if ($mod->code_modifiable_null && !$this->code_fournisseur) {
3414 if ($mod->code_modifiable_invalide && $this->check_codefournisseur() < 0) {
3417 if ($mod->code_modifiable) {
3443 if (!empty($conf->global->SOCIETE_CODECLIENT_ADDON)) {
3444 $module = $conf->global->SOCIETE_CODECLIENT_ADDON;
3446 $dirsociete = array_merge(array(
'/core/modules/societe/'), $conf->modules_parts[
'societe']);
3447 foreach ($dirsociete as $dirroot) {
3454 $mod =
new $module();
3456 dol_syslog(get_class($this).
"::check_codeclient code_client=".$this->code_client.
" module=".$module);
3457 $result = $mod->verif($this->db, $this->code_client, $this, 0);
3459 $this->error = $mod->error;
3460 $this->errors = $mod->errors;
3484 if (!empty($conf->global->SOCIETE_CODECLIENT_ADDON)) {
3485 $module = $conf->global->SOCIETE_CODECLIENT_ADDON;
3487 $dirsociete = array_merge(array(
'/core/modules/societe/'), $conf->modules_parts[
'societe']);
3488 foreach ($dirsociete as $dirroot) {
3495 $mod =
new $module();
3497 dol_syslog(get_class($this).
"::check_codefournisseur code_fournisseur=".$this->code_fournisseur.
" module=".$module);
3498 $result = $mod->verif($this->db, $this->code_fournisseur, $this, 1);
3500 $this->error = $mod->error;
3501 $this->errors = $mod->errors;
3523 if (!empty($conf->global->SOCIETE_CODECOMPTA_ADDON)) {
3525 $dirsociete = array_merge(array(
'/core/modules/societe/'), $conf->modules_parts[
'societe']);
3526 foreach ($dirsociete as $dirroot) {
3527 $res =
dol_include_once($dirroot.$conf->global->SOCIETE_CODECOMPTA_ADDON.
'.php');
3534 $classname = $conf->global->SOCIETE_CODECOMPTA_ADDON;
3535 $mod =
new $classname;
3538 $result = $mod->get_code($this->db, $this, $type);
3540 if ($type ==
'customer') {
3541 $this->code_compta_client = $mod->code;
3542 $this->code_compta = $this->code_compta_client;
3543 } elseif ($type ==
'supplier') {
3544 $this->code_compta_fournisseur = $mod->code;
3549 $this->error =
'ErrorAccountancyCodeNotDefined';
3553 if ($type ==
'customer') {
3554 $this->code_compta_client =
'';
3555 $this->code_compta =
'';
3556 } elseif ($type ==
'supplier') {
3557 $this->code_compta_fournisseur =
'';
3572 dol_syslog(get_class($this).
'::setParent', LOG_DEBUG);
3578 if ($sameparent < 0) {
3581 if ($sameparent == 1) {
3582 setEventMessages(
'ParentCompanyToAddIsAlreadyAChildOfModifiedCompany',
null,
'warnings');
3587 $sql =
'UPDATE '.MAIN_DB_PREFIX.
'societe SET parent = '.($id > 0 ? $id :
'null').
' WHERE rowid = '.((
int) $this->id);
3589 $resql = $this->db->query($sql);
3591 $this->parent = $id;
3611 if ($counter > 100) {
3612 dol_syslog(
"Too high level of parent - child for company. May be an infinite loop ?", LOG_WARNING);
3615 $sql =
'SELECT s.parent';
3616 $sql .=
' FROM '.MAIN_DB_PREFIX.
'societe as s';
3617 $sql .=
' WHERE rowid = '.((int) $idparent);
3618 $resql = $this->db->query($sql);
3620 $obj = $this->db->fetch_object($resql);
3622 if ($obj->parent ==
'') {
3624 } elseif ($obj->parent == $idchild) {
3646 if ($company_id > 0) {
3647 $sql =
"SELECT parent FROM " . MAIN_DB_PREFIX .
"societe WHERE rowid = ".((int) $company_id);
3648 $resql = $this->db->query($sql);
3650 if ($obj = $this->db->fetch_object($resql)) {
3651 $parent = $obj->parent;
3652 if ($parent > 0 && !in_array($parent, $parents)) {
3653 $parents[] = $parent;
3659 $this->db->free($resql);
3661 setEventMessage($langs->trans(
'GetCompanyParentsError', $this->db->lasterror()),
'errors');
3682 $ret = (empty($conf->global->SOCIETE_IDPROF1_UNIQUE) ? false :
true);
3685 $ret = (empty($conf->global->SOCIETE_IDPROF2_UNIQUE) ? false :
true);
3688 $ret = (empty($conf->global->SOCIETE_IDPROF3_UNIQUE) ? false :
true);
3691 $ret = (empty($conf->global->SOCIETE_IDPROF4_UNIQUE) ? false :
true);
3694 $ret = (empty($conf->global->SOCIETE_IDPROF5_UNIQUE) ? false :
true);
3697 $ret = (empty($conf->global->SOCIETE_IDPROF6_UNIQUE) ? false :
true);
3746 $sql =
"SELECT COUNT(*) as nb FROM ".MAIN_DB_PREFIX.
"societe WHERE ".$field.
" = '".$this->db->escape($value).
"' AND entity IN (".
getEntity(
'societe').
")";
3748 $sql .=
" AND rowid <> ".$socid;
3750 $resql = $this->db->query($sql);
3752 $obj = $this->db->fetch_object($resql);
3756 print $this->db->error();
3758 $this->db->free($resql);
3783 if (!empty($conf->global->MAIN_DISABLEPROFIDRULES)) {
3788 if ($idprof == 1 && $soc->country_code ==
'FR') {
3789 $chaine = trim($this->idprof1);
3790 $chaine = preg_replace(
'/(\s)/',
'', $chaine);
3792 if (!is_numeric($chaine)) {
3804 for ($index = 0; $index < 9; $index++) {
3805 $number = (int) $chaine[$index];
3806 if (($index % 2) != 0) {
3807 if (($number *= 2) > 9) {
3815 if (($sum % 10) != 0) {
3821 if ($idprof == 2 && $soc->country_code ==
'FR') {
3822 $chaine = trim($this->idprof2);
3823 $chaine = preg_replace(
'/(\s)/',
'', $chaine);
3825 if (!is_numeric($chaine)) {
3837 for ($index = 0; $index < 14; $index++) {
3838 $number = (int) $chaine[$index];
3839 if (($index % 2) == 0) {
3840 if (($number *= 2) > 9) {
3848 if (($sum % 10) != 0) {
3855 if ($idprof == 1 && $soc->country_code ==
'ES') {
3856 $string = trim($this->idprof1);
3857 $string = preg_replace(
'/(\s)/',
'', $string);
3858 $string = strtoupper($string);
3861 if (!preg_match(
'/((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)/', $string)) {
3866 for ($i = 0; $i < 9; $i++) {
3867 $num[$i] = substr($string, $i, 1);
3871 if (preg_match(
'/(^[0-9]{8}[A-Z]{1}$)/', $string)) {
3872 if ($num[8] == substr(
'TRWAGMYFPDXBNJZSQVHLCKE', substr($string, 0, 8) % 23, 1)) {
3880 $sum = $num[2] + $num[4] + $num[6];
3881 for ($i = 1; $i < 8; $i += 2) {
3882 $sum += intval(substr((2 * $num[$i]), 0, 1)) + intval(substr((2 * $num[$i]), 1, 1));
3884 $n = 10 - substr($sum, strlen($sum) - 1, 1);
3887 if (preg_match(
'/^[KLM]{1}/', $string)) {
3888 if ($num[8] == chr(64 + $n) || $num[8] == substr(
'TRWAGMYFPDXBNJZSQVHLCKE', substr($string, 1, 8) % 23, 1)) {
3896 if (preg_match(
'/^[ABCDEFGHJNPQRSUVW]{1}/', $string)) {
3897 if ($num[8] == chr(64 + $n) || $num[8] == substr($n, strlen($n) - 1, 1)) {
3905 if (preg_match(
'/^[T]{1}/', $string)) {
3906 if ($num[8] == preg_match(
'/^[T]{1}[A-Z0-9]{8}$/', $string)) {
3914 if (preg_match(
'/^[XYZ]{1}/', $string)) {
3915 if ($num[8] == substr(
'TRWAGMYFPDXBNJZSQVHLCKE', substr(str_replace(array(
'X',
'Y',
'Z'), array(
'0',
'1',
'2'), $string), 0, 8) % 23, 1)) {
3928 if ($idprof == 1 && $soc->country_code ==
'PT') {
3929 $string = trim($this->idprof1);
3930 $string = preg_replace(
'/(\s)/',
'', $string);
3933 if (preg_match(
'/(^[0-9]{9}$)/', $string)) {
3942 if ($idprof == 1 && $soc->country_code ==
'DZ') {
3943 $string = trim($this->idprof1);
3944 $string = preg_replace(
'/(\s)/',
'', $string);
3947 if (preg_match(
'/(^[0-9]{15}$)/', $string)) {
3969 global $conf, $langs, $hookmanager;
3974 $hookmanager->initHooks(array(
'idprofurl'));
3975 $parameters = array(
'idprof'=>$idprof,
'company'=>$thirdparty);
3976 $reshook = $hookmanager->executeHooks(
'getIdProfUrl', $parameters, $this, $action);
3977 if (empty($reshook)) {
3978 if (!empty($conf->global->MAIN_DISABLEPROFIDRULES)) {
3983 $strippedIdProf1 = str_replace(
' ',
'', $thirdparty->idprof1);
3984 if ($idprof == 1 && $thirdparty->country_code ==
'FR') {
3985 $url =
'https://annuaire-entreprises.data.gouv.fr/entreprise/'.$strippedIdProf1;
3987 if ($idprof == 1 && ($thirdparty->country_code ==
'GB' || $thirdparty->country_code ==
'UK')) {
3988 $url =
'https://beta.companieshouse.gov.uk/company/'.$strippedIdProf1;
3990 if ($idprof == 1 && $thirdparty->country_code ==
'ES') {
3991 $url =
'http://www.e-informa.es/servlet/app/portal/ENTP/screen/SProducto/prod/ETIQUETA_EMPRESA/nif/'.$strippedIdProf1;
3993 if ($idprof == 1 && $thirdparty->country_code ==
'IN') {
3994 $url =
'http://www.tinxsys.com/TinxsysInternetWeb/dealerControllerServlet?tinNumber='.$strippedIdProf1.
';&searchBy=TIN&backPage=searchByTin_Inter.jsp';
3996 if ($idprof == 1 && $thirdparty->country_code ==
'DZ') {
3997 $url =
'http://nif.mfdgi.gov.dz/nif.asp?Nif='.$strippedIdProf1;
3999 if ($idprof == 1 && $thirdparty->country_code ==
'PT') {
4000 $url =
'http://www.nif.pt/'.$strippedIdProf1;
4004 return '<a target="_blank" rel="noopener noreferrer" href="'.$url.
'">'.$langs->trans(
"Check").
'</a>';
4007 return $hookmanager->resPrint;
4022 $sql =
"SELECT COUNT(*) as numproj FROM ".MAIN_DB_PREFIX.
"projet WHERE fk_soc = ".((int) $this->
id);
4023 $resql = $this->db->query($sql);
4025 $obj = $this->db->fetch_object($resql);
4026 $count = $obj->numproj;
4029 print $this->db->error();
4031 $this->db->free($resql);
4032 return ($count > 0);
4044 $sql =
"SELECT s.rowid, s.nom as name, s.datec, tms as datem,";
4045 $sql .=
" fk_user_creat, fk_user_modif";
4046 $sql .=
" FROM ".MAIN_DB_PREFIX.
"societe as s";
4047 $sql .=
" WHERE s.rowid = ".((int) $id);
4049 $result = $this->db->query($sql);
4051 if ($this->db->num_rows($result)) {
4052 $obj = $this->db->fetch_object($result);
4054 $this->
id = $obj->rowid;
4056 $this->user_creation_id = $obj->fk_user_creat;
4057 $this->user_modification_id = $obj->fk_user_modif;
4058 $this->date_creation = $this->db->jdate($obj->datec);
4059 $this->date_modification = empty($obj->datem) ?
'' : $this->db->jdate($obj->datem);
4061 $this->
ref = $obj->name;
4064 $this->db->free($result);
4080 $isacompany = empty($conf->global->MAIN_UNKNOWN_CUSTOMERS_ARE_COMPANIES) ? 0 : 1;
4081 if (!empty($this->tva_intra)) {
4083 } elseif (!empty($this->idprof1) || !empty($this->idprof2) || !empty($this->idprof3) || !empty($this->idprof4) || !empty($this->idprof5) || !empty($this->idprof6)) {
4088 if (preg_match(
'/^TE_PRIVATE/', $this->typent_code)) {
4108 require_once DOL_DOCUMENT_ROOT.
'/core/lib/company.lib.php';
4121 $this->SupplierCategories = array();
4122 $sql =
"SELECT rowid, label";
4123 $sql .=
" FROM ".MAIN_DB_PREFIX.
"categorie";
4124 $sql .=
" WHERE type = ".Categorie::TYPE_SUPPLIER;
4126 $resql = $this->db->query($sql);
4128 while ($obj = $this->db->fetch_object($resql)) {
4129 $this->SupplierCategories[$obj->rowid] = $obj->label;
4147 if ($categorie_id > 0 && $this->
id > 0) {
4148 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"categorie_fournisseur (fk_categorie, fk_soc) ";
4149 $sql .=
" VALUES (".((int) $categorie_id).
", ".((int) $this->
id).
")";
4151 if ($resql = $this->db->query($sql)) {
4167 $sql =
"SELECT count(mc.email) as nb";
4168 $sql .=
" FROM ".MAIN_DB_PREFIX.
"mailing_cibles as mc, ".MAIN_DB_PREFIX.
"mailing as m";
4169 $sql .=
" WHERE mc.fk_mailing=m.rowid AND mc.email = '".$this->db->escape($this->email).
"' ";
4170 $sql .=
" AND m.entity IN (".getEntity($this->element).
") AND mc.statut NOT IN (-1,0)";
4172 $resql = $this->db->query($sql);
4174 $obj = $this->db->fetch_object($resql);
4177 $this->db->free($resql);
4180 $this->error = $this->db->error();
4200 $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).
"'";
4201 $resql = $this->db->query($sql);
4203 $obj = $this->db->fetch_object($resql);
4204 $noemail = $obj->nb;
4205 if (empty($noemail)) {
4206 $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()).
"')";
4207 $resql = $this->db->query($sql);
4210 $this->error = $this->db->lasterror();
4211 $this->errors[] = $this->error;
4216 $this->error = $this->db->lasterror();
4217 $this->errors[] = $this->error;
4220 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"mailing_unsubscribe WHERE email = '".$this->db->escape($this->email).
"' AND entity IN (".
getEntity(
'mailing', 0).
")";
4221 $resql = $this->db->query($sql);
4224 $this->error = $this->db->lasterror();
4225 $this->errors[] = $this->error;
4229 if (empty($error)) {
4230 $this->no_email = $no_email;
4231 $this->db->commit();
4234 $this->db->rollback();
4251 $sql =
"SELECT COUNT(rowid) as nb FROM ".MAIN_DB_PREFIX.
"mailing_unsubscribe WHERE entity IN (".
getEntity(
'mailing').
") AND email = '".$this->db->escape($this->email).
"'";
4252 $resql = $this->db->query($sql);
4254 $obj = $this->db->fetch_object($resql);
4255 $this->no_email = $obj->nb;
4258 $this->error = $this->db->lasterror();
4259 $this->errors[] = $this->error;
4279 global $conf, $user, $langs;
4281 dol_syslog(get_class($this).
"::create_from_member", LOG_DEBUG);
4282 $fullname = $member->getFullName($langs);
4284 if ($member->morphy ==
'mor') {
4285 if (empty($socname)) {
4286 $socname = $member->company? $member->company : $member->societe;
4288 if (!empty($fullname) && empty($socalias)) {
4289 $socalias = $fullname;
4291 } elseif (empty($socname) && $member->morphy ==
'phy') {
4292 if (empty($socname)) {
4293 $socname = $fullname;
4295 if (!empty($member->company) && empty($socalias)) {
4296 $socalias = $member->company;
4301 $alias = $socalias ? $socalias :
'';
4305 $this->
name = $name;
4306 $this->name_alias = $alias;
4307 $this->address = $member->address;
4308 $this->zip = $member->zip;
4309 $this->town = $member->town;
4310 $this->country_code = $member->country_code;
4311 $this->country_id = $member->country_id;
4312 $this->phone = $member->phone;
4313 $this->email = $member->email;
4314 $this->socialnetworks = $member->socialnetworks;
4315 $this->entity = $member->entity;
4318 $this->code_client = ($customercode ? $customercode : -1);
4319 $this->code_fournisseur = -1;
4320 $this->typent_code = ($member->morphy ==
'phy' ?
'TE_PRIVATE' : 0);
4321 $this->typent_id = $this->typent_code ?
dol_getIdFromCode($this->db, $this->typent_code,
'c_typent',
'id',
'code') : 0;
4326 $result = $this->
create($user);
4330 if (!empty($conf->global->THIRDPARTY_DEFAULT_CREATE_CONTACT)) {
4332 $this->name_bis = $member->lastname;
4333 $this->firstname = $member->firstname;
4334 $this->civility_id = $member->civility_id;
4336 dol_syslog(
"We ask to create a contact/address too", LOG_DEBUG);
4341 $this->db->rollback();
4346 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"adherent";
4347 $sql .=
" SET fk_soc = ".((int) $this->
id);
4348 $sql .=
" WHERE rowid = ".((int) $member->id);
4350 $resql = $this->db->query($sql);
4352 $this->db->commit();
4355 $this->error = $this->db->error();
4357 $this->db->rollback();
4362 dol_syslog(get_class($this).
"::create_from_member - 2 - ".$this->error.
" - ".join(
',', $this->errors), LOG_ERR);
4364 $this->db->rollback();
4380 $this->entity = $conf->entity;
4382 $this->nom = $this->name;
4393 $country_id = $country_code = $country_label =
'';
4394 if (!empty($conf->global->MAIN_INFO_SOCIETE_COUNTRY)) {
4395 $tmp = explode(
':', $conf->global->MAIN_INFO_SOCIETE_COUNTRY);
4396 $country_id = $tmp[0];
4397 if (!empty($tmp[1])) {
4398 $country_code = $tmp[1];
4399 $country_label = $tmp[2];
4402 dol_syslog(
"Your country setup use an old syntax. Reedit it using setup area.", LOG_WARNING);
4403 include_once DOL_DOCUMENT_ROOT.
'/core/lib/company.lib.php';
4404 $country_code =
getCountry($country_id, 2, $this->db);
4405 $country_label =
getCountry($country_id, 0, $this->db);
4408 $this->country_id = $country_id;
4409 $this->country_code = $country_code;
4410 $this->country = $country_label;
4411 if (is_object($langs)) {
4412 $this->country = ($langs->trans(
'Country'.$country_code) !=
'Country'.$country_code) ? $langs->trans(
'Country'.$country_code) : $country_label;
4417 $state_id = 0; $state_code = $state_label =
'';
4418 if (!empty($conf->global->MAIN_INFO_SOCIETE_STATE)) {
4419 $tmp = explode(
':', $conf->global->MAIN_INFO_SOCIETE_STATE);
4420 $state_id = $tmp[0];
4421 if (!empty($tmp[1])) {
4422 $state_code = $tmp[1];
4423 $state_label = $tmp[2];
4425 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);
4426 include_once DOL_DOCUMENT_ROOT.
'/core/lib/company.lib.php';
4427 $state_code =
getState($state_id, 2, $this->db);
4428 $state_label =
getState($state_id, 0, $this->db);
4431 $this->state_id = $state_id;
4432 $this->state_code = $state_code;
4433 $this->state = $state_label;
4434 if (is_object($langs)) {
4435 $this->state = ($langs->trans(
'State'.$state_code) !=
'State'.$state_code) ? $langs->trans(
'State'.$state_code) : $state_label;
4449 $this->socialnetworks = array();
4450 if (!empty($facebook_url)) {
4451 $this->socialnetworks[
'facebook'] = $facebook_url;
4453 if (!empty($twitter_url)) {
4454 $this->socialnetworks[
'twitter'] = $twitter_url;
4456 if (!empty($linkedin_url)) {
4457 $this->socialnetworks[
'linkedin'] = $linkedin_url;
4459 if (!empty($instagram_url)) {
4460 $this->socialnetworks[
'instagram'] = $instagram_url;
4462 if (!empty($youtube_url)) {
4463 $this->socialnetworks[
'youtube'] = $youtube_url;
4465 if (!empty($github_url)) {
4466 $this->socialnetworks[
'github'] = $github_url;
4479 $this->forme_juridique_code =
getDolGlobalString(
'MAIN_INFO_SOCIETE_FORME_JURIDIQUE');
4486 $this->logo_squarred_small =
getDolGlobalString(
'MAIN_INFO_SOCIETE_LOGO_SQUARRED_SMALL');
4487 $this->logo_squarred_mini =
getDolGlobalString(
'MAIN_INFO_SOCIETE_LOGO_SQUARRED_MINI');
4490 $this->tva_assuj = $conf->global->FACTURE_TVAOPTION;
4493 $this->localtax1_assuj = ((isset($conf->global->FACTURE_LOCAL_TAX1_OPTION) && ($conf->global->FACTURE_LOCAL_TAX1_OPTION ==
'1' || $conf->global->FACTURE_LOCAL_TAX1_OPTION ==
'localtax1on')) ? 1 : 0);
4494 $this->localtax2_assuj = ((isset($conf->global->FACTURE_LOCAL_TAX2_OPTION) && ($conf->global->FACTURE_LOCAL_TAX2_OPTION ==
'1' || $conf->global->FACTURE_LOCAL_TAX2_OPTION ==
'localtax2on')) ? 1 : 0);
4511 $this->
name =
'THIRDPARTY SPECIMEN '.dol_print_date($now,
'dayhourlog');
4512 $this->nom = $this->name;
4513 $this->ref_ext =
'Ref ext';
4514 $this->specimen = 1;
4515 $this->address =
'21 jump street';
4516 $this->zip =
'99999';
4517 $this->town =
'MyTown';
4518 $this->state_id = 1;
4519 $this->state_code =
'AA';
4520 $this->state =
'MyState';
4521 $this->country_id = 1;
4522 $this->country_code =
'FR';
4523 $this->email =
'specimen@specimen.com';
4524 $this->socialnetworks = array(
4525 'skype' =>
'tom.hanson',
4526 'twitter' =>
'tomhanson',
4527 'facebook' =>
'tomhanson',
4528 'linkedin' =>
'tomhanson',
4530 $this->url =
'http://www.specimen.com';
4532 $this->phone =
'0909090901';
4533 $this->fax =
'0909090909';
4535 $this->code_client =
'CC-'.dol_print_date($now,
'dayhourlog');
4536 $this->code_fournisseur =
'SC-'.dol_print_date($now,
'dayhourlog');
4537 $this->capital = 10000;
4539 $this->prospect = 1;
4540 $this->fournisseur = 1;
4541 $this->tva_assuj = 1;
4542 $this->tva_intra =
'EU1234567';
4543 $this->note_public =
'This is a comment (public)';
4544 $this->note_private =
'This is a comment (private)';
4546 $this->idprof1 =
'idprof1';
4547 $this->idprof2 =
'idprof2';
4548 $this->idprof3 =
'idprof3';
4549 $this->idprof4 =
'idprof4';
4550 $this->idprof5 =
'idprof5';
4551 $this->idprof6 =
'idprof6';
4563 $sql =
"SELECT t.localtax1, t.localtax2";
4564 $sql .=
" FROM ".MAIN_DB_PREFIX.
"c_tva as t, ".MAIN_DB_PREFIX.
"c_country as c";
4565 $sql .=
" WHERE t.fk_pays = c.rowid AND c.code = '".$this->db->escape($this->country_code).
"'";
4566 $sql .=
" AND t.active = 1";
4567 if (empty($localTaxNum)) {
4568 $sql .=
" AND (t.localtax1_type <> '0' OR t.localtax2_type <> '0')";
4569 } elseif ($localTaxNum == 1) {
4570 $sql .=
" AND t.localtax1_type <> '0'";
4571 } elseif ($localTaxNum == 2) {
4572 $sql .=
" AND t.localtax2_type <> '0'";
4575 $resql = $this->db->query($sql);
4577 return ($this->db->num_rows($resql) > 0);
4590 $sql =
"SELECT t.rowid";
4591 $sql .=
" FROM ".MAIN_DB_PREFIX.
"c_tva as t, ".MAIN_DB_PREFIX.
"c_country as c";
4592 $sql .=
" WHERE t.fk_pays = c.rowid AND c.code = '".$this->db->escape($this->country_code).
"'";
4593 $sql .=
" AND t.active = 1 AND t.recuperableonly = 1";
4596 $resql = $this->db->query($sql);
4598 return ($this->db->num_rows($resql) > 0);
4612 $sql =
"SELECT COUNT(*) as nb";
4613 $sql .=
" FROM ".MAIN_DB_PREFIX.
"c_revenuestamp as r, ".MAIN_DB_PREFIX.
"c_country as c";
4614 $sql .=
" WHERE r.fk_pays = c.rowid AND c.code = '".$this->db->escape($this->country_code).
"'";
4615 $sql .=
" AND r.active = 1";
4618 $resql = $this->db->query($sql);
4620 $obj = $this->db->fetch_object($resql);
4621 return (($obj->nb > 0) ?
true:
false);
4623 $this->error = $this->db->lasterror();
4650 $lib = $langs->trans(
"ProspectLevel".$fk_prospectlevel);
4652 if ($lib == $langs->trans(
"ProspectLevel".$fk_prospectlevel)) {
4653 $lib = $langs->getLabelFromKey($this->db, $fk_prospectlevel,
'c_prospectlevel',
'code',
'label');
4667 return $this->
LibProspCommStatut($this->stcomm_id, $mode, $label, $this->stcomm_picto);
4689 $langs->load(
'customers');
4692 if ($status ==
'-1' || $status ==
'ST_NO') {
4693 return img_action($langs->trans(
"StatusProspect-1"), -1, $picto,
'class="inline-block valignmiddle"').
' '.$langs->trans(
"StatusProspect-1");
4694 } elseif ($status ==
'0' || $status ==
'ST_NEVER') {
4695 return img_action($langs->trans(
"StatusProspect0"), 0, $picto,
'class="inline-block valignmiddle"').
' '.$langs->trans(
"StatusProspect0");
4696 } elseif ($status ==
'1' || $status ==
'ST_TODO') {
4697 return img_action($langs->trans(
"StatusProspect1"), 1, $picto,
'class="inline-block valignmiddle"').
' '.$langs->trans(
"StatusProspect1");
4698 } elseif ($status ==
'2' || $status ==
'ST_PEND') {
4699 return img_action($langs->trans(
"StatusProspect2"), 2, $picto,
'class="inline-block valignmiddle"').
' '.$langs->trans(
"StatusProspect2");
4700 } elseif ($status ==
'3' || $status ==
'ST_DONE') {
4701 return img_action($langs->trans(
"StatusProspect3"), 3, $picto,
'class="inline-block valignmiddle"').
' '.$langs->trans(
"StatusProspect3");
4703 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);
4705 } elseif ($mode == 3) {
4706 if ($status ==
'-1' || $status ==
'ST_NO') {
4707 return img_action($langs->trans(
"StatusProspect-1"), -1, $picto,
'class="inline-block valignmiddle"');
4708 } elseif ($status ==
'0' || $status ==
'ST_NEVER') {
4709 return img_action($langs->trans(
"StatusProspect0"), 0, $picto,
'class="inline-block valignmiddle"');
4710 } elseif ($status ==
'1' || $status ==
'ST_TODO') {
4711 return img_action($langs->trans(
"StatusProspect1"), 1, $picto,
'class="inline-block valignmiddle"');
4712 } elseif ($status ==
'2' || $status ==
'ST_PEND') {
4713 return img_action($langs->trans(
"StatusProspect2"), 2, $picto,
'class="inline-block valignmiddle"');
4714 } elseif ($status ==
'3' || $status ==
'ST_DONE') {
4715 return img_action($langs->trans(
"StatusProspect3"), 3, $picto,
'class="inline-block valignmiddle"');
4717 return img_action(($langs->trans(
"StatusProspect".$status) !=
"StatusProspect".$status) ? $langs->trans(
"StatusProspect".$status) : $label, 0, $picto,
'class="inline-block valignmiddle"');
4719 } elseif ($mode == 4) {
4720 if ($status ==
'-1' || $status ==
'ST_NO') {
4721 return img_action($langs->trans(
"StatusProspect-1"), -1, $picto,
'class="inline-block valignmiddle"').
' '.$langs->trans(
"StatusProspect-1");
4722 } elseif ($status ==
'0' || $status ==
'ST_NEVER') {
4723 return img_action($langs->trans(
"StatusProspect0"), 0, $picto,
'class="inline-block valignmiddle"').
' '.$langs->trans(
"StatusProspect0");
4724 } elseif ($status ==
'1' || $status ==
'ST_TODO') {
4725 return img_action($langs->trans(
"StatusProspect1"), 1, $picto,
'class="inline-block valignmiddle"').
' '.$langs->trans(
"StatusProspect1");
4726 } elseif ($status ==
'2' || $status ==
'ST_PEND') {
4727 return img_action($langs->trans(
"StatusProspect2"), 2, $picto,
'class="inline-block valignmiddle"').
' '.$langs->trans(
"StatusProspect2");
4728 } elseif ($status ==
'3' || $status ==
'ST_DONE') {
4729 return img_action($langs->trans(
"StatusProspect3"), 3, $picto,
'class="inline-block valignmiddle"').
' '.$langs->trans(
"StatusProspect3");
4731 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);
4735 return "Error, mode/status not found";
4747 if ($mode ==
'supplier') {
4748 $table =
'supplier_proposal';
4751 $sql =
"SELECT rowid, ref, total_ht, total_ttc, fk_statut as status FROM ".MAIN_DB_PREFIX.$table.
" as f";
4752 $sql .=
" WHERE fk_soc = ".((int) $this->
id);
4753 if ($mode ==
'supplier') {
4754 $sql .=
" AND entity IN (".getEntity(
'supplier_proposal').
")";
4756 $sql .=
" AND entity IN (".getEntity(
'propal').
")";
4759 dol_syslog(
"getOutstandingProposals for fk_soc = ".((
int) $this->
id), LOG_DEBUG);
4761 $resql = $this->db->query($sql);
4763 $outstandingOpened = 0;
4764 $outstandingTotal = 0;
4765 $outstandingTotalIncTax = 0;
4766 $arrayofref = array();
4767 while ($obj = $this->db->fetch_object($resql)) {
4768 $arrayofref[$obj->rowid] = $obj->ref;
4769 $outstandingTotal += $obj->total_ht;
4770 $outstandingTotalIncTax += $obj->total_ttc;
4771 if ($obj->status != 0) {
4773 $outstandingOpened += $obj->total_ttc;
4776 return array(
'opened'=>$outstandingOpened,
'total_ht'=>$outstandingTotal,
'total_ttc'=>$outstandingTotalIncTax,
'refs'=>$arrayofref);
4790 $table =
'commande';
4791 if ($mode ==
'supplier') {
4792 $table =
'commande_fournisseur';
4795 $sql =
"SELECT rowid, ref, total_ht, total_ttc, fk_statut as status FROM ".MAIN_DB_PREFIX.$table.
" as f";
4796 $sql .=
" WHERE fk_soc = ".((int) $this->
id);
4797 if ($mode ==
'supplier') {
4798 $sql .=
" AND entity IN (".getEntity(
'supplier_order').
")";
4800 $sql .=
" AND entity IN (".getEntity(
'commande').
")";
4803 dol_syslog(
"getOutstandingOrders", LOG_DEBUG);
4804 $resql = $this->db->query($sql);
4806 $outstandingOpened = 0;
4807 $outstandingTotal = 0;
4808 $outstandingTotalIncTax = 0;
4809 $arrayofref = array();
4810 while ($obj = $this->db->fetch_object($resql)) {
4811 $arrayofref[$obj->rowid] = $obj->ref;
4812 $outstandingTotal += $obj->total_ht;
4813 $outstandingTotalIncTax += $obj->total_ttc;
4814 if ($obj->status != 0) {
4816 $outstandingOpened += $obj->total_ttc;
4819 return array(
'opened'=>$outstandingOpened,
'total_ht'=>$outstandingTotal,
'total_ttc'=>$outstandingTotalIncTax,
'refs'=>$arrayofref);
4835 if ($mode ==
'supplier') {
4836 $table =
'facture_fourn';
4846 $sql =
"SELECT rowid, ref, total_ht, total_ttc, paye, type, fk_statut as status, close_code FROM ".MAIN_DB_PREFIX.$table.
" as f";
4847 $sql .=
" WHERE fk_soc = ".((int) $this->
id);
4848 if (!empty($late)) {
4849 $sql .=
" AND date_lim_reglement < '".$this->db->idate(
dol_now()).
"'";
4851 if ($mode ==
'supplier') {
4852 $sql .=
" AND entity IN (".getEntity(
'facture_fourn').
")";
4854 $sql .=
" AND entity IN (".getEntity(
'invoice').
")";
4857 dol_syslog(
"getOutstandingBills", LOG_DEBUG);
4858 $resql = $this->db->query($sql);
4860 $outstandingOpened = 0;
4861 $outstandingTotal = 0;
4862 $outstandingTotalIncTax = 0;
4863 $arrayofref = array();
4864 $arrayofrefopened = array();
4865 if ($mode ==
'supplier') {
4866 require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.facture.class.php';
4869 require_once DOL_DOCUMENT_ROOT.
'/compta/facture/class/facture.class.php';
4870 $tmpobject =
new Facture($this->db);
4872 while ($obj = $this->db->fetch_object($resql)) {
4873 $arrayofref[$obj->rowid] = $obj->ref;
4874 $tmpobject->id = $obj->rowid;
4876 if ($obj->status != $tmpobject::STATUS_DRAFT
4877 && !($obj->status == $tmpobject::STATUS_ABANDONED && $obj->close_code ==
'replaced')
4879 $outstandingTotal += $obj->total_ht;
4880 $outstandingTotalIncTax += $obj->total_ttc;
4886 && $obj->status != $tmpobject::STATUS_DRAFT
4887 && $obj->status != $tmpobject::STATUS_ABANDONED
4888 && $obj->status != $tmpobject::STATUS_CLOSED) {
4890 $paiement = $tmpobject->getSommePaiement();
4891 $creditnotes = $tmpobject->getSumCreditNotesUsed();
4892 $deposits = $tmpobject->getSumDepositsUsed();
4894 $remaintopay = ($obj->total_ttc - $paiement - $creditnotes - $deposits);
4895 $outstandingOpened += $remaintopay;
4901 $remainingcreditnote = $tmpobject->getSumFromThisCreditNotesNotUsed();
4902 $remaintopay -= $remainingcreditnote;
4903 $outstandingOpened -= $remainingcreditnote;
4907 $arrayofrefopened[$obj->rowid] = $obj->ref;
4910 return array(
'opened'=>$outstandingOpened,
'total_ht'=>$outstandingTotal,
'total_ttc'=>$outstandingTotalIncTax,
'refs'=>$arrayofref,
'refsopened'=>$arrayofrefopened);
4912 dol_syslog(
"Sql error ".$this->db->lasterror, LOG_ERR);
4939 $langs->load(
'companies');
4942 return $langs->trans(
"NorProspectNorCustomer");
4943 } elseif ($status == 1) {
4944 return $langs->trans(
"Customer");
4945 } elseif ($status == 2) {
4946 return $langs->trans(
"Prospect");
4947 } elseif ($status == 3) {
4948 return $langs->trans(
"ProspectCustomer");
4966 public function generateDocument($modele, $outputlangs, $hidedetails = 0, $hidedesc = 0, $hideref = 0, $moreparams =
null)
4968 global $conf, $user, $langs;
4970 if (!empty($moreparams) && !empty($moreparams[
'use_companybankid'])) {
4971 $modelpath =
"core/modules/bank/doc/";
4973 include_once DOL_DOCUMENT_ROOT.
'/societe/class/companybankaccount.class.php';
4975 $result = $companybankaccount->fetch($moreparams[
'use_companybankid']);
4977 dol_print_error($this->db, $companybankaccount->error, $companybankaccount->errors);
4979 $result = $companybankaccount->commonGenerateDocument($modelpath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref, $moreparams);
4983 if (!empty($conf->global->COMPANY_ADDON_PDF)) {
4984 $modele = $conf->global->COMPANY_ADDON_PDF;
4986 print $langs->trans(
"Error").
" ".$langs->trans(
"Error_COMPANY_ADDON_PDF_NotDefined");
4991 if (!isset($this->bank_account)) {
4992 require_once DOL_DOCUMENT_ROOT.
'/societe/class/companybankaccount.class.php';
4994 $result = $bac->fetch(0, $this->
id);
4996 $this->bank_account = $bac;
4998 $this->bank_account =
'';
5002 $modelpath =
"core/modules/societe/doc/";
5004 $result = $this->
commonGenerateDocument($modelpath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref, $moreparams);
5024 require_once DOL_DOCUMENT_ROOT.
'/categories/class/categorie.class.php';
5027 if (!in_array($type_categ, array(Categorie::TYPE_CUSTOMER, Categorie::TYPE_SUPPLIER))) {
5028 dol_syslog(__METHOD__.
': Type '.$type_categ.
'is an unknown company category type. Done nothing.', LOG_ERR);
5032 return parent::setCategoriesCommon($categories, $type_categ);
5047 if (!is_array($salesrep)) {
5048 $salesrep = array($salesrep);
5052 $to_add = $salesrep;
5053 if ($onlyAdd ===
false) {
5058 if (is_array($existing)) {
5059 $to_del = array_diff($existing, $salesrep);
5060 $to_add = array_diff($salesrep, $existing);
5067 foreach ($to_del as $del) {
5070 foreach ($to_add as $add) {
5078 return $error ? -1 : 1;
5094 $result = $this->
setValueFrom(
'fk_typent', $typent_id,
'',
null,
'',
'', $user,
'COMPANY_MODIFY');
5097 $this->typent_id = $typent_id;
5098 $this->typent_code =
dol_getIdFromCode($this->db, $this->typent_id,
'c_typent',
'id',
'code');
5121 if ($origin_id == $dest_id) {
5122 dol_syslog(
'Error: Try to merge a thirdparty into itself');
5130 $sql =
'SELECT rowid FROM '.MAIN_DB_PREFIX.
'societe_commerciaux ';
5131 $sql .=
' WHERE fk_soc = '.(int) $dest_id.
' AND fk_user IN ( ';
5132 $sql .=
' SELECT fk_user ';
5133 $sql .=
' FROM '.MAIN_DB_PREFIX.
'societe_commerciaux ';
5134 $sql .=
' WHERE fk_soc = '.(int) $origin_id.
') ';
5136 $resql = $dbs->
query($sql);
5138 $dbs->
query(
'DELETE FROM '.MAIN_DB_PREFIX.
'societe_commerciaux WHERE rowid = '.((
int) $obj->rowid));
5147 'societe_commerciaux',
5150 'societe_remise_except',
5156 if (!empty($conf->societe->multidir_output[$conf->entity])) {
5157 $srcdir = $conf->societe->multidir_output[$conf->entity].
"/".$origin_id;
5158 $destdir = $conf->societe->multidir_output[$conf->entity].
"/".$dest_id;
5162 foreach ($dirlist as $filetomove) {
5163 $destfile = $destdir.
'/'.$filetomove[
'relativename'];
5165 dol_move($filetomove[
'fullname'], $destfile,
'0', 0, 0, 1);
5184 global $user, $langs, $conf;
5188 $field =
'accountancy_code_sell';
5189 if ($type ==
'buy') {
5190 $field =
'accountancy_code_buy';
5191 } elseif ($type ==
'sell') {
5192 $field =
'accountancy_code_sell';
5197 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element.
" SET ";
5198 $sql .= $field.
" = '".$this->db->escape($value).
"'";
5199 $sql .=
" WHERE rowid = ".((int) $this->
id);
5201 dol_syslog(get_class($this).
"::".__FUNCTION__, LOG_DEBUG);
5202 $resql = $this->db->query($sql);
5206 include_once DOL_DOCUMENT_ROOT.
'/core/class/interfaces.class.php';
5208 $result = $interface->run_triggers(
'COMPANY_MODIFY', $this, $user, $langs, $conf);
5210 $this->errors = $interface->errors;
5211 $this->db->rollback();
5216 $this->$field = $value;
5218 $this->db->commit();
5221 $this->error = $this->db->lasterror();
5222 $this->db->rollback();
5237 require_once DOL_DOCUMENT_ROOT.
'/partnership/class/partnership.class.php';
5240 $this->partnerships[] = array();
5254 $selected = (empty($arraydata[
'selected']) ? 0 : $arraydata[
'selected']);
5256 $return =
'<div class="box-flex-item box-flex-grow-zero">';
5257 $return .=
'<div class="info-box info-box-sm">';
5258 $return .=
'<span class="info-box-icon bg-infobox-action">';
5260 $return .=
'</span>';
5261 $return .=
'<div class="info-box-content">';
5262 $return .=
'<span class="info-box-ref inline-block tdoverflowmax150 valignmiddle">'.(method_exists($this,
'getNomUrl') ? $this->
getNomUrl() : $this->ref).
'</span>';
5263 $return .=
'<input id="cb'.$this->id.
'" class="flat checkforselect fright" type="checkbox" name="toselect[]" value="'.$this->
id.
'"'.($selected ?
' checked="checked"' :
'').
'>';
5264 if (property_exists($this,
'code_client')) {
5265 $return .=
'<br><span class="info-box-label opacitymedium">'.$this->code_client.
'</span>';
5268 if (method_exists($this,
'getLibStatut')) {
5269 $return .=
'<br><div class="info-box-status margintoponly">'.$this->getLibStatut(3).
'</div>';
5271 $return .=
'</div>';
5272 $return .=
'</div>';
5273 $return .=
'</div>';
5294 $sql =
"SELECT sc.rowid, sc.fk_socpeople as id, sc.fk_c_type_contact";
5296 $sql .=
", t.fk_soc as socid, t.statut as statuscontact";
5298 $sql .=
", t.civility as civility, t.lastname as lastname, t.firstname, t.email";
5299 $sql .=
", tc.source, tc.element, tc.code, tc.libelle";
5300 $sql .=
" FROM ".$this->db->prefix().
"c_type_contact tc";
5301 $sql .=
", ".$this->db->prefix().
"societe_contacts sc";
5303 $sql .=
" LEFT JOIN ".$this->db->prefix().
"socpeople t on sc.fk_socpeople = t.rowid";
5305 $sql .=
" WHERE sc.fk_soc = ".((int) $this->
id);
5306 $sql .=
" AND sc.fk_c_type_contact = tc.rowid";
5307 if (!empty($element)) {
5308 $sql .=
" AND tc.element = '".$this->db->escape($element).
"'";
5311 $sql .=
" AND tc.code = '".$this->db->escape($code).
"'";
5313 $sql .=
" AND sc.entity IN (".getEntity($this->element).
")";
5314 $sql .=
" AND tc.source = 'external'";
5315 $sql .=
" AND tc.active=1";
5317 $sql .=
" ORDER BY t.lastname ASC";
5319 dol_syslog(get_class($this).
"::getContacts", LOG_DEBUG);
5320 $resql = $this->db->query($sql);
5322 $num = $this->db->num_rows($resql);
5325 $obj = $this->db->fetch_object($resql);
5328 $transkey =
"TypeContact_".$obj->element.
"_".$obj->source.
"_".$obj->code;
5329 $libelle_type = ($langs->trans($transkey) != $transkey ? $langs->trans($transkey) : $obj->libelle);
5331 'source' => $obj->source,
5332 'socid' => $obj->socid,
5334 'nom' => $obj->lastname,
5335 'civility' => $obj->civility,
5336 'lastname' => $obj->lastname,
5337 'firstname' => $obj->firstname,
5338 'email'=>$obj->email,
5339 'login'=> (empty($obj->login) ?
'' : $obj->login),
5340 'photo' => (empty($obj->photo) ?
'' : $obj->photo),
5341 'statuscontact' => $obj->statuscontact,
5342 'rowid' => $obj->rowid,
5343 'code' => $obj->code,
5344 'element' => $obj->element,
5345 'libelle' => $libelle_type,
5346 'status' => $obj->statuslink,
5347 'fk_c_type_contact' => $obj->fk_c_type_contact
5350 $tab[$i] = $obj->id;
5358 $this->error = $this->db->lasterror();
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.
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 fields 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 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.
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.
fetch($rowid, $ref='', $ref_ext='', $barcode='', $idprof1='', $idprof2='', $idprof3='', $idprof4='', $idprof5='', $idprof6='', $email='', $ref_alias='')
Load a third party from database into memory.
verify()
Check properties of third party are ok (like name, third party codes, ...) Used before an add or upda...
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()
Return 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.
get_codefournisseur($objsoc=0, $type=1)
Assigns a vendor code from the code control module.
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.
getNomUrl($withpicto=0, $option='', $maxlen=0, $notooltip=0, $save_lastsearch_value=-1, $noaliasinname=0, $target='')
Return a link on thirdparty (with picto)
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 $mysocin most cas...
setNoEmail($no_email)
Set "blacklist" mailing status.
id_prof_verifiable($idprof)
Returns if a profid sould 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.
get_codeclient($objsoc=0, $type=0)
Assigns a customer code from the code control module.
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.
update($id, $user='', $call_trigger=1, $allowmodcodeclient=0, $allowmodcodefournisseur=0, $action='update', $nosyncmember=1)
Update parameters of third party.
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.
getSalesRepresentatives(User $user, $mode=0, $sortfield=null, $sortorder=null)
Return array of sales representatives.
LoadSupplierCateg()
Load the list of provider categories.
display_rib($mode='label')
Return bank number property of thirdparty (label or rum)
contact_array_objects()
Returns the contact list of this company.
getAvailableDiscounts($user='', $filter='', $maxvalue=0, $discount_type=0)
Returns amount of included taxes of the current discounts/credits available from the 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 ...
const NO_SUPPLIER
Third party supplier flag is not supplier.
getNbOfEMailings()
Return number of mass Emailing received by this contacts with its email.
setAccountancyCode($type, $value)
Sets an accountancy code for a thirdparty.
getLibCustProspStatut()
Return label of status customer is prospect/customer.
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 attribut 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.
getKanbanView($option='', $arraydata=null)
Return clicable link of object (with eventually picto)
thirdparty_and_contact_phone_array()
Return list of contacts mobile phone existing for third party.
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.
const SUPPLIER
Third party supplier flag is a supplier.
check_codefournisseur()
Check supplier code.
contact_array()
Returns 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.
trait CommonIncoterm
Superclass for incoterm classes.
trait CommonPeople
Superclass for thirdparties, contacts, members or users.
setUpperOrLowerCase()
Set to upper or ucwords/lower if needed.
trait CommonSocialNetworks
Superclass for social networks.
getCountry($searchkey, $withcode='', $dbtouse=0, $outputlangs='', $entconv=1, $searchlabel='')
Return country label, code or id from an id, code or label.
getState($id, $withcode='', $dbtouse=0, $withregion=0, $outputlangs='', $entconv=1)
Return state translated from an id.
dol_move($srcfile, $destfile, $newmask=0, $overwriteifexists=1, $testvirus=0, $indexdatabase=1, $moreinfo=array())
Move a file into another name.
dol_delete_dir_recursive($dir, $count=0, $nophperrors=0, $onlysub=0, &$countdeleted=0, $indexdatabase=1, $nolog=0)
Remove a directory $dir and its subdirectories (or only files and subdirectories)
dol_dir_list($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_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_print_error($db='', $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
img_object($titlealt, $picto, $moreatt='', $pictoisfullpath=false, $srconly=0, $notitle=0)
Show a picto called object_picto (generic function)
dol_format_address($object, $withcountry=0, $sep="\n", $outputlangs='', $mode=0, $extralangcode='')
Return a formated address (part address/zip/town/state) according to country rules.
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.
setEventMessage($mesgs, $style='mesgs', $noduplicate=0)
Set event message in dol_events session object.
dol_strlen($string, $stringencoding='UTF-8')
Make a strlen call.
dol_print_phone($phone, $countrycode='', $cid=0, $socid=0, $addlink='', $separ=" ", $withpicto='', $titlealt='', $adddivfloat=0)
Format phone numbers according to country.
dol_now($mode='auto')
Return date for now.
getDolGlobalInt($key, $default=0)
Return dolibarr global constant int value.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=false, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
dol_getIdFromCode($db, $key, $tablename, $fieldkey='code', $fieldid='id', $entityfilter=0, $filters='')
Return an id or code from a code or id.
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_substr($string, $start, $length=null, $stringencoding='', $trunconbytes=0)
Make a substring.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0)
Set event messages in dol_events session object.
dol_sanitizeFileName($str, $newstr='_', $unaccent=1)
Clean a string to use it as a file name.
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.
getDolGlobalString($key, $default='')
Return 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...
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.
$conf db name
Only used if Module[ID]Name translation string is not found.