42require_once DOL_DOCUMENT_ROOT.
'/core/class/commonobject.class.php';
43require_once DOL_DOCUMENT_ROOT.
'/core/class/commonincoterm.class.php';
44require_once DOL_DOCUMENT_ROOT.
'/core/class/commonsocialnetworks.class.php';
45require_once DOL_DOCUMENT_ROOT.
'/core/class/commonpeople.class.php';
46require_once DOL_DOCUMENT_ROOT.
'/multicurrency/class/multicurrency.class.php';
61 public $module =
'societe';
66 public $element =
'societe';
71 public $table_element =
'societe';
76 public $fk_element =
'fk_soc';
81 public $fieldsforcombobox =
'nom,name_alias';
86 protected $childtables = array(
87 'supplier_proposal' => array(
'name' =>
'SupplierProposal'),
88 'propal' => array(
'name' =>
'Proposal'),
89 'commande' => array(
'name' =>
'Order'),
90 'facture' => array(
'name' =>
'Invoice'),
91 'facture_rec' => array(
'name' =>
'RecurringInvoiceTemplate'),
92 'contrat' => array(
'name' =>
'Contract'),
93 'fichinter' => array(
'name' =>
'Fichinter'),
94 'facture_fourn' => array(
'name' =>
'SupplierInvoice'),
95 'commande_fournisseur' => array(
'name' =>
'SupplierOrder'),
96 'projet' => array(
'name' =>
'Project'),
97 'expedition' => array(
'name' =>
'Shipment'),
98 'prelevement_lignes' => array(
'name' =>
'DirectDebitRecord'),
105 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'=>-2,
'noteditable'=>1,
'notnull'=> 1,
'index'=>1,
'position'=>1,
'comment'=>
'Id',
'css'=>
'left'),
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),
333 public $departement_code;
476 public $socialobject;
486 public $tva_assuj = 1;
497 public $vat_reverse_charge = 0;
500 public $localtax1_assuj;
501 public $localtax1_value;
502 public $localtax2_assuj;
503 public $localtax2_value;
518 public $typent_id = 0;
521 public $effectif_id = 0;
522 public $forme_juridique_code;
523 public $forme_juridique = 0;
525 public $remise_percent;
526 public $remise_supplier_percent;
528 public $mode_reglement_id;
529 public $cond_reglement_id;
530 public $deposit_percent;
531 public $mode_reglement_supplier_id;
532 public $cond_reglement_supplier_id;
533 public $transport_mode_supplier_id;
538 public $fk_prospectlevel;
551 public $date_modification;
558 public $user_modification;
564 public $date_creation;
571 public $user_creation;
583 public $prospect = 0;
601 public $code_fournisseur;
607 public $code_compta_client;
621 public $accountancy_code_customer;
627 public $code_compta_fournisseur;
633 public $accountancy_code_supplier;
639 public $code_compta_product;
652 public $note_private;
670 public $stcomm_picto;
676 public $status_prospect_label;
687 public $outstanding_limit;
692 public $order_min_amount;
697 public $supplier_order_min_amount;
703 public $commercial_id;
715 public $default_lang;
741 public $webservices_url;
747 public $webservices_key;
767 public $logo_squarred;
772 public $logo_squarred_small;
777 public $logo_squarred_mini;
782 public $accountancy_code_sell;
787 public $accountancy_code_buy;
793 public $fk_multicurrency;
799 public $fk_warehouse;
804 public $multicurrency_code;
808 public $partnerships = array();
814 public $bank_account;
817 const STATUS_CEASED = 0;
818 const STATUS_INACTIVITY = 1;
864 $this->fournisseur = 0;
865 $this->typent_id = 0;
866 $this->effectif_id = 0;
867 $this->forme_juridique_code = 0;
868 $this->tva_assuj = 1;
869 $this->vat_reverse_charge = 0;
873 $this->fields[
'address'][
'showoncombobox'] = $conf->global->COMPANY_SHOW_ADDRESS_SELECTLIST;
874 $this->fields[
'zip'][
'showoncombobox'] = $conf->global->COMPANY_SHOW_ADDRESS_SELECTLIST;
875 $this->fields[
'town'][
'showoncombobox'] = $conf->global->COMPANY_SHOW_ADDRESS_SELECTLIST;
891 global $langs, $conf;
896 if (empty($this->
status)) {
899 $this->
name = $this->
name ? trim($this->
name) : trim((
string) $this->nom);
901 $this->nom = $this->name;
903 if (empty($this->client)) {
906 if (empty($this->fournisseur)) {
907 $this->fournisseur = 0;
909 $this->import_key = trim((
string) $this->import_key);
911 $this->accountancy_code_customer = trim((
string) $this->code_compta);
912 $this->accountancy_code_supplier = trim((
string) $this->code_compta_fournisseur);
913 $this->accountancy_code_buy = trim((
string) $this->accountancy_code_buy);
914 $this->accountancy_code_sell = trim((
string) $this->accountancy_code_sell);
916 if (!empty($this->multicurrency_code)) {
919 if (empty($this->fk_multicurrency)) {
920 $this->multicurrency_code =
'';
921 $this->fk_multicurrency = 0;
931 if ($this->code_client == -1 || $this->code_client ===
'auto') {
934 if ($this->code_fournisseur == -1 || $this->code_fournisseur ===
'auto') {
940 $result = $this->
verify();
943 $this->entity = ((isset($this->entity) && is_numeric($this->entity)) ? $this->entity : $conf->entity);
945 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"societe (";
947 $sql .=
", name_alias";
950 $sql .=
", fk_user_creat";
951 $sql .=
", fk_typent";
955 $sql .=
", fk_stcomm";
956 $sql .=
", fk_incoterms";
957 $sql .=
", location_incoterms";
958 $sql .=
", import_key";
959 $sql .=
", fk_multicurrency";
960 $sql .=
", multicurrency_code";
962 $sql .=
", vat_reverse_charge";
963 $sql .=
", accountancy_code_buy";
964 $sql .=
", accountancy_code_sell";
966 $sql .=
") VALUES ('".$this->db->escape($this->name).
"', '".$this->db->escape($this->name_alias).
"', ".((int) $this->entity).
", '".$this->db->idate($now).
"'";
967 $sql .=
", ".(!empty($user->id) ? ((int) $user->id) :
"null");
968 $sql .=
", ".(!empty($this->typent_id) ? ((int) $this->typent_id) :
"null");
969 $sql .=
", ".(!empty($this->canvas) ?
"'".$this->db->escape($this->canvas).
"'" :
"null");
970 $sql .=
", ".((int) $this->
status);
971 $sql .=
", ".(!empty($this->ref_ext) ?
"'".$this->db->escape($this->ref_ext).
"'" :
"null");
973 $sql .=
", ".(int) $this->fk_incoterms;
974 $sql .=
", '".$this->db->escape($this->location_incoterms).
"'";
975 $sql .=
", ".(!empty($this->import_key) ?
"'".$this->db->escape($this->import_key).
"'" :
"null");
976 $sql .=
", ".(int) $this->fk_multicurrency;
977 $sql .=
", '".$this->db->escape($this->multicurrency_code).
"'";
979 $sql .=
", ".(empty($this->vat_reverse_charge) ?
'0' :
'1');
980 $sql .=
", '" . $this->db->escape($this->accountancy_code_buy) .
"'";
981 $sql .=
", '" . $this->db->escape($this->accountancy_code_sell) .
"'";
985 dol_syslog(get_class($this).
"::create", LOG_DEBUG);
986 $result = $this->db->query($sql);
988 $this->
id = $this->db->last_insert_id(MAIN_DB_PREFIX.
"societe");
990 $ret = $this->
update($this->
id, $user, 0, 1, 1,
'add');
994 $this->db->query(
"DELETE FROM ".MAIN_DB_PREFIX.
"societe_perentity WHERE fk_soc = ".((
int) $this->id).
" AND entity = ".((
int) $conf->entity));
996 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"societe_perentity (";
999 $sql .=
", vat_reverse_charge";
1000 $sql .=
", accountancy_code_customer";
1001 $sql .=
", accountancy_code_supplier";
1002 $sql .=
", accountancy_code_buy";
1003 $sql .=
", accountancy_code_sell";
1004 $sql .=
") VALUES (";
1006 $sql .=
", ".((int) $conf->entity);
1007 $sql .=
", ".(empty($this->vat_reverse_charge) ?
'0' :
'1');
1008 $sql .=
", '".$this->db->escape($this->accountancy_code_customer).
"'";
1009 $sql .=
", '".$this->db->escape($this->accountancy_code_supplier).
"'";
1010 $sql .=
", '".$this->db->escape($this->accountancy_code_buy).
"'";
1011 $sql .=
", '".$this->db->escape($this->accountancy_code_sell).
"'";
1013 $result = $this->db->query($sql);
1016 $this->error =
'ErrorFailedToUpdateAccountancyForEntity';
1021 if ($this->commercial_id !=
'' && $this->commercial_id != -1) {
1023 } elseif (!$user->hasRight(
'societe',
'client',
'voir')) {
1031 $result = $this->
call_trigger(
'COMPANY_CREATE', $user);
1042 dol_syslog(get_class($this).
"::Create success id=".$this->
id);
1043 $this->db->commit();
1046 dol_syslog(get_class($this).
"::Create echec update ".$this->error.(empty($this->errors) ?
'' :
' '.join(
',', $this->errors)), LOG_ERR);
1047 $this->db->rollback();
1051 if ($this->db->lasterrno() ==
'DB_ERROR_RECORD_ALREADY_EXISTS') {
1052 $this->error = $langs->trans(
"ErrorCompanyNameAlreadyExists", $this->name);
1055 $this->error = $this->db->lasterror();
1058 $this->db->rollback();
1062 $this->db->rollback();
1063 dol_syslog(get_class($this).
"::Create fails verify ".join(
',', $this->errors), LOG_WARNING);
1088 require_once DOL_DOCUMENT_ROOT.
'/contact/class/contact.class.php';
1089 $contact =
new Contact($this->db);
1091 $contact->name = $this->name_bis;
1092 $contact->firstname = $this->firstname;
1093 $contact->civility_id = $this->civility_id;
1094 $contact->socid = $this->id;
1095 $contact->statut = 1;
1096 $contact->status = 1;
1098 $contact->country_id = $this->country_id;
1099 $contact->state_id = $this->state_id;
1100 $contact->address = $this->address;
1101 $contact->email = $this->email;
1102 $contact->zip = $this->zip;
1103 $contact->town = $this->town;
1105 $contact->phone_pro = $this->phone;
1107 $contactId = $contact->create($user, $notrigger);
1108 if ($contactId < 0) {
1110 $this->error = $contact->error;
1111 $this->errors = $contact->errors;
1112 dol_syslog(get_class($this).
"::create_individual ERROR:".$this->error, LOG_ERR);
1115 if (empty($error) && is_array($tags) && !empty($tags)) {
1116 $result = $contact->setCategories($tags);
1119 $this->error = $contact->error;
1120 $this->errors = array_merge($this->errors, $contact->errors);
1121 dol_syslog(get_class($this).
"::create_individual Affect Tag ERROR:".$this->error, LOG_ERR);
1122 $contactId = $result;
1126 if (empty($error) && isModEnabled(
'mailing') && !empty($contact->email) && isset($no_email)) {
1127 $result = $contact->setNoEmail($no_email);
1129 $this->error = $contact->error;
1130 $this->errors = array_merge($this->errors, $contact->errors);
1131 dol_syslog(get_class($this).
"::create_individual set mailing status ERROR:".$this->error, LOG_ERR);
1132 $contactId = $result;
1136 if (empty($error)) {
1137 dol_syslog(get_class($this).
"::create_individual success");
1138 $this->db->commit();
1140 $this->db->rollback();
1154 global $conf, $langs, $mysoc;
1157 $this->errors = array();
1161 $this->nom = $this->name;
1164 $this->errors[] =
'ErrorBadThirdPartyName';
1168 if ($this->client) {
1170 if ($rescode != 0 && $rescode != -5) {
1171 if ($rescode == -1) {
1172 $this->errors[] =
'ErrorBadCustomerCodeSyntax';
1173 } elseif ($rescode == -2) {
1174 $this->errors[] =
'ErrorCustomerCodeRequired';
1175 } elseif ($rescode == -3) {
1176 $this->errors[] =
'ErrorCustomerCodeAlreadyUsed';
1177 } elseif ($rescode == -4) {
1178 $this->errors[] =
'ErrorPrefixRequired';
1180 $this->errors[] =
'ErrorUnknownOnCustomerCodeCheck';
1187 if ($this->fournisseur) {
1189 if ($rescode != 0 && $rescode != -5) {
1190 if ($rescode == -1) {
1191 $this->errors[] =
'ErrorBadSupplierCodeSyntax';
1192 } elseif ($rescode == -2) {
1193 $this->errors[] =
'ErrorSupplierCodeRequired';
1194 } elseif ($rescode == -3) {
1195 $this->errors[] =
'ErrorSupplierCodeAlreadyUsed';
1196 } elseif ($rescode == -4) {
1197 $this->errors[] =
'ErrorPrefixRequired';
1199 $this->errors[] =
'ErrorUnknownOnSupplierCodeCheck';
1206 $array_to_check = array(
'IDPROF1',
'IDPROF2',
'IDPROF3',
'IDPROF4',
'IDPROF5',
'IDPROF6',
'EMAIL',
'TVA_INTRA',
'ACCOUNTANCY_CODE_CUSTOMER',
'ACCOUNTANCY_CODE_SUPPLIER');
1207 foreach ($array_to_check as $key) {
1208 $keymin = strtolower($key);
1209 if ($key ==
'ACCOUNTANCY_CODE_CUSTOMER') {
1210 $keymin =
'code_compta';
1211 } elseif ($key ==
'ACCOUNTANCY_CODE_SUPPLIER') {
1212 $keymin =
'code_compta_fournisseur';
1214 $i = (int) preg_replace(
'/[^0-9]/',
'', $key);
1215 $vallabel = $this->$keymin;
1220 if ($mysoc->country_id > 0 && $this->country_id == $mysoc->country_id) {
1221 $idprof_mandatory =
'SOCIETE_'.$key.
'_MANDATORY';
1223 $langs->load(
"errors");
1225 $this->errors[] = $langs->trans(
"ErrorProdIdIsMandatory", $langs->transcountry(
'ProfId'.$i, $this->country_code)).
' ('.$langs->trans(
"ForbiddenBySetupRules").
')';
1232 if ($this->
id_prof_exists($keymin, $vallabel, ($this->
id > 0 ? $this->
id : 0))) {
1233 $langs->load(
"errors");
1235 $this->errors[] = $langs->transcountry(
'ProfId'.$i, $this->country_code).
" ".$langs->trans(
"ErrorProdIdAlreadyExist", $vallabel).
' ('.$langs->trans(
"ForbiddenBySetupRules").
')';
1241 if ($key ==
'EMAIL') {
1244 $langs->load(
"errors");
1246 $this->errors[] = $langs->trans(
"ErrorBadEMail", $this->email).
' ('.$langs->trans(
"ForbiddenBySetupRules").
')';
1251 if ($this->
id_prof_exists($keymin, $vallabel, ($this->
id > 0 ? $this->
id : 0))) {
1252 $langs->load(
"errors");
1254 $this->errors[] = $langs->trans(
'Email').
" ".$langs->trans(
"ErrorProdIdAlreadyExist", $vallabel).
' ('.$langs->trans(
"ForbiddenBySetupRules").
')';
1257 } elseif ($key ==
'TVA_INTRA') {
1260 if ($this->
id_prof_exists($keymin, $vallabel, ($this->
id > 0 ? $this->
id : 0))) {
1261 $langs->load(
"errors");
1263 $this->errors[] = $langs->trans(
'VATIntra').
" ".$langs->trans(
"ErrorProdIdAlreadyExist", $vallabel).
' ('.$langs->trans(
"ForbiddenBySetupRules").
')';
1266 } elseif ($key ==
'ACCOUNTANCY_CODE_CUSTOMER' && !empty($this->client)) {
1269 if ($this->
id_prof_exists($keymin, $vallabel, ($this->
id > 0 ? $this->
id : 0))) {
1270 $langs->loadLangs(array(
"errors",
'compta'));
1272 $this->errors[] = $langs->trans(
'CustomerAccountancyCodeShort') .
" " . $langs->trans(
"ErrorProdIdAlreadyExist", $vallabel) .
' (' . $langs->trans(
"ForbiddenBySetupRules") .
')';
1277 if (
getDolGlobalString(
'SOCIETE_ACCOUNTANCY_CODE_CUSTOMER_MANDATORY') && (!isset($vallabel) || trim($vallabel) ===
'')) {
1278 $langs->loadLangs(array(
"errors",
'compta'));
1280 $this->errors[] = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
'CustomerAccountancyCodeShort')) .
' (' . $langs->trans(
"ForbiddenBySetupRules") .
')';
1282 } elseif ($key ==
'ACCOUNTANCY_CODE_SUPPLIER' && !empty($this->fournisseur)) {
1285 if ($this->
id_prof_exists($keymin, $vallabel, ($this->
id > 0 ? $this->
id : 0))) {
1286 $langs->loadLangs(array(
"errors",
'compta'));
1288 $this->errors[] = $langs->trans(
'SupplierAccountancyCodeShort') .
" " . $langs->trans(
"ErrorProdIdAlreadyExist", $vallabel) .
' (' . $langs->trans(
"ForbiddenBySetupRules") .
')';
1293 if (
getDolGlobalString(
'SOCIETE_ACCOUNTANCY_CODE_SUPPLIER_MANDATORY') && (!isset($vallabel) || trim($vallabel) ===
'')) {
1294 $langs->loadLangs(array(
"errors",
'compta'));
1296 $this->errors[] = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
'SupplierAccountancyCodeShort')) .
' (' . $langs->trans(
"ForbiddenBySetupRules") .
')';
1321 public function update($id, $user =
'', $call_trigger = 1, $allowmodcodeclient = 0, $allowmodcodefournisseur = 0, $action =
'update', $nosyncmember = 1)
1323 global $langs, $conf, $hookmanager;
1325 require_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
1333 dol_syslog(get_class($this).
"::Update id=".$id.
" call_trigger=".$call_trigger.
" allowmodcodeclient=".$allowmodcodeclient.
" allowmodcodefournisseur=".$allowmodcodefournisseur);
1339 $this->entity = ((isset($this->entity) && is_numeric($this->entity)) ? $this->entity : $conf->entity);
1340 $this->
name = $this->
name ? trim($this->
name) : trim((
string) $this->nom);
1341 $this->nom = $this->name;
1342 $this->name_alias = trim((
string) $this->name_alias);
1343 $this->ref_ext = (empty($this->ref_ext) ?
'' : trim($this->ref_ext));
1344 $this->address = trim((
string) $this->address);
1345 $this->zip = trim((
string) $this->zip);
1346 $this->town = trim((
string) $this->town);
1347 $this->state_id = (is_numeric($this->state_id)) ? (
int) trim($this->state_id) : 0;
1348 $this->country_id = ($this->country_id > 0) ? $this->country_id : 0;
1349 $this->phone = trim((
string) $this->phone);
1350 $this->phone = preg_replace(
"/\s/",
"", $this->phone);
1351 $this->phone = preg_replace(
"/\./",
"", $this->phone);
1352 $this->fax = trim((
string) $this->fax);
1353 $this->fax = preg_replace(
"/\s/",
"", $this->fax);
1354 $this->fax = preg_replace(
"/\./",
"", $this->fax);
1355 $this->email = trim($this->email);
1356 $this->url = $this->url ?
clean_url($this->url, 0) :
'';
1357 $this->note_private = trim($this->note_private);
1358 $this->note_public = trim($this->note_public);
1359 $this->idprof1 = trim($this->idprof1);
1360 $this->idprof2 = trim($this->idprof2);
1361 $this->idprof3 = trim($this->idprof3);
1362 $this->idprof4 = trim($this->idprof4);
1363 $this->idprof5 = (!empty($this->idprof5) ? trim($this->idprof5) :
'');
1364 $this->idprof6 = (!empty($this->idprof6) ? trim($this->idprof6) :
'');
1365 $this->prefix_comm = trim($this->prefix_comm);
1366 $this->outstanding_limit =
price2num($this->outstanding_limit);
1367 $this->order_min_amount =
price2num($this->order_min_amount);
1368 $this->supplier_order_min_amount =
price2num($this->supplier_order_min_amount);
1370 $this->tva_assuj = trim($this->tva_assuj);
1372 $this->vat_reverse_charge = empty($this->vat_reverse_charge) ?
'0' :
'1';
1373 if (empty($this->
status)) {
1377 if (!empty($this->multicurrency_code)) {
1380 if (empty($this->fk_multicurrency)) {
1381 $this->multicurrency_code =
'';
1382 $this->fk_multicurrency = 0;
1386 $this->localtax1_assuj = trim($this->localtax1_assuj);
1387 $this->localtax2_assuj = trim($this->localtax2_assuj);
1389 $this->localtax1_value = trim($this->localtax1_value);
1390 $this->localtax2_value = trim($this->localtax2_value);
1392 if ($this->capital !=
'') {
1393 $this->capital =
price2num(trim($this->capital));
1395 if (!is_numeric($this->capital)) {
1396 $this->capital =
'';
1399 $this->effectif_id = trim($this->effectif_id);
1400 $this->forme_juridique_code = trim($this->forme_juridique_code);
1403 $this->barcode = trim($this->barcode);
1406 if ($this->code_client == -1 || $this->code_client ===
'auto') {
1409 if ($this->code_fournisseur == -1 || $this->code_fournisseur ===
'auto') {
1413 $this->code_compta_client = trim(empty($this->code_compta) ? $this->code_compta_client : $this->code_compta);
1414 $this->code_compta = $this->code_compta_client;
1415 $this->code_compta_fournisseur = trim($this->code_compta_fournisseur);
1418 if (!is_numeric($this->client) && !is_numeric($this->fournisseur)) {
1419 $langs->load(
"errors");
1420 $this->error = $langs->trans(
"BadValueForParameterClientOrSupplier");
1425 if (!empty($allowmodcodeclient) && !empty($this->client)) {
1427 if (empty($this->code_compta_client)) {
1438 if (!empty($allowmodcodefournisseur) && !empty($this->fournisseur)) {
1440 if (empty($this->code_compta_fournisseur)) {
1451 $this->webservices_url = $this->webservices_url ?
clean_url($this->webservices_url, 0) :
'';
1452 $this->webservices_key = trim($this->webservices_key);
1454 $this->accountancy_code_buy = trim($this->accountancy_code_buy);
1455 $this->accountancy_code_sell = trim($this->accountancy_code_sell);
1458 $this->fk_incoterms = (int) $this->fk_incoterms;
1459 $this->location_incoterms = trim($this->location_incoterms);
1466 if ($action !=
'add' && $action !=
'merge') {
1469 $result = $this->
verify();
1473 if (is_array($this->errors)) {
1474 if (in_array(
'ErrorBadCustomerCodeSyntax', $this->errors) && is_object($this->oldcopy) && $this->oldcopy->code_client == $this->code_client) {
1475 if (($key = array_search(
'ErrorBadCustomerCodeSyntax', $this->errors)) !==
false) {
1476 unset($this->errors[$key]);
1479 if (in_array(
'ErrorBadSupplierCodeSyntax', $this->errors) && is_object($this->oldcopy) && $this->oldcopy->code_fournisseur == $this->code_fournisseur) {
1480 if (($key = array_search(
'ErrorBadSupplierCodeSyntax', $this->errors)) !==
false) {
1481 unset($this->errors[$key]);
1484 if (empty($this->errors)) {
1491 dol_syslog(get_class($this).
"::update verify ok or not done");
1493 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"societe SET ";
1494 $sql .=
"entity = ".$this->db->escape($this->entity);
1495 $sql .=
",nom = '".$this->db->escape($this->
name).
"'";
1496 $sql .=
",name_alias = '".$this->db->escape($this->name_alias).
"'";
1497 $sql .=
",ref_ext = ".(!empty($this->ref_ext) ?
"'".$this->db->escape($this->ref_ext).
"'" :
"null");
1498 $sql .=
",address = '".$this->db->escape($this->address).
"'";
1500 $sql .=
",zip = ".(!empty($this->zip) ?
"'".$this->db->escape($this->zip).
"'" :
"null");
1501 $sql .=
",town = ".(!empty($this->town) ?
"'".$this->db->escape($this->town).
"'" :
"null");
1503 $sql .=
",fk_departement = ".((!empty($this->state_id) && $this->state_id > 0) ? ((
int) $this->state_id) :
'null');
1504 $sql .=
",fk_pays = ".((!empty($this->country_id) && $this->country_id > 0) ? ((
int) $this->country_id) :
'null');
1506 $sql .=
",phone = ".(!empty($this->phone) ?
"'".$this->db->escape($this->phone).
"'" :
"null");
1507 $sql .=
",fax = ".(!empty($this->fax) ?
"'".$this->db->escape($this->fax).
"'" :
"null");
1508 $sql .=
",email = ".(!empty($this->email) ?
"'".$this->db->escape($this->email).
"'" :
"null");
1509 $sql .=
",socialnetworks = '".$this->db->escape(json_encode($this->socialnetworks)).
"'";
1510 $sql .=
",url = ".(!empty($this->url) ?
"'".$this->db->escape($this->url).
"'" :
"null");
1512 $sql .=
",parent = ".($this->parent > 0 ? $this->parent :
"null");
1514 $sql .=
",note_private = ".(!empty($this->note_private) ?
"'".$this->db->escape($this->note_private).
"'" :
"null");
1515 $sql .=
",note_public = ".(!empty($this->note_public) ?
"'".$this->db->escape($this->note_public).
"'" :
"null");
1517 $sql .=
",siren = '".$this->db->escape($this->idprof1).
"'";
1518 $sql .=
",siret = '".$this->db->escape($this->idprof2).
"'";
1519 $sql .=
",ape = '".$this->db->escape($this->idprof3).
"'";
1520 $sql .=
",idprof4 = '".$this->db->escape($this->idprof4).
"'";
1521 $sql .=
",idprof5 = '".$this->db->escape($this->idprof5).
"'";
1522 $sql .=
",idprof6 = '".$this->db->escape($this->idprof6).
"'";
1524 $sql .=
",tva_assuj = ".($this->tva_assuj !=
'' ?
"'".$this->db->escape($this->tva_assuj).
"'" :
"null");
1525 $sql .=
",tva_intra = '".$this->db->escape($this->tva_intra).
"'";
1527 $sql .=
",vat_reverse_charge = " . ($this->vat_reverse_charge !=
'' ?
"'" . $this->db->escape($this->vat_reverse_charge) .
"'" : 0);
1529 $sql .=
",status = ".((int) $this->
status);
1532 $sql .=
",localtax1_assuj = ".($this->localtax1_assuj !=
'' ?
"'".$this->db->escape($this->localtax1_assuj).
"'" :
"null");
1533 $sql .=
",localtax2_assuj = ".($this->localtax2_assuj !=
'' ?
"'".$this->db->escape($this->localtax2_assuj).
"'" :
"null");
1534 if ($this->localtax1_assuj == 1) {
1535 if ($this->localtax1_value !=
'') {
1536 $sql .=
",localtax1_value =".$this->localtax1_value;
1538 $sql .=
",localtax1_value =0.000";
1541 $sql .=
",localtax1_value =0.000";
1544 if ($this->localtax2_assuj == 1) {
1545 if ($this->localtax2_value !=
'') {
1546 $sql .=
",localtax2_value =".$this->localtax2_value;
1548 $sql .=
",localtax2_value =0.000";
1551 $sql .=
",localtax2_value =0.000";
1554 $sql .=
",capital = ".($this->capital ==
'' ?
"null" : $this->capital);
1556 $sql .=
",prefix_comm = ".(!empty($this->prefix_comm) ?
"'".$this->db->escape($this->prefix_comm).
"'" :
"null");
1558 $sql .=
",fk_effectif = ".($this->effectif_id > 0 ? ((int) $this->effectif_id) :
"null");
1559 if (isset($this->stcomm_id)) {
1560 $sql .=
",fk_stcomm=".(int) $this->stcomm_id;
1562 if (isset($this->typent_id)) {
1563 $sql .=
",fk_typent = ".($this->typent_id > 0 ? ((int) $this->typent_id) :
"0");
1566 $sql .=
",fk_forme_juridique = ".(!empty($this->forme_juridique_code) ?
"'".$this->db->escape($this->forme_juridique_code).
"'" :
"null");
1568 $sql .=
",mode_reglement = ".(!empty($this->mode_reglement_id) ?
"'".$this->db->escape($this->mode_reglement_id).
"'" :
"null");
1569 $sql .=
",cond_reglement = ".(!empty($this->cond_reglement_id) ?
"'".$this->db->escape($this->cond_reglement_id).
"'" :
"null");
1570 $sql .=
",deposit_percent = ".(!empty($this->deposit_percent) ?
"'".$this->db->escape($this->deposit_percent).
"'" :
"null");
1571 $sql .=
",transport_mode = ".(!empty($this->transport_mode_id) ?
"'".$this->db->escape($this->transport_mode_id).
"'" :
"null");
1572 $sql .=
",mode_reglement_supplier = ".(!empty($this->mode_reglement_supplier_id) ?
"'".$this->db->escape($this->mode_reglement_supplier_id).
"'" :
"null");
1573 $sql .=
",cond_reglement_supplier = ".(!empty($this->cond_reglement_supplier_id) ?
"'".$this->db->escape($this->cond_reglement_supplier_id).
"'" :
"null");
1574 $sql .=
",transport_mode_supplier = ".(!empty($this->transport_mode_supplier_id) ?
"'".$this->db->escape($this->transport_mode_supplier_id).
"'" :
"null");
1575 $sql .=
",fk_shipping_method = ".(!empty($this->shipping_method_id) ?
"'".$this->db->escape($this->shipping_method_id).
"'" :
"null");
1577 $sql .=
",client = ".(!empty($this->client) ? $this->client : 0);
1578 $sql .=
",fournisseur = ".(!empty($this->fournisseur) ? $this->fournisseur : 0);
1579 $sql .=
",barcode = ".(!empty($this->barcode) ?
"'".$this->db->escape($this->barcode).
"'" :
"null");
1580 $sql .=
",default_lang = ".(!empty($this->default_lang) ?
"'".$this->db->escape($this->default_lang).
"'" :
"null");
1581 $sql .=
",logo = ".(!empty($this->logo) ?
"'".$this->db->escape($this->logo).
"'" :
"null");
1582 $sql .=
",logo_squarred = ".(!empty($this->logo_squarred) ?
"'".$this->db->escape($this->logo_squarred).
"'" :
"null");
1583 $sql .=
",outstanding_limit= ".($this->outstanding_limit !=
'' ? $this->outstanding_limit :
'null');
1584 $sql .=
",order_min_amount= ".($this->order_min_amount !=
'' ? $this->order_min_amount :
'null');
1585 $sql .=
",supplier_order_min_amount= ".($this->supplier_order_min_amount !=
'' ? $this->supplier_order_min_amount :
'null');
1586 $sql .=
",fk_prospectlevel='".$this->db->escape($this->fk_prospectlevel).
"'";
1588 $sql .=
", accountancy_code_buy = '" . $this->db->escape($this->accountancy_code_buy) .
"'";
1589 $sql .=
", accountancy_code_sell= '" . $this->db->escape($this->accountancy_code_sell) .
"'";
1591 $sql .=
", code_compta = ".(!empty($this->code_compta_client) ?
"'".$this->db->escape($this->code_compta_client).
"'" :
"null");
1595 $sql .=
", code_compta_fournisseur = ".(($this->code_compta_fournisseur !=
"") ?
"'".$this->db->escape($this->code_compta_fournisseur).
"'" :
"null");
1598 $sql .=
",webservices_url = ".(!empty($this->webservices_url) ?
"'".$this->db->escape($this->webservices_url).
"'" :
"null");
1599 $sql .=
",webservices_key = ".(!empty($this->webservices_key) ?
"'".$this->db->escape($this->webservices_key).
"'" :
"null");
1602 $sql .=
", fk_incoterms = ".((int) $this->fk_incoterms);
1603 $sql .=
", location_incoterms = ".(!empty($this->location_incoterms) ?
"'".$this->db->escape($this->location_incoterms).
"'" :
"null");
1606 $sql .=
", code_client = ".(!empty($this->code_client) ?
"'".$this->db->escape($this->code_client).
"'" :
"null");
1610 $sql .=
", code_fournisseur = ".(!empty($this->code_fournisseur) ?
"'".$this->db->escape($this->code_fournisseur).
"'" :
"null");
1612 $sql .=
", fk_user_modif = ".($user->id > 0 ? $user->id :
"null");
1613 $sql .=
", fk_multicurrency = ".(int) $this->fk_multicurrency;
1614 $sql .=
", multicurrency_code = '".$this->db->escape($this->multicurrency_code).
"'";
1615 $sql .=
", model_pdf = '".$this->db->escape($this->model_pdf).
"'";
1616 $sql .=
" WHERE rowid = ".(int) $id;
1618 $resql = $this->db->query($sql);
1620 if (is_object($this->oldcopy)) {
1621 if ($this->oldcopy->country_id != $this->country_id) {
1622 unset($this->country_code);
1623 unset($this->country);
1625 if ($this->oldcopy->state_id != $this->state_id) {
1626 unset($this->state_code);
1627 unset($this->state);
1630 unset($this->country_code);
1631 unset($this->country);
1632 unset($this->state_code);
1633 unset($this->state);
1636 $nbrowsaffected = $this->db->affected_rows($resql);
1638 if (!$error && $nbrowsaffected) {
1640 if (!$nosyncmember && isModEnabled(
'adherent')) {
1641 require_once DOL_DOCUMENT_ROOT.
'/adherents/class/adherent.class.php';
1643 dol_syslog(get_class($this).
"::update update linked member");
1645 $lmember =
new Adherent($this->db);
1646 $result = $lmember->fetch(0, 0, $this->
id);
1649 $lmember->company = $this->name;
1652 $lmember->address = $this->address;
1653 $lmember->zip = $this->zip;
1654 $lmember->town = $this->town;
1655 $lmember->email = $this->email;
1656 $lmember->socialnetworks = $this->socialnetworks;
1657 $lmember->phone = $this->phone;
1658 $lmember->state_id = $this->state_id;
1659 $lmember->country_id = $this->country_id;
1660 $lmember->default_lang = $this->default_lang;
1662 $result = $lmember->update($user, 0, 1, 1, 1);
1664 $this->error = $lmember->error;
1665 $this->errors = array_merge($this->errors, $lmember->errors);
1666 dol_syslog(get_class($this).
"::update ".$this->error, LOG_ERR);
1669 } elseif ($result < 0) {
1670 $this->error = $lmember->error;
1680 $this->db->query(
"DELETE FROM ".MAIN_DB_PREFIX.
"societe_perentity WHERE fk_soc = ".((
int) $this->id).
" AND entity = ".((
int) $conf->entity));
1682 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"societe_perentity (";
1685 $sql .=
", vat_reverse_charge";
1686 $sql .=
", accountancy_code_customer";
1687 $sql .=
", accountancy_code_supplier";
1688 $sql .=
", accountancy_code_buy";
1689 $sql .=
", accountancy_code_sell";
1690 $sql .=
") VALUES (";
1692 $sql .=
", ".$conf->entity;
1693 $sql .=
", ".(empty($this->vat_reverse_charge) ?
'0' :
'1');
1694 $sql .=
", '".$this->db->escape($this->code_compta_client).
"'";
1695 $sql .=
", '".$this->db->escape($this->code_compta_fournisseur).
"'";
1696 $sql .=
", '".$this->db->escape($this->accountancy_code_buy).
"'";
1697 $sql .=
", '".$this->db->escape($this->accountancy_code_sell).
"'";
1699 $result = $this->db->query($sql);
1702 $this->error =
'ErrorFailedToUpdateAccountancyForEntity';
1721 if (!$error && $call_trigger) {
1723 $result = $this->
call_trigger(
'COMPANY_MODIFY', $user);
1731 dol_syslog(get_class($this).
"::Update success");
1732 $this->db->commit();
1735 $this->db->rollback();
1739 if ($this->db->errno() ==
'DB_ERROR_RECORD_ALREADY_EXISTS') {
1741 $this->error = $langs->trans(
"ErrorDuplicateField");
1744 $this->error = $this->db->lasterror();
1747 $this->db->rollback();
1751 $this->db->rollback();
1752 dol_syslog(get_class($this).
"::Update fails verify ".join(
',', $this->errors), LOG_WARNING);
1774 public function fetch($rowid, $ref =
'', $ref_ext =
'', $barcode =
'', $idprof1 =
'', $idprof2 =
'', $idprof3 =
'', $idprof4 =
'', $idprof5 =
'', $idprof6 =
'', $email =
'', $ref_alias =
'')
1779 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)) {
1783 $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';
1784 $sql .=
', s.status, s.fk_warehouse';
1785 $sql .=
', s.price_level';
1786 $sql .=
', s.tms as date_modification, s.fk_user_creat, s.fk_user_modif';
1787 $sql .=
', s.phone, s.fax, s.email';
1788 $sql .=
', s.socialnetworks';
1789 $sql .=
', s.url, s.zip, s.town, s.note_private, s.note_public, s.client, s.fournisseur';
1790 $sql .=
', s.siren as idprof1, s.siret as idprof2, s.ape as idprof3, s.idprof4, s.idprof5, s.idprof6';
1791 $sql .=
', s.capital, s.tva_intra';
1792 $sql .=
', s.fk_typent as typent_id';
1793 $sql .=
', s.fk_effectif as effectif_id';
1794 $sql .=
', s.fk_forme_juridique as forme_juridique_code';
1795 $sql .=
', s.webservices_url, s.webservices_key, s.model_pdf, s.last_main_doc';
1797 $sql .=
', s.code_compta, s.code_compta_fournisseur, s.accountancy_code_buy, s.accountancy_code_sell';
1798 $sql .=
', s.vat_reverse_charge as soc_vat_reverse_charge';
1800 $sql .=
', spe.accountancy_code_customer as code_compta, spe.accountancy_code_supplier as code_compta_fournisseur, spe.accountancy_code_buy, spe.accountancy_code_sell';
1801 $sql .=
', spe.vat_reverse_charge as spe_vat_reverse_charge';
1803 $sql .=
', s.code_client, s.code_fournisseur, s.parent, s.barcode';
1804 $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';
1805 $sql .=
', s.fk_account, s.tva_assuj';
1806 $sql .=
', s.mode_reglement_supplier, s.cond_reglement_supplier, s.transport_mode_supplier';
1807 $sql .=
', s.localtax1_assuj, s.localtax1_value, s.localtax2_assuj, s.localtax2_value, s.fk_prospectlevel, s.default_lang, s.logo, s.logo_squarred';
1808 $sql .=
', s.fk_shipping_method';
1809 $sql .=
', s.outstanding_limit, s.import_key, s.canvas, s.fk_incoterms, s.location_incoterms';
1810 $sql .=
', s.order_min_amount, s.supplier_order_min_amount';
1811 $sql .=
', s.fk_multicurrency, s.multicurrency_code';
1812 $sql .=
', fj.libelle as forme_juridique';
1813 $sql .=
', e.libelle as effectif';
1814 $sql .=
', c.code as country_code, c.label as country';
1815 $sql .=
', d.code_departement as state_code, d.nom as state';
1816 $sql .=
', r.rowid as region_id, r.code_region as region_code';
1817 $sql .=
', st.libelle as stcomm, st.picto as stcomm_picto';
1818 $sql .=
', te.code as typent_code';
1819 $sql .=
', i.libelle as label_incoterms';
1820 if (!isModEnabled(
'multicompany')) {
1821 $sql .=
', s.remise_client, s.remise_supplier';
1823 $sql .=
', sr.remise_client, sr2.remise_supplier';
1825 $sql .=
' FROM '.MAIN_DB_PREFIX.
'societe as s';
1827 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"societe_perentity as spe ON spe.fk_soc = s.rowid AND spe.entity = ".((int) $conf->entity);
1829 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_effectif as e ON s.fk_effectif = e.id';
1830 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_country as c ON s.fk_pays = c.rowid';
1831 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_stcomm as st ON s.fk_stcomm = st.id';
1832 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_forme_juridique as fj ON s.fk_forme_juridique = fj.code';
1833 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_departements as d ON s.fk_departement = d.rowid';
1834 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_regions as r ON d.fk_region = r.code_region ';
1835 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_typent as te ON s.fk_typent = te.id';
1836 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_incoterms as i ON s.fk_incoterms = i.rowid';
1839 if (isModEnabled(
'multicompany')) {
1840 $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').
'))';
1841 $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').
'))';
1843 $sql .=
' WHERE s.entity IN ('.getEntity($this->element).
')';
1845 $sql .=
' AND s.rowid = '.((int) $rowid);
1848 $sql .=
" AND s.nom = '".$this->db->escape($ref).
"'";
1851 $sql .=
" AND s.name_alias = '".$this->db->escape($ref_alias).
"'";
1854 $sql .=
" AND s.ref_ext = '".$this->db->escape($ref_ext).
"'";
1857 $sql .=
" AND s.barcode = '".$this->db->escape($barcode).
"'";
1860 $sql .=
" AND s.siren = '".$this->db->escape($idprof1).
"'";
1863 $sql .=
" AND s.siret = '".$this->db->escape($idprof2).
"'";
1866 $sql .=
" AND s.ape = '".$this->db->escape($idprof3).
"'";
1869 $sql .=
" AND s.idprof4 = '".$this->db->escape($idprof4).
"'";
1872 $sql .=
" AND s.idprof5 = '".$this->db->escape($idprof5).
"'";
1875 $sql .=
" AND s.idprof6 = '".$this->db->escape($idprof6).
"'";
1878 $sql .=
" AND s.email = '".$this->db->escape($email).
"'";
1881 $resql = $this->db->query($sql);
1883 $num = $this->db->num_rows($resql);
1885 $this->error =
'Fetch found several records. Rename one of thirdparties to avoid duplicate.';
1889 $obj = $this->db->fetch_object($resql);
1891 $this->
id = $obj->rowid;
1892 $this->entity = $obj->entity;
1893 $this->canvas = $obj->canvas;
1895 $this->
ref = $obj->rowid;
1896 $this->
name = $obj->name;
1897 $this->nom = $obj->name;
1898 $this->name_alias = $obj->name_alias;
1899 $this->ref_ext = $obj->ref_ext;
1901 $this->date_creation = $this->db->jdate($obj->date_creation);
1902 $this->date_modification = $this->db->jdate($obj->date_modification);
1903 $this->user_creation_id = $obj->fk_user_creat;
1904 $this->user_modification_id = $obj->fk_user_modif;
1906 $this->address = $obj->address;
1907 $this->zip = $obj->zip;
1908 $this->town = $obj->town;
1910 $this->country_id = $obj->country_id;
1911 $this->country_code = $obj->country_id ? $obj->country_code :
'';
1912 $this->country = $obj->country_id ? (($langs->transnoentities(
'Country'.$obj->country_code) !=
'Country'.$obj->country_code) ? $langs->transnoentities(
'Country'.$obj->country_code) : $obj->country) :
'';
1914 $this->state_id = $obj->state_id;
1915 $this->state_code = $obj->state_code;
1916 $this->region_id = $obj->region_id;
1917 $this->region_code = $obj->region_code;
1918 $this->state = ($obj->state !=
'-' ? $obj->state :
'');
1920 $transcode = $langs->trans(
'StatusProspect'.$obj->fk_stcomm);
1921 $label = ($transcode !=
'StatusProspect'.$obj->fk_stcomm ? $transcode : $obj->stcomm);
1922 $this->stcomm_id = $obj->fk_stcomm;
1923 $this->status_prospect_label = $label;
1924 $this->stcomm_picto = $obj->stcomm_picto;
1926 $this->email = $obj->email;
1927 $this->socialnetworks = ($obj->socialnetworks ? (array) json_decode($obj->socialnetworks,
true) : array());
1929 $this->url = $obj->url;
1930 $this->phone = $obj->phone;
1931 $this->fax = $obj->fax;
1933 $this->parent = $obj->parent;
1935 $this->idprof1 = $obj->idprof1;
1936 $this->idprof2 = $obj->idprof2;
1937 $this->idprof3 = $obj->idprof3;
1938 $this->idprof4 = $obj->idprof4;
1939 $this->idprof5 = $obj->idprof5;
1940 $this->idprof6 = $obj->idprof6;
1942 $this->capital = $obj->capital;
1944 $this->code_client = $obj->code_client;
1945 $this->code_fournisseur = $obj->code_fournisseur;
1947 $this->code_compta = $obj->code_compta;
1948 $this->code_compta_client = $obj->code_compta;
1949 $this->code_compta_fournisseur = $obj->code_compta_fournisseur;
1951 $this->barcode = $obj->barcode;
1953 $this->tva_assuj = $obj->tva_assuj;
1954 $this->tva_intra = $obj->tva_intra;
1956 if (!empty($obj->spe_vat_reverse_charge)) {
1957 $this->vat_reverse_charge = $obj->spe_vat_reverse_charge;
1958 } elseif (!empty($obj->soc_vat_reverse_charge)) {
1959 $this->vat_reverse_charge = $obj->soc_vat_reverse_charge;
1961 $this->vat_reverse_charge = 0;
1964 $this->
status = $obj->status;
1967 $this->localtax1_assuj = $obj->localtax1_assuj;
1968 $this->localtax2_assuj = $obj->localtax2_assuj;
1970 $this->localtax1_value = $obj->localtax1_value;
1971 $this->localtax2_value = $obj->localtax2_value;
1973 $this->typent_id = $obj->typent_id;
1974 $this->typent_code = $obj->typent_code;
1976 $this->effectif_id = $obj->effectif_id;
1977 $this->effectif = $obj->effectif_id ? $obj->effectif :
'';
1979 $this->forme_juridique_code = $obj->forme_juridique_code;
1980 $this->forme_juridique = $obj->forme_juridique_code ? $obj->forme_juridique :
'';
1982 $this->fk_prospectlevel = $obj->fk_prospectlevel;
1984 $this->prefix_comm = $obj->prefix_comm;
1986 $this->remise_percent = $obj->remise_client ?
price2num($obj->remise_client) : 0;
1987 $this->remise_supplier_percent = $obj->remise_supplier;
1989 $this->mode_reglement_id = $obj->mode_reglement;
1990 $this->cond_reglement_id = $obj->cond_reglement;
1991 $this->deposit_percent = $obj->deposit_percent;
1992 $this->transport_mode_id = $obj->transport_mode;
1993 $this->mode_reglement_supplier_id = $obj->mode_reglement_supplier;
1994 $this->cond_reglement_supplier_id = $obj->cond_reglement_supplier;
1995 $this->transport_mode_supplier_id = $obj->transport_mode_supplier;
1996 $this->shipping_method_id = ($obj->fk_shipping_method > 0) ? $obj->fk_shipping_method :
null;
1997 $this->fk_account = $obj->fk_account;
1999 $this->client = $obj->client;
2000 $this->fournisseur = $obj->fournisseur;
2002 $this->note = $obj->note_private;
2003 $this->note_private = $obj->note_private;
2004 $this->note_public = $obj->note_public;
2005 $this->model_pdf = $obj->model_pdf;
2006 $this->default_lang = $obj->default_lang;
2007 $this->logo = $obj->logo;
2008 $this->logo_squarred = $obj->logo_squarred;
2010 $this->webservices_url = $obj->webservices_url;
2011 $this->webservices_key = $obj->webservices_key;
2013 $this->accountancy_code_buy = $obj->accountancy_code_buy;
2014 $this->accountancy_code_sell = $obj->accountancy_code_sell;
2016 $this->outstanding_limit = $obj->outstanding_limit;
2017 $this->order_min_amount = $obj->order_min_amount;
2018 $this->supplier_order_min_amount = $obj->supplier_order_min_amount;
2021 $this->price_level = $obj->price_level;
2024 $this->fk_warehouse = $obj->fk_warehouse;
2026 $this->import_key = $obj->import_key;
2029 $this->fk_incoterms = $obj->fk_incoterms;
2030 $this->location_incoterms = $obj->location_incoterms;
2031 $this->label_incoterms = $obj->label_incoterms;
2034 $this->fk_multicurrency = $obj->fk_multicurrency;
2035 $this->multicurrency_code = $obj->multicurrency_code;
2038 $this->model_pdf = $obj->model_pdf;
2039 $this->last_main_doc = $obj->last_main_doc;
2049 $this->db->free($resql);
2051 $this->error = $this->db->lasterror();
2052 $this->errors[] = $this->db->lasterror();
2058 $this->price_level = 1;
2072 public function delete($id,
User $fuser =
null, $call_trigger = 1)
2074 global $langs, $conf, $user;
2076 if (empty($fuser)) {
2080 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
2082 $entity = isset($this->entity) ? $this->entity : $conf->entity;
2084 dol_syslog(get_class($this).
"::delete", LOG_DEBUG);
2089 if (empty($objectisused)) {
2093 if (!$error && $call_trigger) {
2095 $result = $this->
call_trigger(
'COMPANY_DELETE', $fuser);
2103 require_once DOL_DOCUMENT_ROOT.
'/categories/class/categorie.class.php';
2105 $toute_categs = array();
2108 if ($this->client || $this->prospect) {
2109 $toute_categs[
'customer'] = $static_cat->containing($this->
id, Categorie::TYPE_CUSTOMER);
2111 if ($this->fournisseur) {
2112 $toute_categs[
'supplier'] = $static_cat->containing($this->
id, Categorie::TYPE_SUPPLIER);
2116 foreach ($toute_categs as $type => $categs_type) {
2117 foreach ($categs_type as $cat) {
2118 $cat->del_type($this, $type);
2124 foreach ($this->childtablesoncascade as $tabletodelete) {
2125 $deleteFromObject = explode(
':', $tabletodelete);
2126 if (count($deleteFromObject) >= 2) {
2127 $className = str_replace(
'@',
'', $deleteFromObject[0]);
2128 $filepath = $deleteFromObject[1];
2129 $columnName = $deleteFromObject[2];
2131 $child_object =
new $className($this->db);
2132 $result = $child_object->deleteByParentField($id, $columnName);
2135 $this->errors[] = $child_object->error;
2140 $this->errors[] =
'Cannot include child class file '.$filepath;
2144 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.$tabletodelete;
2145 $sql .=
" WHERE fk_soc = ".((int) $id);
2146 if (!$this->db->query($sql)) {
2148 $this->errors[] = $this->db->lasterror();
2160 dol_syslog(get_class($this).
"::delete error -3 ".$this->error, LOG_ERR);
2166 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"societe";
2167 $sql .=
" SET parent = NULL";
2168 $sql .=
" WHERE parent = ".((int) $id);
2169 if (!$this->db->query($sql)) {
2171 $this->errors[] = $this->db->lasterror();
2178 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"societe_perentity";
2179 $sql .=
" WHERE fk_soc = ".((int) $id);
2180 if (!$this->db->query($sql)) {
2182 $this->errors[] = $this->db->lasterror();
2186 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"societe";
2187 $sql .=
" WHERE rowid = ".((int) $id);
2188 if (!$this->db->query($sql)) {
2190 $this->errors[] = $this->db->lasterror();
2195 $this->db->commit();
2198 if (!empty($conf->societe->multidir_output[$entity])) {
2199 $docdir = $conf->societe->multidir_output[$entity].
"/".$id;
2208 $this->db->rollback();
2212 dol_syslog(
"Can't remove thirdparty with id ".$id.
". There is ".$objectisused.
" childs", LOG_WARNING);
2229 dol_syslog(get_class($this).
"::set_as_client is deprecated use setAsCustomer instead", LOG_NOTICE);
2243 if (($this->client == 2 || $this->client == 3) && !
getDolGlobalInt(
'SOCIETE_DISABLE_PROSPECTSCUSTOMERS')) {
2246 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element;
2247 $sql .=
" SET client = ".((int) $newclient);
2248 $sql .=
" WHERE rowid = ".((int) $this->
id);
2250 $resql = $this->db->query($sql);
2252 $this->client = $newclient;
2273 global $conf, $langs;
2276 $note = trim($note);
2278 $this->error = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"NoteReason"));
2282 dol_syslog(get_class($this).
"::set_remise_client ".$remise.
", ".$note.
", ".$user->id);
2290 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"societe ";
2291 $sql .=
" SET remise_client = '".$this->db->escape($remise).
"'";
2292 $sql .=
" WHERE rowid = ".((int) $this->
id);
2293 $resql = $this->db->query($sql);
2295 $this->db->rollback();
2296 $this->error = $this->db->error();
2301 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"societe_remise";
2302 $sql .=
" (entity, datec, fk_soc, remise_client, note, fk_user_author)";
2303 $sql .=
" VALUES (".$conf->entity.
", '".$this->db->idate($now).
"', ".((int) $this->
id).
", '".$this->db->escape($remise).
"',";
2304 $sql .=
" '".$this->db->escape($note).
"',";
2305 $sql .=
" ".((int) $user->id);
2308 $resql = $this->db->query($sql);
2310 $this->db->rollback();
2311 $this->error = $this->db->lasterror();
2315 $this->db->commit();
2334 global $conf, $langs;
2337 $note = trim($note);
2339 $this->error = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"NoteReason"));
2343 dol_syslog(get_class($this).
"::set_remise_supplier ".$remise.
", ".$note.
", ".$user->id);
2351 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"societe ";
2352 $sql .=
" SET remise_supplier = '".$this->db->escape($remise).
"'";
2353 $sql .=
" WHERE rowid = ".((int) $this->
id);
2354 $resql = $this->db->query($sql);
2356 $this->db->rollback();
2357 $this->error = $this->db->error();
2362 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"societe_remise_supplier";
2363 $sql .=
" (entity, datec, fk_soc, remise_supplier, note, fk_user_author)";
2364 $sql .=
" VALUES (".$conf->entity.
", '".$this->db->idate($now).
"', ".((int) $this->
id).
", '".$this->db->escape($remise).
"',";
2365 $sql .=
" '".$this->db->escape($note).
"',";
2366 $sql .=
" ".((int) $user->id);
2369 $resql = $this->db->query($sql);
2371 $this->db->rollback();
2372 $this->error = $this->db->lasterror();
2376 $this->db->commit();
2395 public function set_remise_except($remise,
User $user, $desc, $vatrate =
'', $discount_type = 0, $price_base_type =
'HT')
2402 $desc = trim($desc);
2405 if (!($remise > 0)) {
2406 $this->error = $langs->trans(
"ErrorWrongValueForParameter",
"1");
2410 $this->error = $langs->trans(
"ErrorWrongValueForParameter",
"3");
2414 if ($this->
id > 0) {
2418 if (preg_match(
'/\((.*)\)/', $vatrate, $reg)) {
2419 $vat_src_code = $reg[1];
2420 $vatrate = preg_replace(
'/\s*\(.*\)/',
'', $vatrate);
2423 require_once DOL_DOCUMENT_ROOT.
'/core/class/discount.class.php';
2426 $discount->fk_soc = $this->id;
2428 $discount->discount_type = $discount_type;
2430 if ($price_base_type ==
'TTC') {
2431 $discount->amount_ttc = $discount->multicurrency_amount_ttc =
price2num($remise,
'MT');
2432 $discount->amount_ht = $discount->multicurrency_amount_ht =
price2num($remise / (1 + $vatrate / 100),
'MT');
2433 $discount->amount_tva = $discount->multicurrency_amount_tva =
price2num($discount->amount_ttc - $discount->amount_ht,
'MT');
2435 $discount->amount_ht = $discount->multicurrency_amount_ht =
price2num($remise,
'MT');
2436 $discount->amount_tva = $discount->multicurrency_amount_tva =
price2num($remise * $vatrate / 100,
'MT');
2437 $discount->amount_ttc = $discount->multicurrency_amount_ttc =
price2num($discount->amount_ht + $discount->amount_tva,
'MT');
2440 $discount->tva_tx =
price2num($vatrate);
2441 $discount->vat_src_code = $vat_src_code;
2443 $discount->description = $desc;
2445 $result = $discount->create($user);
2449 $this->error = $discount->error;
2468 require_once DOL_DOCUMENT_ROOT.
'/core/class/discount.class.php';
2471 $result = $discountstatic->getAvailableDiscounts($this, $user, $filter, $maxvalue, $discount_type);
2475 $this->error = $discountstatic->error;
2493 $reparray = array();
2495 $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";
2496 $sql .=
", u.office_fax, u.user_mobile, u.personal_mobile";
2497 $sql .=
" FROM ".MAIN_DB_PREFIX.
"societe_commerciaux as sc, ".MAIN_DB_PREFIX.
"user as u";
2498 if (isModEnabled(
'multicompany') &&
getDolGlobalString(
'MULTICOMPANY_TRANSVERSE_MODE')) {
2499 $sql .=
", ".MAIN_DB_PREFIX.
"usergroup_user as ug";
2500 $sql .=
" WHERE ((ug.fk_user = sc.fk_user";
2501 $sql .=
" AND ug.entity = ".$conf->entity.
")";
2502 $sql .=
" OR u.admin = 1)";
2504 $sql .=
" WHERE entity in (0, ".$conf->entity.
")";
2507 $sql .=
" AND u.rowid = sc.fk_user AND sc.fk_soc = ".((int) $this->
id);
2508 if (empty($sortfield) && empty($sortorder)) {
2509 $sortfield =
'u.lastname,u.firstname';
2510 $sortorder =
'ASC,ASC';
2512 $sql .= $this->db->order($sortfield, $sortorder);
2514 $resql = $this->db->query($sql);
2516 $num = $this->db->num_rows($resql);
2519 $obj = $this->db->fetch_object($resql);
2522 $reparray[$i][
'id'] = $obj->rowid;
2523 $reparray[$i][
'lastname'] = $obj->lastname;
2524 $reparray[$i][
'firstname'] = $obj->firstname;
2525 $reparray[$i][
'email'] = $obj->email;
2526 $reparray[$i][
'phone'] = $obj->office_phone;
2527 $reparray[$i][
'office_phone'] = $obj->office_phone;
2528 $reparray[$i][
'office_fax'] = $obj->office_fax;
2529 $reparray[$i][
'user_mobile'] = $obj->user_mobile;
2530 $reparray[$i][
'personal_mobile'] = $obj->personal_mobile;
2531 $reparray[$i][
'job'] = $obj->job;
2532 $reparray[$i][
'statut'] = $obj->status;
2533 $reparray[$i][
'status'] = $obj->status;
2534 $reparray[$i][
'entity'] = $obj->entity;
2535 $reparray[$i][
'login'] = $obj->login;
2536 $reparray[$i][
'photo'] = $obj->photo;
2537 $reparray[$i][
'gender'] = $obj->gender;
2539 $reparray[] = $obj->rowid;
2562 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"societe";
2563 $sql .=
" SET price_level = ".((int) $price_level);
2564 $sql .=
" WHERE rowid = ".((int) $this->
id);
2566 if (!$this->db->query($sql)) {
2571 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"societe_prices";
2572 $sql .=
" (datec, fk_soc, price_level, fk_user_author)";
2573 $sql .=
" VALUES ('".$this->db->idate($now).
"', ".((int) $this->
id).
", ".((int) $price_level).
", ".((int) $user->id).
")";
2575 if (!$this->db->query($sql)) {
2597 if ($this->
id > 0 && $commid > 0) {
2601 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"societe_commerciaux";
2602 $sql .=
" WHERE fk_soc = ".((int) $this->
id).
" AND fk_user = ".((int) $commid);
2604 $resql = $this->db->query($sql);
2606 dol_syslog(get_class($this).
"::add_commercial Error ".$this->db->lasterror());
2612 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"societe_commerciaux";
2613 $sql .=
" (fk_soc, fk_user)";
2614 $sql .=
" VALUES (".((int) $this->
id).
", ".((int) $commid).
")";
2616 $resql = $this->db->query($sql);
2618 dol_syslog(get_class($this).
"::add_commercial Error ".$this->db->lasterror());
2624 $this->context = array(
'commercial_modified' => $commid);
2626 $result = $this->
call_trigger(
'COMPANY_LINK_SALE_REPRESENTATIVE', $user);
2633 $this->db->commit();
2636 $this->db->rollback();
2656 $this->context = array(
'commercial_modified'=>$commid);
2658 $result = $this->
call_trigger(
'COMPANY_UNLINK_SALE_REPRESENTATIVE', $user);
2663 if ($this->
id > 0 && $commid > 0) {
2664 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"societe_commerciaux ";
2665 $sql .=
" WHERE fk_soc = ".((int) $this->
id).
" AND fk_user = ".((int) $commid);
2667 if (!$this->db->query($sql)) {
2668 dol_syslog(get_class($this).
"::del_commercial Erreur");
2682 global $conf, $langs, $user;
2684 $langs->loadLangs([
'companies',
'commercial']);
2688 $option = $params[
'option'] ??
'';
2689 $nofetch = !empty($params[
'nofetch']);
2691 $noaliasinname = (empty($params[
'noaliasinname']) ? 0 : $params[
'noaliasinname']);
2694 return [
'optimize' => $langs->trans(
"ShowCompany")];
2697 if (!empty($this->logo) && class_exists(
'Form')) {
2698 $photo =
'<div class="photointooltip floatright">';
2699 $photo .=
Form::showphoto(
'societe', $this, 0, 40, 0,
'photoref',
'mini', 0);
2701 $datas[
'photo'] = $photo;
2702 } elseif (!empty($this->logo_squarred) && class_exists(
'Form')) {
2708 $datas[
'divopen'] =
'<div class="centpercent">';
2710 if ($option ==
'customer' || $option ==
'compta' || $option ==
'category') {
2711 $datas[
'picto'] =
img_picto(
'', $this->picto).
' <u class="paddingrightonly">'.$langs->trans(
"Customer").
'</u>';
2712 } elseif ($option ==
'prospect' && !
getDolGlobalString(
'SOCIETE_DISABLE_PROSPECTS')) {
2713 $datas[
'picto'] =
img_picto(
'', $this->picto).
' <u class="paddingrightonly">'.$langs->trans(
"Prospect").
'</u>';
2714 } elseif ($option ==
'supplier' || $option ==
'category_supplier') {
2715 $datas[
'picto'] =
img_picto(
'', $this->picto).
' <u class="paddingrightonly">'.$langs->trans(
"Supplier").
'</u>';
2716 } elseif ($option ==
'agenda') {
2717 $datas[
'picto'] =
img_picto(
'', $this->picto).
' <u class="paddingrightonly">'.$langs->trans(
"ThirdParty").
'</u>';
2718 } elseif ($option ==
'project') {
2719 $datas[
'picto'] =
img_picto(
'', $this->picto).
' <u class="paddingrightonly">'.$langs->trans(
"ThirdParty").
'</u>';
2720 } elseif ($option ==
'margin') {
2721 $datas[
'picto'] =
img_picto(
'', $this->picto).
' <u class="paddingrightonly">'.$langs->trans(
"ThirdParty").
'</u>';
2722 } elseif ($option ==
'contact') {
2723 $datas[
'picto'] =
img_picto(
'', $this->picto).
' <u class="paddingrightonly">'.$langs->trans(
"ThirdParty").
'</u>';
2724 } elseif ($option ==
'ban') {
2725 $datas[
'picto'] =
img_picto(
'', $this->picto).
' <u class="paddingrightonly">'.$langs->trans(
"ThirdParty").
'</u>';
2729 if (empty($datas[
'picto'])) {
2730 $datas[
'picto'] =
img_picto(
'', $this->picto).
' <u class="paddingrightonly">'.$langs->trans(
"ThirdParty").
'</u>';
2732 if (isset($this->
status)) {
2733 $datas[
'status'] =
' '.$this->getLibStatut(5);
2735 if (isset($this->client) && isset($this->fournisseur)) {
2736 $datas[
'type'] =
' ' . $this->
getTypeUrl(1);
2739 if (!empty($this->name_alias) && empty($noaliasinname)) {
2742 if (!empty($this->email)) {
2743 $datas[
'email'] =
'<br>'.img_picto(
'',
'email',
'class="pictofixedwidth"').$this->email;
2745 if (!empty($this->url)) {
2746 $datas[
'url'] =
'<br>'.img_picto(
'',
'globe',
'class="pictofixedwidth"').$this->url;
2748 if (!empty($this->phone) || !empty($this->fax)) {
2749 $phonelist = array();
2751 $phonelist[] =
dol_print_phone($this->phone, $this->country_code, $this->
id, 0,
'',
' ',
'phone');
2754 $phonelist[] =
dol_print_phone($this->fax, $this->country_code, $this->
id, 0,
'',
' ',
'fax');
2756 $datas[
'phonelist'] =
'<br>'.implode(
' ', $phonelist);
2759 if (!empty($this->address)) {
2760 $datas[
'address'] =
'<br><b>'.$langs->trans(
"Address").
':</b> '.
dol_format_address($this, 1,
' ', $langs);
2761 } elseif (!empty($this->country_code)) {
2762 $datas[
'address'] =
'<br><b>'.$langs->trans(
'Country').
':</b> '.$this->country_code;
2764 if (!empty($this->tva_intra) || (
getDolGlobalString(
'SOCIETE_SHOW_FIELD_IN_TOOLTIP') && strpos($conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP,
'vatnumber') !==
false)) {
2765 $datas[
'vatintra'] =
'<br><b>'.$langs->trans(
'VATIntra').
':</b> '.
dol_escape_htmltag($this->tva_intra);
2769 if (strpos($conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP,
'profid1') !==
false && $langs->trans(
'ProfId1'.$this->country_code) !=
'-') {
2770 $datas[
'profid1'] =
'<br><b>'.$langs->trans(
'ProfId1'.$this->country_code).
':</b> '.$this->idprof1;
2772 if (strpos($conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP,
'profid2') !==
false && $langs->trans(
'ProfId2'.$this->country_code) !=
'-') {
2773 $datas[
'profid2'] =
'<br><b>'.$langs->trans(
'ProfId2'.$this->country_code).
':</b> '.$this->idprof2;
2775 if (strpos($conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP,
'profid3') !==
false && $langs->trans(
'ProfId3'.$this->country_code) !=
'-') {
2776 $datas[
'profid3'] =
'<br><b>'.$langs->trans(
'ProfId3'.$this->country_code).
':</b> '.$this->idprof3;
2778 if (strpos($conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP,
'profid4') !==
false && $langs->trans(
'ProfId4'.$this->country_code) !=
'-') {
2779 $datas[
'profid4'] =
'<br><b>'.$langs->trans(
'ProfId4'.$this->country_code).
':</b> '.$this->idprof4;
2781 if (strpos($conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP,
'profid5') !==
false && $langs->trans(
'ProfId5'.$this->country_code) !=
'-') {
2782 $datas[
'profid5'] =
'<br><b>'.$langs->trans(
'ProfId5'.$this->country_code).
':</b> '.$this->idprof5;
2784 if (strpos($conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP,
'profid6') !==
false && $langs->trans(
'ProfId6'.$this->country_code) !=
'-') {
2785 $datas[
'profid6'] =
'<br><b>'.$langs->trans(
'ProfId6'.$this->country_code).
':</b> '.$this->idprof6;
2789 $datas[
'separator'] =
'<br>';
2791 if (!empty($this->code_client) && ($this->client == 1 || $this->client == 3)) {
2792 $datas[
'customercode'] =
'<br><b>'.$langs->trans(
'CustomerCode').
':</b> '.$this->code_client;
2794 if (isModEnabled(
'accounting') && ($this->client == 1 || $this->client == 3)) {
2795 $langs->load(
'compta');
2796 $datas[
'accountancycustomercode'] =
'<br><b>'.$langs->trans(
'CustomerAccountancyCode').
':</b> '.($this->code_compta ? $this->code_compta : $this->code_compta_client);
2799 if (!$nofetch && isModEnabled(
'categorie') && $this->client) {
2800 require_once DOL_DOCUMENT_ROOT .
'/categories/class/categorie.class.php';
2801 $form =
new Form($this->db);
2802 $datas[
'categories_customer'] =
'<br>' . $form->showCategories($this->
id, Categorie::TYPE_CUSTOMER, 1, 1);
2804 if (!empty($this->code_fournisseur) && $this->fournisseur) {
2805 $datas[
'suppliercode'] =
'<br><b>'.$langs->trans(
'SupplierCode').
':</b> '.$this->code_fournisseur;
2807 if (isModEnabled(
'accounting') && $this->fournisseur) {
2808 $langs->load(
'compta');
2809 $datas[
'accountancysuppliercode'] =
'<br><b>'.$langs->trans(
'SupplierAccountancyCode').
':</b> '.$this->code_compta_fournisseur;
2812 if (!$nofetch && isModEnabled(
'categorie') && $this->fournisseur) {
2813 require_once DOL_DOCUMENT_ROOT .
'/categories/class/categorie.class.php';
2814 $form =
new Form($this->db);
2815 $datas[
'categories_supplier'] =
'<br>' . $form->showCategories($this->
id, Categorie::TYPE_SUPPLIER, 1, 1);
2818 $datas[
'divclose'] =
'</div>';
2835 public function getNomUrl($withpicto = 0, $option =
'', $maxlen = 0, $notooltip = 0, $save_lastsearch_value = -1, $noaliasinname = 0, $target =
'')
2837 global $conf, $langs, $hookmanager;
2839 if (!empty($conf->dol_no_mouse_hover)) {
2843 $name = $this->
name ? $this->
name : $this->nom;
2845 if (
getDolGlobalString(
'SOCIETE_ON_SEARCH_AND_LIST_GO_ON_CUSTOMER_OR_SUPPLIER_CARD')) {
2846 if (empty($option) && $this->client > 0) {
2847 $option =
'customer';
2849 if (empty($option) && $this->fournisseur > 0) {
2850 $option =
'supplier';
2856 if (($this->client) && (!empty($this->code_client)) && (
getDolGlobalInt(
'SOCIETE_ADD_REF_IN_LIST') == 1 ||
getDolGlobalInt(
'SOCIETE_ADD_REF_IN_LIST') == 2)) {
2857 $code = $this->code_client.
' - ';
2860 if (($this->fournisseur) && (!empty($this->code_fournisseur)) && (
getDolGlobalInt(
'SOCIETE_ADD_REF_IN_LIST') == 1 ||
getDolGlobalInt(
'SOCIETE_ADD_REF_IN_LIST') == 3)) {
2861 $code .= $this->code_fournisseur.
' - ';
2866 $name = $code.
' '.$name;
2873 if (!empty($this->name_alias) && empty($noaliasinname)) {
2874 $name .=
' ('.$this->name_alias.
')';
2880 'objecttype' => $this->element,
2881 'option' => $option,
2884 $classfortooltip =
'classfortooltip';
2887 $classfortooltip =
'classforajaxtooltip';
2888 $dataparams =
' data-params="'.dol_escape_htmltag(json_encode($params)).
'"';
2897 if ($option ==
'customer' || $option ==
'compta' || $option ==
'category') {
2898 $linkstart =
'<a href="'.DOL_URL_ROOT.
'/comm/card.php?socid='.$this->id;
2899 } elseif ($option ==
'prospect' && !
getDolGlobalString(
'SOCIETE_DISABLE_PROSPECTS')) {
2900 $linkstart =
'<a href="'.DOL_URL_ROOT.
'/comm/card.php?socid='.$this->id;
2901 } elseif ($option ==
'supplier' || $option ==
'category_supplier') {
2902 $linkstart =
'<a href="'.DOL_URL_ROOT.
'/fourn/card.php?socid='.$this->id;
2903 } elseif ($option ==
'agenda') {
2904 $linkstart =
'<a href="'.DOL_URL_ROOT.
'/societe/agenda.php?socid='.$this->id;
2905 } elseif ($option ==
'project') {
2906 $linkstart =
'<a href="'.DOL_URL_ROOT.
'/societe/project.php?socid='.$this->id;
2907 } elseif ($option ==
'margin') {
2908 $linkstart =
'<a href="'.DOL_URL_ROOT.
'/margin/tabs/thirdpartyMargins.php?socid='.$this->
id.
'&type=1';
2909 } elseif ($option ==
'contact') {
2910 $linkstart =
'<a href="'.DOL_URL_ROOT.
'/societe/contact.php?socid='.$this->id;
2911 } elseif ($option ==
'ban') {
2912 $linkstart =
'<a href="'.DOL_URL_ROOT.
'/societe/paymentmodes.php?socid='.$this->id;
2916 if (empty($linkstart)) {
2917 $linkstart =
'<a href="'.DOL_URL_ROOT.
'/societe/card.php?socid='.$this->id;
2921 $linkstart .= (!empty($this->canvas) ?
'&canvas='.$this->canvas :
'');
2923 $add_save_lastsearch_values = ($save_lastsearch_value == 1 ? 1 : 0);
2924 if ($save_lastsearch_value == -1 && isset($_SERVER[
"PHP_SELF"]) && preg_match(
'/list\.php/', $_SERVER[
"PHP_SELF"])) {
2925 $add_save_lastsearch_values = 1;
2927 if ($add_save_lastsearch_values) {
2928 $linkstart .=
'&save_lastsearch_values=1';
2933 if (empty($notooltip)) {
2935 $label = $langs->trans(
"ShowCompany");
2936 $linkclose .=
' alt="'.dol_escape_htmltag($label, 1).
'"';
2938 $linkclose .= ($label ?
' title="'.dol_escape_htmltag($label, 1).
'"' :
' title="tocomplete"');
2939 $linkclose .= $dataparams.
' class="'.$classfortooltip.
' refurl valignmiddle"';
2940 $target_value = array(
'_self',
'_blank',
'_parent',
'_top');
2941 if (in_array($target, $target_value)) {
2942 $linkclose .=
' target="'.dol_escape_htmltag($target).
'"';
2945 $linkclose .=
' class="valignmiddle"';
2947 $linkstart .= $linkclose.
'>';
2951 if (!$user->hasRight(
'societe',
'client',
'voir') && $user->socid > 0 && $this->id != $user->socid) {
2956 $result .= $linkstart;
2958 $result .=
img_object(($notooltip ?
'' : $label), ($this->picto ? $this->picto :
'generic'), (
' class="'.(($withpicto != 2) ?
'paddingright' :
'').
'"'), 0, 0, $notooltip ? 0 : 1);
2960 if ($withpicto != 2) {
2963 $result .= $linkend;
2966 $hookmanager->initHooks(array(
'thirdpartydao'));
2967 $parameters = array(
2969 'getnomurl' => &$result,
2970 'withpicto '=> $withpicto,
2973 'notooltip'=> $notooltip,
2974 'save_lastsearch_value'=> $save_lastsearch_value
2976 $reshook = $hookmanager->executeHooks(
'getNomUrl', $parameters, $this, $action);
2978 $result = $hookmanager->resPrint;
2980 $result .= $hookmanager->resPrint;
2995 public function getTypeUrl($withpicto = 0, $option =
'', $notooltip = 0, $tag =
'a')
2997 global $conf, $langs;
3000 if (empty($option) || preg_match(
'/prospect/', $option)) {
3001 if (($this->client == 2 || $this->client == 3) && !
getDolGlobalString(
'SOCIETE_DISABLE_PROSPECTS')) {
3002 $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.
'>';
3005 if (empty($option) || preg_match(
'/customer/', $option)) {
3006 if (($this->client == 1 || $this->client == 3) && !
getDolGlobalString(
'SOCIETE_DISABLE_CUSTOMERS')) {
3007 $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.
'>';
3010 if (empty($option) || preg_match(
'/supplier/', $option)) {
3011 if ((isModEnabled(
"supplier_order") || isModEnabled(
"supplier_invoice")) && $this->fournisseur) {
3012 $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.
'>';
3042 $langs->load(
'companies');
3044 $statusType =
'status4';
3046 $statusType =
'status6';
3049 if (empty($this->labelStatus) || empty($this->labelStatusShort)) {
3050 $this->labelStatus[0] = $langs->transnoentitiesnoconv(
"ActivityCeased");
3051 $this->labelStatus[1] = $langs->transnoentitiesnoconv(
"InActivity");
3052 $this->labelStatusShort[0] = $langs->transnoentitiesnoconv(
"ActivityCeased");
3053 $this->labelStatusShort[1] = $langs->transnoentitiesnoconv(
"InActivity");
3056 return dolGetStatus($this->labelStatus[$status], $this->labelStatusShort[$status],
'', $statusType, $mode);
3072 if ($this->email && $addthirdparty) {
3073 if (empty($this->
name)) {
3074 $this->
name = $this->nom;
3076 $contact_emails[
'thirdparty'] = ($addthirdparty == 2 ?
'<span class="opacitymedium">' :
'').$langs->transnoentitiesnoconv(
"ThirdParty").($addthirdparty == 2 ?
'</span>' :
'').
': '.
dol_trunc($this->
name, 16).
" <".$this->email.
">";
3079 return $contact_emails;
3095 if (!empty($this->phone)) {
3096 if (empty($this->
name)) {
3097 $this->
name = $this->nom;
3100 $contact_phone[
'thirdparty'] = $langs->transnoentitiesnoconv(
"ThirdParty").
': '.
dol_trunc($this->
name, 16).
" <".$this->phone.
">";
3102 return $contact_phone;
3118 $contact_property = array();
3121 $sql =
"SELECT rowid, email, statut as status, phone_mobile, lastname, poste, firstname";
3122 $sql .=
" FROM ".MAIN_DB_PREFIX.
"socpeople";
3123 $sql .=
" WHERE fk_soc = ".((int) $this->
id);
3124 $sql .=
" AND entity IN (".getEntity($this->element).
")";
3125 $sql .=
" ORDER BY lastname, firstname";
3127 $resql = $this->db->query($sql);
3129 $nump = $this->db->num_rows($resql);
3133 if ($mode ==
'email') {
3139 while ($i < $nump) {
3140 $obj = $this->db->fetch_object($resql);
3141 if ($mode ==
'email') {
3142 $property = $obj->email;
3143 } elseif ($mode ==
'mobile') {
3144 $property = $obj->phone_mobile;
3146 $property = $obj->$mode;
3150 if ($obj->status == 1 || empty($hidedisabled)) {
3151 if (empty($property)) {
3152 if ($mode ==
'email') {
3153 $property = $langs->transnoentitiesnoconv(
"NoEMail");
3154 } elseif ($mode ==
'mobile') {
3155 $property = $langs->transnoentitiesnoconv(
"NoMobilePhone");
3159 if (!empty($obj->poste)) {
3160 $contact_property[$obj->rowid] = trim(
dolGetFirstLastname($obj->firstname, $obj->lastname)).($obj->poste ?
" - ".$obj->poste :
"").(($mode !=
'poste' && $property) ?
" ".$sepa.$property.$sepb :
'');
3162 $contact_property[$obj->rowid] = trim(
dolGetFirstLastname($obj->firstname, $obj->lastname)).(($mode !=
'poste' && $property) ?
" ".$sepa.$property.$sepb :
'');
3171 return $contact_property;
3184 $contacts = array();
3186 $sql =
"SELECT rowid, lastname, firstname FROM ".MAIN_DB_PREFIX.
"socpeople WHERE fk_soc = ".((int) $this->
id);
3187 $resql = $this->db->query($sql);
3189 $nump = $this->db->num_rows($resql);
3192 while ($i < $nump) {
3193 $obj = $this->db->fetch_object($resql);
3213 require_once DOL_DOCUMENT_ROOT.
'/contact/class/contact.class.php';
3214 $contacts = array();
3216 $sql =
"SELECT rowid FROM ".MAIN_DB_PREFIX.
"socpeople WHERE fk_soc = ".((int) $this->
id);
3217 $resql = $this->db->query($sql);
3219 $nump = $this->db->num_rows($resql);
3222 while ($i < $nump) {
3223 $obj = $this->db->fetch_object($resql);
3224 $contact =
new Contact($this->db);
3225 $contact->fetch($obj->rowid);
3226 $contacts[] = $contact;
3247 $contact_property =
'';
3249 if (empty($rowid)) {
3253 $sql =
"SELECT rowid, email, phone_mobile, lastname, firstname";
3254 $sql .=
" FROM ".MAIN_DB_PREFIX.
"socpeople";
3255 $sql .=
" WHERE rowid = ".((int) $rowid);
3257 $resql = $this->db->query($sql);
3259 $nump = $this->db->num_rows($resql);
3262 $obj = $this->db->fetch_object($resql);
3264 if ($mode ==
'email') {
3266 } elseif ($mode ==
'mobile') {
3267 $contact_property = $obj->phone_mobile;
3270 return $contact_property;
3289 require_once DOL_DOCUMENT_ROOT.
'/societe/class/companybankaccount.class.php';
3292 $bac->fetch(0, $this->
id);
3295 if ($mode ==
'label') {
3296 return $bac->getRibLabel(
true);
3297 } elseif ($mode ==
'rum') {
3298 if (empty($bac->rum)) {
3299 require_once DOL_DOCUMENT_ROOT.
'/compta/prelevement/class/bonprelevement.class.php';
3301 $bac->fetch_thirdparty();
3302 $bac->rum = $prelevement->buildRumNumber($bac->thirdparty->code_client, $bac->datec, $bac->id);
3305 } elseif ($mode ==
'format') {
3306 return $bac->frstrecur;
3308 return 'BadParameterToFunctionDisplayRib';
3324 require_once DOL_DOCUMENT_ROOT.
'/societe/class/companybankaccount.class.php';
3325 $sql =
"SELECT rowid FROM ".MAIN_DB_PREFIX.
"societe_rib WHERE type='ban' AND fk_soc = ".((int) $this->
id);
3326 $result = $this->db->query($sql);
3329 $this->errors[] = $this->db->lasterror;
3332 $num_rows = $this->db->num_rows($result);
3333 $rib_array = array();
3335 while ($obj = $this->db->fetch_object($result)) {
3337 $rib->fetch($obj->rowid);
3338 $rib_array[] = $rib;
3359 $module = $conf->global->SOCIETE_CODECLIENT_ADDON;
3361 $dirsociete = array_merge(array(
'/core/modules/societe/'), $conf->modules_parts[
'societe']);
3362 foreach ($dirsociete as $dirroot) {
3368 $mod =
new $module();
3370 $this->code_client = $mod->getNextValue($objsoc, $type);
3371 $this->prefixCustomerIsRequired = $mod->prefixIsRequired;
3373 dol_syslog(get_class($this).
"::get_codeclient code_client=".$this->code_client.
" module=".$module);
3391 $module = $conf->global->SOCIETE_CODECLIENT_ADDON;
3393 $dirsociete = array_merge(array(
'/core/modules/societe/'), $conf->modules_parts[
'societe']);
3394 foreach ($dirsociete as $dirroot) {
3400 $mod =
new $module();
3402 $this->code_fournisseur = $mod->getNextValue($objsoc, $type);
3404 dol_syslog(get_class($this).
"::get_codefournisseur code_fournisseur=".$this->code_fournisseur.
" module=".$module);
3420 $module = $conf->global->SOCIETE_CODECLIENT_ADDON;
3422 $dirsociete = array_merge(array(
'/core/modules/societe/'), $conf->modules_parts[
'societe']);
3423 foreach ($dirsociete as $dirroot) {
3430 $mod =
new $module();
3432 dol_syslog(get_class($this).
"::codeclient_modifiable code_client=".$this->code_client.
" module=".$module);
3433 if ($mod->code_modifiable_null && !$this->code_client) {
3436 if ($mod->code_modifiable_invalide && $this->check_codeclient() < 0) {
3439 if ($mod->code_modifiable) {
3460 $module = $conf->global->SOCIETE_CODECLIENT_ADDON;
3462 $dirsociete = array_merge(array(
'/core/modules/societe/'), $conf->modules_parts[
'societe']);
3463 foreach ($dirsociete as $dirroot) {
3470 $mod =
new $module();
3472 dol_syslog(get_class($this).
"::codefournisseur_modifiable code_founisseur=".$this->code_fournisseur.
" module=".$module);
3473 if ($mod->code_modifiable_null && !$this->code_fournisseur) {
3476 if ($mod->code_modifiable_invalide && $this->check_codefournisseur() < 0) {
3479 if ($mod->code_modifiable) {
3506 $module = $conf->global->SOCIETE_CODECLIENT_ADDON;
3508 $dirsociete = array_merge(array(
'/core/modules/societe/'), $conf->modules_parts[
'societe']);
3509 foreach ($dirsociete as $dirroot) {
3516 $mod =
new $module();
3518 dol_syslog(get_class($this).
"::check_codeclient code_client=".$this->code_client.
" module=".$module);
3519 $result = $mod->verif($this->db, $this->code_client, $this, 0);
3521 $this->error = $mod->error;
3522 $this->errors = $mod->errors;
3547 $module = $conf->global->SOCIETE_CODECLIENT_ADDON;
3549 $dirsociete = array_merge(array(
'/core/modules/societe/'), $conf->modules_parts[
'societe']);
3550 foreach ($dirsociete as $dirroot) {
3557 $mod =
new $module();
3559 dol_syslog(get_class($this).
"::check_codefournisseur code_fournisseur=".$this->code_fournisseur.
" module=".$module);
3560 $result = $mod->verif($this->db, $this->code_fournisseur, $this, 1);
3562 $this->error = $mod->error;
3563 $this->errors = $mod->errors;
3586 $module=$conf->global->SOCIETE_CODECOMPTA_ADDON;
3588 $dirsociete = array_merge(array(
'/core/modules/societe/'), $conf->modules_parts[
'societe']);
3589 foreach ($dirsociete as $dirroot) {
3597 $mod =
new $module();
3600 $result = $mod->get_code($this->db, $this, $type);
3602 if ($type ==
'customer') {
3603 $this->code_compta_client = $mod->code;
3604 $this->code_compta = $this->code_compta_client;
3605 } elseif ($type ==
'supplier') {
3606 $this->code_compta_fournisseur = $mod->code;
3611 $this->error =
'ErrorAccountancyCodeNotDefined';
3615 if ($type ==
'customer') {
3616 $this->code_compta_client =
'';
3617 $this->code_compta =
'';
3618 } elseif ($type ==
'supplier') {
3619 $this->code_compta_fournisseur =
'';
3634 dol_syslog(get_class($this).
'::setParent', LOG_DEBUG);
3640 if ($sameparent < 0) {
3643 if ($sameparent == 1) {
3644 setEventMessages(
'ParentCompanyToAddIsAlreadyAChildOfModifiedCompany',
null,
'warnings');
3649 $sql =
'UPDATE '.MAIN_DB_PREFIX.
'societe SET parent = '.($id > 0 ? $id :
'null').
' WHERE rowid = '.((
int) $this->id);
3651 $resql = $this->db->query($sql);
3653 $this->parent = $id;
3673 if ($counter > 100) {
3674 dol_syslog(
"Too high level of parent - child for company. May be an infinite loop ?", LOG_WARNING);
3677 $sql =
'SELECT s.parent';
3678 $sql .=
' FROM '.MAIN_DB_PREFIX.
'societe as s';
3679 $sql .=
' WHERE rowid = '.((int) $idparent);
3680 $resql = $this->db->query($sql);
3682 $obj = $this->db->fetch_object($resql);
3684 if ($obj->parent ==
'') {
3686 } elseif ($obj->parent == $idchild) {
3708 if ($company_id > 0) {
3709 $sql =
"SELECT parent FROM " . MAIN_DB_PREFIX .
"societe WHERE rowid = ".((int) $company_id);
3710 $resql = $this->db->query($sql);
3712 if ($obj = $this->db->fetch_object($resql)) {
3713 $parent = $obj->parent;
3714 if ($parent > 0 && !in_array($parent, $parents)) {
3715 $parents[] = $parent;
3721 $this->db->free($resql);
3723 setEventMessage($langs->trans(
'GetCompanyParentsError', $this->db->lasterror()),
'errors');
3808 $sql =
"SELECT COUNT(*) as nb FROM ".MAIN_DB_PREFIX.
"societe WHERE ".$field.
" = '".$this->db->escape($value).
"' AND entity IN (".
getEntity(
'societe').
")";
3810 $sql .=
" AND rowid <> ".$socid;
3812 $resql = $this->db->query($sql);
3814 $obj = $this->db->fetch_object($resql);
3818 print $this->db->error();
3820 $this->db->free($resql);
3850 if ($idprof == 1 && $soc->country_code ==
'FR') {
3851 $chaine = trim($this->idprof1);
3852 $chaine = preg_replace(
'/(\s)/',
'', $chaine);
3854 if (!is_numeric($chaine)) {
3866 for ($index = 0; $index < 9; $index++) {
3867 $number = (int) $chaine[$index];
3868 if ($index % 2 != 0) {
3869 if (($number *= 2) > 9) {
3877 if ($sum % 10 != 0) {
3883 if ($idprof == 2 && $soc->country_code ==
'FR') {
3884 $chaine = trim($this->idprof2);
3885 $chaine = preg_replace(
'/(\s)/',
'', $chaine);
3887 if (!is_numeric($chaine)) {
3899 for ($index = 0; $index < 14; $index++) {
3900 $number = (int) $chaine[$index];
3901 if (($index % 2) == 0) {
3902 if (($number *= 2) > 9) {
3910 if ($sum % 10 != 0) {
3917 if ($idprof == 1 && $soc->country_code ==
'ES') {
3918 $string = trim($this->idprof1);
3919 $string = preg_replace(
'/(\s)/',
'', $string);
3920 $string = strtoupper($string);
3923 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)) {
3928 for ($i = 0; $i < 9; $i++) {
3929 $num[$i] = substr($string, $i, 1);
3933 if (preg_match(
'/(^[0-9]{8}[A-Z]{1}$)/', $string)) {
3934 if ($num[8] == substr(
'TRWAGMYFPDXBNJZSQVHLCKE', substr($string, 0, 8) % 23, 1)) {
3942 $sum = $num[2] + $num[4] + $num[6];
3943 for ($i = 1; $i < 8; $i += 2) {
3944 $sum += intval(substr((2 * $num[$i]), 0, 1)) + intval(substr((2 * $num[$i]), 1, 1));
3946 $n = 10 - substr($sum, strlen($sum) - 1, 1);
3949 if (preg_match(
'/^[KLM]{1}/', $string)) {
3950 if ($num[8] == chr(64 + $n) || $num[8] == substr(
'TRWAGMYFPDXBNJZSQVHLCKE', substr($string, 1, 8) % 23, 1)) {
3958 if (preg_match(
'/^[ABCDEFGHJNPQRSUVW]{1}/', $string)) {
3959 if ($num[8] == chr(64 + $n) || $num[8] == substr($n, strlen($n) - 1, 1)) {
3967 if (preg_match(
'/^[T]{1}/', $string)) {
3968 if ($num[8] == preg_match(
'/^[T]{1}[A-Z0-9]{8}$/', $string)) {
3976 if (preg_match(
'/^[XYZ]{1}/', $string)) {
3977 if ($num[8] == substr(
'TRWAGMYFPDXBNJZSQVHLCKE', substr(str_replace(array(
'X',
'Y',
'Z'), array(
'0',
'1',
'2'), $string), 0, 8) % 23, 1)) {
3990 if ($idprof == 1 && $soc->country_code ==
'PT') {
3991 $string = trim($this->idprof1);
3992 $string = preg_replace(
'/(\s)/',
'', $string);
3995 if (preg_match(
'/(^[0-9]{9}$)/', $string)) {
4004 if ($idprof == 1 && $soc->country_code ==
'DZ') {
4005 $string = trim($this->idprof1);
4006 $string = preg_replace(
'/(\s)/',
'', $string);
4009 if (preg_match(
'/(^[0-9]{15}$)/', $string)) {
4018 if ($idprof == 1 && $soc->country_code ==
'BE') {
4019 $string = trim($this->idprof1);
4020 $string = preg_replace(
'/(\s)/',
'', $string);
4023 if (preg_match(
'/(^[0-9]{4}\.[0-9]{3}\.[0-9]{3}$)/', $string)) {
4045 global $conf, $langs, $hookmanager;
4050 $hookmanager->initHooks(array(
'idprofurl'));
4051 $parameters = array(
'idprof'=>$idprof,
'company'=>$thirdparty);
4052 $reshook = $hookmanager->executeHooks(
'getIdProfUrl', $parameters, $this, $action);
4053 if (empty($reshook)) {
4059 $strippedIdProf1 = str_replace(
' ',
'', $thirdparty->idprof1);
4060 if ($idprof == 1 && $thirdparty->country_code ==
'FR') {
4061 $url =
'https://annuaire-entreprises.data.gouv.fr/entreprise/'.$strippedIdProf1;
4063 if ($idprof == 1 && ($thirdparty->country_code ==
'GB' || $thirdparty->country_code ==
'UK')) {
4064 $url =
'https://beta.companieshouse.gov.uk/company/'.$strippedIdProf1;
4066 if ($idprof == 1 && $thirdparty->country_code ==
'ES') {
4067 $url =
'http://www.e-informa.es/servlet/app/portal/ENTP/screen/SProducto/prod/ETIQUETA_EMPRESA/nif/'.$strippedIdProf1;
4069 if ($idprof == 1 && $thirdparty->country_code ==
'IN') {
4070 $url =
'http://www.tinxsys.com/TinxsysInternetWeb/dealerControllerServlet?tinNumber='.$strippedIdProf1.
';&searchBy=TIN&backPage=searchByTin_Inter.jsp';
4072 if ($idprof == 1 && $thirdparty->country_code ==
'DZ') {
4073 $url =
'http://nif.mfdgi.gov.dz/nif.asp?Nif='.$strippedIdProf1;
4075 if ($idprof == 1 && $thirdparty->country_code ==
'PT') {
4076 $url =
'http://www.nif.pt/'.$strippedIdProf1;
4080 return '<a target="_blank" rel="noopener noreferrer" href="'.$url.
'">'.$langs->trans(
"Check").
'</a>';
4083 return $hookmanager->resPrint;
4098 $sql =
"SELECT COUNT(*) as numproj FROM ".MAIN_DB_PREFIX.
"projet WHERE fk_soc = ".((int) $this->
id);
4099 $resql = $this->db->query($sql);
4101 $obj = $this->db->fetch_object($resql);
4102 $count = $obj->numproj;
4105 print $this->db->error();
4107 $this->db->free($resql);
4108 return ($count > 0);
4120 $sql =
"SELECT s.rowid, s.nom as name, s.datec, tms as datem,";
4121 $sql .=
" fk_user_creat, fk_user_modif";
4122 $sql .=
" FROM ".MAIN_DB_PREFIX.
"societe as s";
4123 $sql .=
" WHERE s.rowid = ".((int) $id);
4125 $result = $this->db->query($sql);
4127 if ($this->db->num_rows($result)) {
4128 $obj = $this->db->fetch_object($result);
4130 $this->
id = $obj->rowid;
4132 $this->user_creation_id = $obj->fk_user_creat;
4133 $this->user_modification_id = $obj->fk_user_modif;
4134 $this->date_creation = $this->db->jdate($obj->datec);
4135 $this->date_modification = empty($obj->datem) ?
'' : $this->db->jdate($obj->datem);
4137 $this->
ref = $obj->name;
4140 $this->db->free($result);
4157 if (!empty($this->tva_intra)) {
4159 } elseif (!empty($this->idprof1) || !empty($this->idprof2) || !empty($this->idprof3) || !empty($this->idprof4) || !empty($this->idprof5) || !empty($this->idprof6)) {
4164 if (preg_match(
'/^TE_PRIVATE/', $this->typent_code)) {
4184 require_once DOL_DOCUMENT_ROOT.
'/core/lib/company.lib.php';
4197 $this->SupplierCategories = array();
4198 $sql =
"SELECT rowid, label";
4199 $sql .=
" FROM ".MAIN_DB_PREFIX.
"categorie";
4200 $sql .=
" WHERE type = ".Categorie::TYPE_SUPPLIER;
4202 $resql = $this->db->query($sql);
4204 while ($obj = $this->db->fetch_object($resql)) {
4205 $this->SupplierCategories[$obj->rowid] = $obj->label;
4223 if ($categorie_id > 0 && $this->
id > 0) {
4224 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"categorie_fournisseur (fk_categorie, fk_soc) ";
4225 $sql .=
" VALUES (".((int) $categorie_id).
", ".((int) $this->
id).
")";
4227 if ($resql = $this->db->query($sql)) {
4243 $sql =
"SELECT count(mc.email) as nb";
4244 $sql .=
" FROM ".MAIN_DB_PREFIX.
"mailing_cibles as mc, ".MAIN_DB_PREFIX.
"mailing as m";
4245 $sql .=
" WHERE mc.fk_mailing=m.rowid AND mc.email = '".$this->db->escape($this->email).
"' ";
4246 $sql .=
" AND m.entity IN (".getEntity($this->element).
") AND mc.statut NOT IN (-1,0)";
4248 $resql = $this->db->query($sql);
4250 $obj = $this->db->fetch_object($resql);
4253 $this->db->free($resql);
4256 $this->error = $this->db->error();
4276 $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).
"'";
4277 $resql = $this->db->query($sql);
4279 $obj = $this->db->fetch_object($resql);
4280 $noemail = $obj->nb;
4281 if (empty($noemail)) {
4282 $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()).
"')";
4283 $resql = $this->db->query($sql);
4286 $this->error = $this->db->lasterror();
4287 $this->errors[] = $this->error;
4292 $this->error = $this->db->lasterror();
4293 $this->errors[] = $this->error;
4296 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"mailing_unsubscribe WHERE email = '".$this->db->escape($this->email).
"' AND entity IN (".
getEntity(
'mailing', 0).
")";
4297 $resql = $this->db->query($sql);
4300 $this->error = $this->db->lasterror();
4301 $this->errors[] = $this->error;
4305 if (empty($error)) {
4306 $this->no_email = $no_email;
4307 $this->db->commit();
4310 $this->db->rollback();
4327 $sql =
"SELECT COUNT(rowid) as nb FROM ".MAIN_DB_PREFIX.
"mailing_unsubscribe WHERE entity IN (".
getEntity(
'mailing').
") AND email = '".$this->db->escape($this->email).
"'";
4328 $resql = $this->db->query($sql);
4330 $obj = $this->db->fetch_object($resql);
4331 $this->no_email = $obj->nb;
4334 $this->error = $this->db->lasterror();
4335 $this->errors[] = $this->error;
4355 global $conf, $user, $langs;
4357 dol_syslog(get_class($this).
"::create_from_member", LOG_DEBUG);
4358 $fullname = $member->getFullName($langs);
4360 if ($member->morphy ==
'mor') {
4361 if (empty($socname)) {
4362 $socname = $member->company ? $member->company : $member->societe;
4364 if (!empty($fullname) && empty($socalias)) {
4365 $socalias = $fullname;
4367 } elseif (empty($socname) && $member->morphy ==
'phy') {
4368 if (empty($socname)) {
4369 $socname = $fullname;
4371 if (!empty($member->company) && empty($socalias)) {
4372 $socalias = $member->company;
4377 $alias = $socalias ? $socalias :
'';
4381 $this->
name = $name;
4382 $this->name_alias = $alias;
4383 $this->address = $member->address;
4384 $this->zip = $member->zip;
4385 $this->town = $member->town;
4386 $this->country_code = $member->country_code;
4387 $this->country_id = $member->country_id;
4388 $this->phone = $member->phone;
4389 $this->email = $member->email;
4390 $this->socialnetworks = $member->socialnetworks;
4391 $this->entity = $member->entity;
4394 $this->code_client = ($customercode ? $customercode : -1);
4395 $this->code_fournisseur = -1;
4396 $this->typent_code = ($member->morphy ==
'phy' ?
'TE_PRIVATE' : 0);
4397 $this->typent_id = $this->typent_code ?
dol_getIdFromCode($this->db, $this->typent_code,
'c_typent',
'id',
'code') : 0;
4402 $result = $this->
create($user);
4408 $this->name_bis = $member->lastname;
4409 $this->firstname = $member->firstname;
4410 $this->civility_id = $member->civility_id;
4412 dol_syslog(
"We ask to create a contact/address too", LOG_DEBUG);
4417 $this->db->rollback();
4422 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"adherent";
4423 $sql .=
" SET fk_soc = ".((int) $this->
id);
4424 $sql .=
" WHERE rowid = ".((int) $member->id);
4426 $resql = $this->db->query($sql);
4428 $this->db->commit();
4431 $this->error = $this->db->error();
4433 $this->db->rollback();
4438 dol_syslog(get_class($this).
"::create_from_member - 2 - ".$this->error.
" - ".join(
',', $this->errors), LOG_ERR);
4440 $this->db->rollback();
4456 $this->entity = $conf->entity;
4458 $this->nom = $this->name;
4469 $country_id = $country_code = $country_label =
'';
4472 $country_id = $tmp[0];
4473 if (!empty($tmp[1])) {
4474 $country_code = $tmp[1];
4475 $country_label = $tmp[2];
4478 dol_syslog(
"Your country setup use an old syntax. Reedit it using setup area.", LOG_WARNING);
4479 include_once DOL_DOCUMENT_ROOT.
'/core/lib/company.lib.php';
4480 $country_code =
getCountry($country_id, 2, $this->db);
4481 $country_label =
getCountry($country_id, 0, $this->db);
4484 $this->country_id = $country_id;
4485 $this->country_code = $country_code;
4486 $this->country = $country_label;
4487 if (is_object($langs)) {
4488 $this->country = ($langs->trans(
'Country'.$country_code) !=
'Country'.$country_code) ? $langs->trans(
'Country'.$country_code) : $country_label;
4494 $state_code = $state_label =
'';
4497 $state_id = $tmp[0];
4498 if (!empty($tmp[1])) {
4499 $state_code = $tmp[1];
4500 $state_label = $tmp[2];
4502 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);
4503 include_once DOL_DOCUMENT_ROOT.
'/core/lib/company.lib.php';
4504 $state_code =
getState($state_id, 2, $this->db);
4505 $state_label =
getState($state_id, 0, $this->db);
4508 $this->state_id = $state_id;
4509 $this->state_code = $state_code;
4510 $this->state = $state_label;
4511 if (is_object($langs)) {
4512 $this->state = ($langs->trans(
'State'.$state_code) !=
'State'.$state_code) ? $langs->trans(
'State'.$state_code) : $state_label;
4526 $this->socialnetworks = array();
4527 if (!empty($facebook_url)) {
4528 $this->socialnetworks[
'facebook'] = $facebook_url;
4530 if (!empty($twitter_url)) {
4531 $this->socialnetworks[
'twitter'] = $twitter_url;
4533 if (!empty($linkedin_url)) {
4534 $this->socialnetworks[
'linkedin'] = $linkedin_url;
4536 if (!empty($instagram_url)) {
4537 $this->socialnetworks[
'instagram'] = $instagram_url;
4539 if (!empty($youtube_url)) {
4540 $this->socialnetworks[
'youtube'] = $youtube_url;
4542 if (!empty($github_url)) {
4543 $this->socialnetworks[
'github'] = $github_url;
4556 $this->forme_juridique_code =
getDolGlobalString(
'MAIN_INFO_SOCIETE_FORME_JURIDIQUE');
4563 $this->logo_squarred_small =
getDolGlobalString(
'MAIN_INFO_SOCIETE_LOGO_SQUARRED_SMALL');
4564 $this->logo_squarred_mini =
getDolGlobalString(
'MAIN_INFO_SOCIETE_LOGO_SQUARRED_MINI');
4567 $this->tva_assuj = $conf->global->FACTURE_TVAOPTION;
4570 $this->localtax1_assuj = ((isset($conf->global->FACTURE_LOCAL_TAX1_OPTION) && (
getDolGlobalString(
'FACTURE_LOCAL_TAX1_OPTION') ==
'1' ||
getDolGlobalString(
'FACTURE_LOCAL_TAX1_OPTION') ==
'localtax1on')) ? 1 : 0);
4571 $this->localtax2_assuj = ((isset($conf->global->FACTURE_LOCAL_TAX2_OPTION) && (
getDolGlobalString(
'FACTURE_LOCAL_TAX2_OPTION') ==
'1' ||
getDolGlobalString(
'FACTURE_LOCAL_TAX2_OPTION') ==
'localtax2on')) ? 1 : 0);
4588 $this->
name =
'THIRDPARTY SPECIMEN '.dol_print_date($now,
'dayhourlog');
4589 $this->nom = $this->name;
4590 $this->ref_ext =
'Ref ext';
4591 $this->specimen = 1;
4592 $this->address =
'21 jump street';
4593 $this->zip =
'99999';
4594 $this->town =
'MyTown';
4595 $this->state_id = 1;
4596 $this->state_code =
'AA';
4597 $this->state =
'MyState';
4598 $this->country_id = 1;
4599 $this->country_code =
'FR';
4600 $this->email =
'specimen@specimen.com';
4601 $this->socialnetworks = array(
4602 'skype' =>
'skypepseudo',
4603 'twitter' =>
'twitterpseudo',
4604 'facebook' =>
'facebookpseudo',
4605 'linkedin' =>
'linkedinpseudo',
4607 $this->url =
'http://www.specimen.com';
4609 $this->phone =
'0909090901';
4610 $this->fax =
'0909090909';
4612 $this->code_client =
'CC-'.dol_print_date($now,
'dayhourlog');
4613 $this->code_fournisseur =
'SC-'.dol_print_date($now,
'dayhourlog');
4614 $this->capital = 10000;
4616 $this->prospect = 1;
4617 $this->fournisseur = 1;
4618 $this->tva_assuj = 1;
4619 $this->tva_intra =
'EU1234567';
4620 $this->note_public =
'This is a comment (public)';
4621 $this->note_private =
'This is a comment (private)';
4623 $this->idprof1 =
'idprof1';
4624 $this->idprof2 =
'idprof2';
4625 $this->idprof3 =
'idprof3';
4626 $this->idprof4 =
'idprof4';
4627 $this->idprof5 =
'idprof5';
4628 $this->idprof6 =
'idprof6';
4640 $sql =
"SELECT t.localtax1, t.localtax2";
4641 $sql .=
" FROM ".MAIN_DB_PREFIX.
"c_tva as t, ".MAIN_DB_PREFIX.
"c_country as c";
4642 $sql .=
" WHERE t.fk_pays = c.rowid AND c.code = '".$this->db->escape($this->country_code).
"'";
4643 $sql .=
" AND t.active = 1";
4644 $sql .=
" AND t.entity IN (".getEntity(
'c_tva').
")";
4645 if (empty($localTaxNum)) {
4646 $sql .=
" AND (t.localtax1_type <> '0' OR t.localtax2_type <> '0')";
4647 } elseif ($localTaxNum == 1) {
4648 $sql .=
" AND t.localtax1_type <> '0'";
4649 } elseif ($localTaxNum == 2) {
4650 $sql .=
" AND t.localtax2_type <> '0'";
4653 $resql = $this->db->query($sql);
4655 return ($this->db->num_rows($resql) > 0);
4668 $sql =
"SELECT t.rowid";
4669 $sql .=
" FROM ".MAIN_DB_PREFIX.
"c_tva as t, ".MAIN_DB_PREFIX.
"c_country as c";
4670 $sql .=
" WHERE t.fk_pays = c.rowid AND c.code = '".$this->db->escape($this->country_code).
"'";
4671 $sql .=
" AND t.active = 1 AND t.recuperableonly = 1";
4672 $sql .=
" AND t.entity IN (".getEntity(
'c_tva').
")";
4675 $resql = $this->db->query($sql);
4677 return ($this->db->num_rows($resql) > 0);
4691 $sql =
"SELECT COUNT(*) as nb";
4692 $sql .=
" FROM ".MAIN_DB_PREFIX.
"c_revenuestamp as r, ".MAIN_DB_PREFIX.
"c_country as c";
4693 $sql .=
" WHERE r.fk_pays = c.rowid AND c.code = '".$this->db->escape($this->country_code).
"'";
4694 $sql .=
" AND r.active = 1";
4697 $resql = $this->db->query($sql);
4699 $obj = $this->db->fetch_object($resql);
4700 return (($obj->nb > 0) ?
true :
false);
4702 $this->error = $this->db->lasterror();
4728 if ($fk_prospectlevel !=
'') {
4729 $lib = $langs->trans(
"ProspectLevel".$fk_prospectlevel);
4731 if ($lib ==
"ProspectLevel".$fk_prospectlevel) {
4732 $lib = $langs->getLabelFromKey($this->db, $fk_prospectlevel,
'c_prospectlevel',
'code',
'label');
4747 return $this->
LibProspCommStatut($this->stcomm_id, $mode, $label, $this->stcomm_picto);
4769 $langs->load(
'customers');
4772 if ($status ==
'-1' || $status ==
'ST_NO') {
4773 return img_action($langs->trans(
"StatusProspect-1"), -1, $picto,
'class="inline-block valignmiddle"').
' '.$langs->trans(
"StatusProspect-1");
4774 } elseif ($status ==
'0' || $status ==
'ST_NEVER') {
4775 return img_action($langs->trans(
"StatusProspect0"), 0, $picto,
'class="inline-block valignmiddle"').
' '.$langs->trans(
"StatusProspect0");
4776 } elseif ($status ==
'1' || $status ==
'ST_TODO') {
4777 return img_action($langs->trans(
"StatusProspect1"), 1, $picto,
'class="inline-block valignmiddle"').
' '.$langs->trans(
"StatusProspect1");
4778 } elseif ($status ==
'2' || $status ==
'ST_PEND') {
4779 return img_action($langs->trans(
"StatusProspect2"), 2, $picto,
'class="inline-block valignmiddle"').
' '.$langs->trans(
"StatusProspect2");
4780 } elseif ($status ==
'3' || $status ==
'ST_DONE') {
4781 return img_action($langs->trans(
"StatusProspect3"), 3, $picto,
'class="inline-block valignmiddle"').
' '.$langs->trans(
"StatusProspect3");
4783 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);
4785 } elseif ($mode == 3) {
4786 if ($status ==
'-1' || $status ==
'ST_NO') {
4787 return img_action($langs->trans(
"StatusProspect-1"), -1, $picto,
'class="inline-block valignmiddle"');
4788 } elseif ($status ==
'0' || $status ==
'ST_NEVER') {
4789 return img_action($langs->trans(
"StatusProspect0"), 0, $picto,
'class="inline-block valignmiddle"');
4790 } elseif ($status ==
'1' || $status ==
'ST_TODO') {
4791 return img_action($langs->trans(
"StatusProspect1"), 1, $picto,
'class="inline-block valignmiddle"');
4792 } elseif ($status ==
'2' || $status ==
'ST_PEND') {
4793 return img_action($langs->trans(
"StatusProspect2"), 2, $picto,
'class="inline-block valignmiddle"');
4794 } elseif ($status ==
'3' || $status ==
'ST_DONE') {
4795 return img_action($langs->trans(
"StatusProspect3"), 3, $picto,
'class="inline-block valignmiddle"');
4797 return img_action(($langs->trans(
"StatusProspect".$status) !=
"StatusProspect".$status) ? $langs->trans(
"StatusProspect".$status) : $label, 0, $picto,
'class="inline-block valignmiddle"');
4799 } elseif ($mode == 4) {
4800 if ($status ==
'-1' || $status ==
'ST_NO') {
4801 return img_action($langs->trans(
"StatusProspect-1"), -1, $picto,
'class="inline-block valignmiddle"').
' '.$langs->trans(
"StatusProspect-1");
4802 } elseif ($status ==
'0' || $status ==
'ST_NEVER') {
4803 return img_action($langs->trans(
"StatusProspect0"), 0, $picto,
'class="inline-block valignmiddle"').
' '.$langs->trans(
"StatusProspect0");
4804 } elseif ($status ==
'1' || $status ==
'ST_TODO') {
4805 return img_action($langs->trans(
"StatusProspect1"), 1, $picto,
'class="inline-block valignmiddle"').
' '.$langs->trans(
"StatusProspect1");
4806 } elseif ($status ==
'2' || $status ==
'ST_PEND') {
4807 return img_action($langs->trans(
"StatusProspect2"), 2, $picto,
'class="inline-block valignmiddle"').
' '.$langs->trans(
"StatusProspect2");
4808 } elseif ($status ==
'3' || $status ==
'ST_DONE') {
4809 return img_action($langs->trans(
"StatusProspect3"), 3, $picto,
'class="inline-block valignmiddle"').
' '.$langs->trans(
"StatusProspect3");
4811 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);
4815 return "Error, mode/status not found";
4827 if ($mode ==
'supplier') {
4828 $table =
'supplier_proposal';
4831 $sql =
"SELECT rowid, ref, total_ht, total_ttc, fk_statut as status FROM ".MAIN_DB_PREFIX.$table.
" as f";
4832 $sql .=
" WHERE fk_soc = ".((int) $this->
id);
4833 if ($mode ==
'supplier') {
4834 $sql .=
" AND entity IN (".getEntity(
'supplier_proposal').
")";
4836 $sql .=
" AND entity IN (".getEntity(
'propal').
")";
4839 dol_syslog(
"getOutstandingProposals for fk_soc = ".((
int) $this->
id), LOG_DEBUG);
4841 $resql = $this->db->query($sql);
4843 $outstandingOpened = 0;
4844 $outstandingTotal = 0;
4845 $outstandingTotalIncTax = 0;
4846 $arrayofref = array();
4847 while ($obj = $this->db->fetch_object($resql)) {
4848 $arrayofref[$obj->rowid] = $obj->ref;
4849 $outstandingTotal += $obj->total_ht;
4850 $outstandingTotalIncTax += $obj->total_ttc;
4851 if ($obj->status != 0) {
4853 $outstandingOpened += $obj->total_ttc;
4856 return array(
'opened'=>$outstandingOpened,
'total_ht'=>$outstandingTotal,
'total_ttc'=>$outstandingTotalIncTax,
'refs'=>$arrayofref);
4870 $table =
'commande';
4871 if ($mode ==
'supplier') {
4872 $table =
'commande_fournisseur';
4875 $sql =
"SELECT rowid, ref, total_ht, total_ttc, fk_statut as status FROM ".MAIN_DB_PREFIX.$table.
" as f";
4876 $sql .=
" WHERE fk_soc = ".((int) $this->
id);
4877 if ($mode ==
'supplier') {
4878 $sql .=
" AND entity IN (".getEntity(
'supplier_order').
")";
4880 $sql .=
" AND entity IN (".getEntity(
'commande').
")";
4883 dol_syslog(
"getOutstandingOrders", LOG_DEBUG);
4884 $resql = $this->db->query($sql);
4886 $outstandingOpened = 0;
4887 $outstandingTotal = 0;
4888 $outstandingTotalIncTax = 0;
4889 $arrayofref = array();
4890 while ($obj = $this->db->fetch_object($resql)) {
4891 $arrayofref[$obj->rowid] = $obj->ref;
4892 $outstandingTotal += $obj->total_ht;
4893 $outstandingTotalIncTax += $obj->total_ttc;
4894 if ($obj->status != 0) {
4896 $outstandingOpened += $obj->total_ttc;
4899 return array(
'opened'=>$outstandingOpened,
'total_ht'=>$outstandingTotal,
'total_ttc'=>$outstandingTotalIncTax,
'refs'=>$arrayofref);
4915 if ($mode ==
'supplier') {
4916 $table =
'facture_fourn';
4926 $sql =
"SELECT rowid, ref, total_ht, total_ttc, paye, type, fk_statut as status, close_code FROM ".MAIN_DB_PREFIX.$table.
" as f";
4927 $sql .=
" WHERE fk_soc = ".((int) $this->
id);
4928 if (!empty($late)) {
4929 $sql .=
" AND date_lim_reglement < '".$this->db->idate(
dol_now()).
"'";
4931 if ($mode ==
'supplier') {
4932 $sql .=
" AND entity IN (".getEntity(
'facture_fourn').
")";
4934 $sql .=
" AND entity IN (".getEntity(
'invoice').
")";
4937 dol_syslog(
"getOutstandingBills", LOG_DEBUG);
4938 $resql = $this->db->query($sql);
4940 $outstandingOpened = 0;
4941 $outstandingTotal = 0;
4942 $outstandingTotalIncTax = 0;
4943 $arrayofref = array();
4944 $arrayofrefopened = array();
4945 if ($mode ==
'supplier') {
4946 require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.facture.class.php';
4949 require_once DOL_DOCUMENT_ROOT.
'/compta/facture/class/facture.class.php';
4950 $tmpobject =
new Facture($this->db);
4952 while ($obj = $this->db->fetch_object($resql)) {
4953 $arrayofref[$obj->rowid] = $obj->ref;
4954 $tmpobject->id = $obj->rowid;
4956 if ($obj->status != $tmpobject::STATUS_DRAFT
4957 && !($obj->status == $tmpobject::STATUS_ABANDONED && $obj->close_code ==
'replaced')
4959 $outstandingTotal += $obj->total_ht;
4960 $outstandingTotalIncTax += $obj->total_ttc;
4966 && $obj->status != $tmpobject::STATUS_DRAFT
4967 && $obj->status != $tmpobject::STATUS_ABANDONED
4968 && $obj->status != $tmpobject::STATUS_CLOSED) {
4970 $paiement = $tmpobject->getSommePaiement();
4971 $creditnotes = $tmpobject->getSumCreditNotesUsed();
4972 $deposits = $tmpobject->getSumDepositsUsed();
4974 $remaintopay = ($obj->total_ttc - $paiement - $creditnotes - $deposits);
4975 $outstandingOpened += $remaintopay;
4981 $remainingcreditnote = $tmpobject->getSumFromThisCreditNotesNotUsed();
4982 $remaintopay -= $remainingcreditnote;
4983 $outstandingOpened -= $remainingcreditnote;
4987 $arrayofrefopened[$obj->rowid] = $obj->ref;
4990 return array(
'opened'=>$outstandingOpened,
'total_ht'=>$outstandingTotal,
'total_ttc'=>$outstandingTotalIncTax,
'refs'=>$arrayofref,
'refsopened'=>$arrayofrefopened);
4992 dol_syslog(
"Sql error ".$this->db->lasterror, LOG_ERR);
5019 $langs->load(
'companies');
5022 return $langs->trans(
"NorProspectNorCustomer");
5023 } elseif ($status == 1) {
5024 return $langs->trans(
"Customer");
5025 } elseif ($status == 2) {
5026 return $langs->trans(
"Prospect");
5027 } elseif ($status == 3) {
5028 return $langs->trans(
"ProspectCustomer");
5046 public function generateDocument($modele, $outputlangs, $hidedetails = 0, $hidedesc = 0, $hideref = 0, $moreparams =
null)
5048 global $conf, $user, $langs;
5050 if (!empty($moreparams) && !empty($moreparams[
'use_companybankid'])) {
5051 $modelpath =
"core/modules/bank/doc/";
5053 include_once DOL_DOCUMENT_ROOT.
'/societe/class/companybankaccount.class.php';
5055 $result = $companybankaccount->fetch($moreparams[
'use_companybankid']);
5057 dol_print_error($this->db, $companybankaccount->error, $companybankaccount->errors);
5059 $result = $companybankaccount->commonGenerateDocument($modelpath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref, $moreparams);
5060 $this->last_main_doc=$companybankaccount->last_main_doc;
5065 $modele = $conf->global->COMPANY_ADDON_PDF;
5067 print $langs->trans(
"Error").
" ".$langs->trans(
"Error_COMPANY_ADDON_PDF_NotDefined");
5072 if (!isset($this->bank_account)) {
5073 require_once DOL_DOCUMENT_ROOT.
'/societe/class/companybankaccount.class.php';
5075 $result = $bac->fetch(0, $this->
id);
5077 $this->bank_account = $bac;
5079 $this->bank_account =
'';
5083 $modelpath =
"core/modules/societe/doc/";
5085 $result = $this->
commonGenerateDocument($modelpath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref, $moreparams);
5105 require_once DOL_DOCUMENT_ROOT.
'/categories/class/categorie.class.php';
5108 if (!in_array($type_categ, array(Categorie::TYPE_CUSTOMER, Categorie::TYPE_SUPPLIER))) {
5109 dol_syslog(__METHOD__.
': Type '.$type_categ.
'is an unknown company category type. Done nothing.', LOG_ERR);
5113 return parent::setCategoriesCommon($categories, $type_categ);
5128 if (!is_array($salesrep)) {
5129 $salesrep = array($salesrep);
5133 $to_add = $salesrep;
5134 if ($onlyAdd ===
false) {
5139 if (is_array($existing)) {
5140 $to_del = array_diff($existing, $salesrep);
5141 $to_add = array_diff($salesrep, $existing);
5148 foreach ($to_del as $del) {
5151 foreach ($to_add as $add) {
5159 return $error ? -1 : 1;
5175 $result = $this->
setValueFrom(
'fk_typent', $typent_id,
'',
null,
'',
'', $user,
'COMPANY_MODIFY');
5178 $this->typent_id = $typent_id;
5179 $this->typent_code =
dol_getIdFromCode($this->db, $this->typent_id,
'c_typent',
'id',
'code');
5200 if ($origin_id == $dest_id) {
5201 dol_syslog(
'Error: Try to merge a thirdparty into itself');
5209 $sql =
'SELECT rowid FROM '.MAIN_DB_PREFIX.
'societe_commerciaux ';
5210 $sql .=
' WHERE fk_soc = '.(int) $dest_id.
' AND fk_user IN ( ';
5211 $sql .=
' SELECT fk_user ';
5212 $sql .=
' FROM '.MAIN_DB_PREFIX.
'societe_commerciaux ';
5213 $sql .=
' WHERE fk_soc = '.(int) $origin_id.
') ';
5215 $resql = $dbs->
query($sql);
5217 $dbs->
query(
'DELETE FROM '.MAIN_DB_PREFIX.
'societe_commerciaux WHERE rowid = '.((
int) $obj->rowid));
5226 'societe_commerciaux',
5229 'societe_remise_except',
5246 global $user, $langs, $conf;
5250 $field =
'accountancy_code_sell';
5251 if ($type ==
'buy') {
5252 $field =
'accountancy_code_buy';
5253 } elseif ($type ==
'sell') {
5254 $field =
'accountancy_code_sell';
5259 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element.
" SET ";
5260 $sql .= $field.
" = '".$this->db->escape($value).
"'";
5261 $sql .=
" WHERE rowid = ".((int) $this->
id);
5263 dol_syslog(get_class($this).
"::".__FUNCTION__, LOG_DEBUG);
5264 $resql = $this->db->query($sql);
5268 include_once DOL_DOCUMENT_ROOT.
'/core/class/interfaces.class.php';
5270 $result = $interface->run_triggers(
'COMPANY_MODIFY', $this, $user, $langs, $conf);
5272 $this->errors = $interface->errors;
5273 $this->db->rollback();
5278 $this->$field = $value;
5280 $this->db->commit();
5283 $this->error = $this->db->lasterror();
5284 $this->db->rollback();
5299 require_once DOL_DOCUMENT_ROOT.
'/partnership/class/partnership.class.php';
5302 $this->partnerships[] = array();
5316 $selected = (empty($arraydata[
'selected']) ? 0 : $arraydata[
'selected']);
5318 $return =
'<div class="box-flex-item box-flex-grow-zero">';
5319 $return .=
'<div class="info-box info-box-sm">';
5320 $return .=
'<span class="info-box-icon bg-infobox-action">';
5322 $return .=
'</span>';
5323 $return .=
'<div class="info-box-content">';
5324 $return .=
'<span class="info-box-ref inline-block tdoverflowmax150 valignmiddle">'.(method_exists($this,
'getNomUrl') ? $this->
getNomUrl() : $this->ref).
'</span>';
5325 if ($selected >= 0) {
5326 $return .=
'<input id="cb'.$this->id.
'" class="flat checkforselect fright" type="checkbox" name="toselect[]" value="'.$this->
id.
'"'.($selected ?
' checked="checked"' :
'').
'>';
5328 if (property_exists($this,
'code_client')) {
5329 $return .=
'<br><span class="info-box-label opacitymedium">'.$this->code_client.
'</span>';
5331 if (method_exists($this,
'getLibStatut')) {
5332 $return .=
'<br><div class="info-box-status">'.$this->getLibStatut(3).
'</div>';
5334 $return .=
'</div>';
5335 $return .=
'</div>';
5336 $return .=
'</div>';
5357 $sql =
"SELECT sc.rowid, sc.fk_socpeople as id, sc.fk_c_type_contact";
5359 $sql .=
", t.fk_soc as socid, t.statut as statuscontact";
5361 $sql .=
", t.civility as civility, t.lastname as lastname, t.firstname, t.email";
5362 $sql .=
", tc.source, tc.element, tc.code, tc.libelle as type_label";
5363 $sql .=
" FROM ".$this->db->prefix().
"c_type_contact tc";
5364 $sql .=
", ".$this->db->prefix().
"societe_contacts sc";
5366 $sql .=
" LEFT JOIN ".$this->db->prefix().
"socpeople t on sc.fk_socpeople = t.rowid";
5368 $sql .=
" WHERE sc.fk_soc = ".((int) $this->
id);
5369 $sql .=
" AND sc.fk_c_type_contact = tc.rowid";
5370 if (!empty($element)) {
5371 $sql .=
" AND tc.element = '".$this->db->escape($element).
"'";
5374 $sql .=
" AND tc.code = '".$this->db->escape($code).
"'";
5376 $sql .=
" AND sc.entity IN (".getEntity($this->element).
")";
5377 $sql .=
" AND tc.source = 'external'";
5378 $sql .=
" AND tc.active=1";
5380 $sql .=
" ORDER BY t.lastname ASC";
5382 dol_syslog(get_class($this).
"::getContacts", LOG_DEBUG);
5383 $resql = $this->db->query($sql);
5385 $num = $this->db->num_rows($resql);
5388 $obj = $this->db->fetch_object($resql);
5391 $transkey =
"TypeContact_".$obj->element.
"_".$obj->source.
"_".$obj->code;
5392 $libelle_type = ($langs->trans($transkey) != $transkey ? $langs->trans($transkey) : $obj->type_label);
5394 'source' => $obj->source,
5395 'socid' => $obj->socid,
5397 'nom' => $obj->lastname,
5398 'civility' => $obj->civility,
5399 'lastname' => $obj->lastname,
5400 'firstname' => $obj->firstname,
5401 'email'=>$obj->email,
5402 'login'=> (empty($obj->login) ?
'' : $obj->login),
5403 'photo' => (empty($obj->photo) ?
'' : $obj->photo),
5404 'statuscontact' => $obj->statuscontact,
5405 'rowid' => $obj->rowid,
5406 'code' => $obj->code,
5407 'element' => $obj->element,
5408 'libelle' => $libelle_type,
5409 'status' => $obj->statuslink,
5410 'fk_c_type_contact' => $obj->fk_c_type_contact
5413 $tab[$i] = $obj->id;
5421 $this->error = $this->db->lasterror();
5436 global $conf, $langs, $hookmanager, $user, $action;
5439 $soc_origin =
new Societe($this->db);
5441 dol_syslog(
"mergeCompany merge thirdparty id=".$soc_origin_id.
" (will be deleted) into the thirdparty id=".$this->id);
5443 if (!$error && $soc_origin->fetch($soc_origin_id) < 1) {
5444 $this->error = $langs->trans(
'ErrorRecordNotFound');
5452 $this->client = $this->client | $soc_origin->client;
5453 $this->fournisseur = $this->fournisseur | $soc_origin->fournisseur;
5454 $listofproperties = array(
5455 'address',
'zip',
'town',
'state_id',
'country_id',
'phone',
'fax',
'email',
'socialnetworks',
'url',
'barcode',
5456 'idprof1',
'idprof2',
'idprof3',
'idprof4',
'idprof5',
'idprof6',
5457 'tva_intra',
'effectif_id',
'forme_juridique',
'remise_percent',
'remise_supplier_percent',
'mode_reglement_supplier_id',
'cond_reglement_supplier_id',
'name_bis',
5458 'stcomm_id',
'outstanding_limit',
'price_level',
'parent',
'default_lang',
'ref',
'ref_ext',
'import_key',
'fk_incoterms',
'fk_multicurrency',
5459 'code_client',
'code_fournisseur',
'code_compta',
'code_compta_fournisseur',
5462 foreach ($listofproperties as $property) {
5463 if (empty($this->$property)) {
5464 $this->$property = $soc_origin->$property;
5469 $listofproperties = array(
5470 'note_public',
'note_private'
5472 foreach ($listofproperties as $property) {
5473 $this->$property =
dol_concatdesc($this->$property, $soc_origin->$property);
5477 if (is_array($soc_origin->array_options)) {
5478 foreach ($soc_origin->array_options as $key => $val) {
5479 if (empty($this->array_options[$key])) {
5480 $this->array_options[$key] = $val;
5486 if (empty($this->name_bis) && $this->
name != $soc_origin->name) {
5487 $this->name_bis = $this->name;
5493 $custcats_ori = $static_cat->containing($soc_origin->id,
'customer',
'id');
5494 $custcats = $static_cat->containing($this->
id,
'customer',
'id');
5495 $custcats = array_merge($custcats, $custcats_ori);
5498 $suppcats_ori = $static_cat->containing($soc_origin->id,
'supplier',
'id');
5499 $suppcats = $static_cat->containing($this->
id,
'supplier',
'id');
5500 $suppcats = array_merge($suppcats, $suppcats_ori);
5504 if ($soc_origin->code_client == $this->code_client
5505 || $soc_origin->code_fournisseur == $this->code_fournisseur
5506 || $soc_origin->barcode == $this->barcode) {
5507 dol_syslog(
"We clean customer and supplier code so we will be able to make the update of target");
5508 $soc_origin->code_client =
'';
5509 $soc_origin->code_fournisseur =
'';
5510 $soc_origin->barcode =
'';
5511 $soc_origin->update($soc_origin->id, $user, 0, 1, 1,
'merge');
5515 $result = $this->
update($this->
id, $user, 0, 1, 1,
'merge');
5524 'Adherent' =>
'/adherents/class/adherent.class.php',
5525 'Don' => array(
'file' =>
'/don/class/don.class.php',
'enabled' => isModEnabled(
'don')),
5526 'Societe' =>
'/societe/class/societe.class.php',
5528 'ActionComm' =>
'/comm/action/class/actioncomm.class.php',
5529 'Propal' =>
'/comm/propal/class/propal.class.php',
5530 'Commande' =>
'/commande/class/commande.class.php',
5531 'Facture' =>
'/compta/facture/class/facture.class.php',
5532 'FactureRec' =>
'/compta/facture/class/facture-rec.class.php',
5533 'LignePrelevement' =>
'/compta/prelevement/class/ligneprelevement.class.php',
5534 'Mo' =>
'/mrp/class/mo.class.php',
5535 'Contact' =>
'/contact/class/contact.class.php',
5536 'Contrat' =>
'/contrat/class/contrat.class.php',
5537 'Expedition' =>
'/expedition/class/expedition.class.php',
5538 'Fichinter' =>
'/fichinter/class/fichinter.class.php',
5539 'CommandeFournisseur' =>
'/fourn/class/fournisseur.commande.class.php',
5540 'FactureFournisseur' =>
'/fourn/class/fournisseur.facture.class.php',
5541 'FactureFournisseurRec' =>
'/fourn/class/fournisseur.facture-rec.class.php',
5542 'Reception' =>
'/reception/class/reception.class.php',
5543 'SupplierProposal' =>
'/supplier_proposal/class/supplier_proposal.class.php',
5544 'ProductFournisseur' =>
'/fourn/class/fournisseur.product.class.php',
5545 'Delivery' =>
'/delivery/class/delivery.class.php',
5546 'Product' =>
'/product/class/product.class.php',
5547 'Project' =>
'/projet/class/project.class.php',
5548 'Ticket' => array(
'file' =>
'/ticket/class/ticket.class.php',
'enabled' => isModEnabled(
'ticket')),
5549 'User' =>
'/user/class/user.class.php',
5550 'Account' =>
'/compta/bank/class/account.class.php',
5551 'ConferenceOrBoothAttendee' =>
'/eventorganization/class/conferenceorboothattendee.class.php'
5555 foreach ($objects as $object_name => $object_file) {
5556 if (is_array($object_file)) {
5557 if (empty($object_file[
'enabled'])) {
5560 $object_file = $object_file[
'file'];
5563 require_once DOL_DOCUMENT_ROOT.$object_file;
5565 if (!$error && !$object_name::replaceThirdparty($this->db, $soc_origin->id, $this->id)) {
5567 $this->error = $this->db->lasterror();
5575 $parameters = array(
'soc_origin' => $soc_origin->id,
'soc_dest' => $this->id);
5576 $reshook = $hookmanager->executeHooks(
'replaceThirdparty', $parameters, $this, $action);
5579 $this->error = $hookmanager->error;
5580 $this->errors = $hookmanager->errors;
5587 $this->context = array(
'merge'=>1,
'mergefromid'=>$soc_origin->id,
'mergefromname'=>$soc_origin->name);
5590 $result = $this->
call_trigger(
'COMPANY_MODIFY', $user);
5599 if (!empty($conf->societe->multidir_output[$this->entity])) {
5600 $srcdir = $conf->societe->multidir_output[$this->entity].
"/".$soc_origin->id;
5601 $destdir = $conf->societe->multidir_output[$this->entity].
"/".$this->id;
5605 foreach ($dirlist as $filetomove) {
5606 $destfile = $destdir.
'/'.$filetomove[
'relativename'];
5608 dol_move($filetomove[
'fullname'], $destfile,
'0', 0, 0, 1);
5618 if ($soc_origin->delete($soc_origin->id, $user) < 1) {
5619 $this->error = $soc_origin->error;
5620 $this->errors = $soc_origin->errors;
5626 $this->db->commit();
5629 $langs->load(
"errors");
5630 $this->error = $langs->trans(
'ErrorsThirdpartyMerge');
5631 $this->db->rollback();
print $langs trans("AuditedSecurityEvents").'</strong >< span class="opacitymedium"></span >< br > status
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.
setAsCustomer()
Define third party as a customer.
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 ...
mergeCompany($soc_origin_id)
Merge a company with another one, deleting the given company.
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 a 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_concatdesc($text1, $text2, $forxml=false, $invert=false)
Concat 2 descriptions with a new line between them (second operand after first one with appropriate n...
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.