dolibarr 21.0.0-beta
contact.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) 2005 Patrick Rouillon <patrick@rouillon.net>
3 * Copyright (C) 2005-2015 Laurent Destailleur <eldy@users.sourceforge.net>
4 * Copyright (C) 2005-2012 Regis Houssin <regis.houssin@inodbox.com>
5 * Copyright (C) 2017 Ferran Marcet <fmarcet@2byte.es>
6 * Copyright (C) 2021-2024 Frédéric France <frederic.france@free.fr>
7 * Copyright (C) 2023 Christian Foellmann <christian@foellmann.de>
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 3 of the License, or
12 * (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this program. If not, see <https://www.gnu.org/licenses/>.
21 */
22
29// Load Dolibarr environment
30require '../../main.inc.php';
31require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.class.php';
32require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php';
33require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php';
34require_once DOL_DOCUMENT_ROOT.'/core/lib/fourn.lib.php';
35require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
36if (isModEnabled('project')) {
37 require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
38}
39
48$langs->loadLangs(array("bills", "other", "companies"));
49
50$id = (GETPOSTINT('id') ? GETPOSTINT('id') : GETPOSTINT('facid'));
51$ref = GETPOST('ref', 'alpha');
52$action = GETPOST('action', 'aZ09');
53
54// Security check
55if ($user->socid) {
56 $socid = $user->socid;
57}
58$hookmanager->initHooks(array('invoicesuppliercardcontact','invoicesuppliercontactcard', 'globalcard'));
59$result = restrictedArea($user, 'fournisseur', $id, 'facture_fourn', 'facture');
60
62
63$usercancreate = ($user->hasRight("fournisseur", "facture", "creer") || $user->hasRight("supplier_invoice", "creer"));
64$permissiontoadd = $usercancreate;
65
66/*
67 * Actions
68 */
69
70$parameters = array('id'=>$id);
71$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action);
72if ($reshook < 0) {
73 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
74}
75
76/*
77 * Add a new contact
78 */
79
80if (empty($reshook)) {
81 if ($action == 'addcontact' && ($user->hasRight("fournisseur", "facture", "creer") || $user->hasRight("supplier_invoice", "creer"))) {
82 $result = $object->fetch($id, $ref);
83
84 if ($result > 0 && $id > 0) {
85 $contactid = (GETPOST('userid') ? GETPOST('userid') : GETPOST('contactid'));
86 $typeid = (GETPOST('typecontact') ? GETPOST('typecontact') : GETPOST('type'));
87 $result = $object->add_contact($contactid, $typeid, GETPOST("source", 'aZ09'));
88 }
89
90 if ($result >= 0) {
91 header("Location: ".$_SERVER['PHP_SELF']."?id=".$object->id);
92 exit;
93 } else {
94 if ($object->error == 'DB_ERROR_RECORD_ALREADY_EXISTS') {
95 $langs->load("errors");
96 setEventMessages($langs->trans("ErrorThisContactIsAlreadyDefinedAsThisType"), null, 'errors');
97 } else {
98 setEventMessages($object->error, $object->errors, 'errors');
99 }
100 }
101 } elseif ($action == 'swapstatut' && ($user->hasRight("fournisseur", "facture", "creer") || $user->hasRight("supplier_invoice", "creer"))) {
102 // bascule du statut d'un contact
103 if ($object->fetch($id)) {
104 $result = $object->swapContactStatus(GETPOSTINT('ligne'));
105 } else {
106 dol_print_error($db);
107 }
108 } elseif ($action == 'deletecontact' && ($user->hasRight("fournisseur", "facture", "creer") || $user->hasRight("supplier_invoice", "creer"))) {
109 // Efface un contact
110 $object->fetch($id);
111 $result = $object->delete_contact(GETPOSTINT("lineid"));
112
113 if ($result >= 0) {
114 header("Location: ".$_SERVER['PHP_SELF']."?id=".$object->id);
115 exit;
116 } else {
117 dol_print_error($db);
118 }
119 }
120}
121
122
123/*
124 * View
125 */
126$form = new Form($db);
127$formcompany = new FormCompany($db);
128$contactstatic = new Contact($db);
129$userstatic = new User($db);
130
131
132/* *************************************************************************** */
133/* */
134/* Card view and edit mode */
135/* */
136/* *************************************************************************** */
137
138if ($id > 0 || !empty($ref)) {
139 if ($object->fetch($id, $ref) > 0) {
140 $object->fetch_thirdparty();
141
142 $alreadypaid = $object->getSommePaiement();
143
144 $title = $object->ref." - ".$langs->trans('ContactsAddresses');
145 $helpurl = "EN:Module_Suppliers_Invoices|FR:Module_Fournisseurs_Factures|ES:Módulo_Facturas_de_proveedores";
146 llxHeader('', $title, $helpurl, '', 0, 0, '', '', '', 'mod-fourn-facture page-card_contact');
147
148 $head = facturefourn_prepare_head($object);
149
150 print dol_get_fiche_head($head, 'contact', $langs->trans('SupplierInvoice'), -1, 'supplier_invoice');
151
152 $linkback = '<a href="'.DOL_URL_ROOT.'/fourn/facture/list.php?restore_lastsearch_values=1'.(!empty($socid) ? '&socid='.$socid : '').'">'.$langs->trans("BackToList").'</a>';
153
154 $morehtmlref = '<div class="refidno">';
155 // Ref supplier
156 $morehtmlref .= $form->editfieldkey("RefSupplierBill", 'ref_supplier', $object->ref_supplier, $object, 0, 'string', '', 0, 1);
157 $morehtmlref .= $form->editfieldval("RefSupplierBill", 'ref_supplier', $object->ref_supplier, $object, 0, 'string', '', null, null, '', 1);
158 // Thirdparty
159 $morehtmlref .= '<br>'.$object->thirdparty->getNomUrl(1);
160 if (!getDolGlobalString('MAIN_DISABLE_OTHER_LINK') && $object->thirdparty->id > 0) {
161 $morehtmlref .= ' <div class="inline-block valignmiddle">(<a class="valignmiddle" href="'.DOL_URL_ROOT.'/fourn/facture/list.php?socid='.$object->thirdparty->id.'&search_company='.urlencode($object->thirdparty->name).'">'.$langs->trans("OtherBills").'</a>)</div>';
162 }
163 // Project
164 if (isModEnabled('project')) {
165 $langs->load("projects");
166 $morehtmlref .= '<br>';
167 if (0) {
168 $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"');
169 if ($action != 'classify') {
170 $morehtmlref .= '<a class="editfielda" href="'.$_SERVER['PHP_SELF'].'?action=classify&token='.newToken().'&id='.$object->id.'">'.img_edit($langs->transnoentitiesnoconv('SetProject')).'</a> ';
171 }
172 $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, (!getDolGlobalString('PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS') ? $object->socid : -1), $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, 0, 0, 1, '', 'maxwidth300');
173 } else {
174 if (!empty($object->fk_project)) {
175 $proj = new Project($db);
176 $proj->fetch($object->fk_project);
177 $morehtmlref .= $proj->getNomUrl(1);
178 if ($proj->title) {
179 $morehtmlref .= '<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).'</span>';
180 }
181 }
182 }
183 }
184 $morehtmlref .= '</div>';
185
186 $object->totalpaid = $alreadypaid; // To give a chance to dol_banner_tab to use already paid amount to show correct status
187
188 dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'ref', $morehtmlref);
189
190 /*
191 print '<div class="fichecenter">';
192 print '<div class="fichehalfleft">';
193 print '<div class="underbanner clearboth"></div>';
194
195 print '<table class="border centpercent tableforfield">';
196
197 // Type
198 print '<tr><td class="titlefield">'.$langs->trans('Type').'</td><td colspan="4">';
199 print '<span class="badgeneutral">';
200 print $object->getLibType();
201 print '</span>';
202 if ($object->type == FactureFournisseur::TYPE_REPLACEMENT) {
203 $facreplaced = new FactureFournisseur($db);
204 $facreplaced->fetch($object->fk_facture_source);
205 print ' '.$langs->transnoentities("ReplaceInvoice", $facreplaced->getNomUrl(1));
206 }
207 if ($object->type == FactureFournisseur::TYPE_CREDIT_NOTE) {
208 $facusing = new FactureFournisseur($db);
209 $facusing->fetch($object->fk_facture_source);
210 print ' '.$langs->transnoentities("CorrectInvoice", $facusing->getNomUrl(1));
211 }
212
213 $facidavoir = $object->getListIdAvoirFromInvoice();
214 if (count($facidavoir) > 0) {
215 $invoicecredits = array();
216 foreach ($facidavoir as $facid) {
217 $facavoir = new FactureFournisseur($db);
218 $facavoir->fetch($facid);
219 $invoicecredits[] = $facavoir->getNomUrl(1);
220 }
221 print ' '.$langs->transnoentities("InvoiceHasAvoir") . (count($invoicecredits) ? ' ' : '') . implode(',', $invoicecredits);
222 }
223 //if ($facidnext > 0) {
224 // $facthatreplace = new FactureFournisseur($db);
225 // $facthatreplace->fetch($facidnext);
226 // print ' '.$langs->transnoentities("ReplacedByInvoice", $facthatreplace->getNomUrl(1));
227 //}
228 print '</td></tr>';
229
230 // Label
231 print '<tr><td>'.$form->editfieldkey("Label", 'label', $object->label, $object, 0).'</td><td>';
232 print $form->editfieldval("Label", 'label', $object->label, $object, 0);
233 print '</td></tr>';
234
235 print '</table>';
236
237 print '</div><div class="fichehalfright">';
238 print '<div class="underbanner clearboth"></div>';
239
240 print '<table class="border centpercent tableforfield">';
241
242 // Amount
243 print '<tr><td>'.$langs->trans('AmountHT').'</td><td>'.price($object->total_ht, 1, $langs, 0, -1, -1, $conf->currency).'</td></tr>';
244 print '<tr><td>'.$langs->trans('AmountVAT').'</td><td>'.price($object->total_tva, 1, $langs, 0, -1, -1, $conf->currency).'</td></tr>';
245
246 // Amount Local Taxes
247 //TODO: Place into a function to control showing by country or study better option
248 if ($mysoc->localtax1_assuj == "1" || $object->total_localtax1 != 0) { //Localtax1
249 print '<tr><td>'.$langs->transcountry("AmountLT1", $mysoc->country_code).'</td>';
250 print '<td>'.price($object->total_localtax1, 1, $langs, 0, -1, -1, $conf->currency).'</td>';
251 print '</tr>';
252 }
253 if ($mysoc->localtax2_assuj == "1" || $object->total_localtax2 != 0) { //Localtax2
254 print '<tr><td>'.$langs->transcountry("AmountLT2", $mysoc->country_code).'</td>';
255 print '<td>'.price($object->total_localtax2, 1, $langs, 0, -1, -1, $conf->currency).'</td>';
256 print '</tr>';
257 }
258 print '<tr><td>'.$langs->trans('AmountTTC').'</td><td>'.price($object->total_ttc, 1, $langs, 0, -1, -1, $conf->currency).'</td></tr>';
259
260 print "</table>";
261 print '</div>';
262
263 print '</div>';
264 */
265
266 print dol_get_fiche_end();
267
268 //print '<div class="clearboth"></div>';
269 //print '<br>';
270
271 // Contacts lines
272 include DOL_DOCUMENT_ROOT.'/core/tpl/contacts.tpl.php';
273 } else {
274 print "ErrorRecordNotFound";
275 }
276}
277
278// End of page
279llxFooter();
280$db->close();
$id
Definition account.php:48
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
Definition card.php:66
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader($head='', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $morecssonbody='', $replacemainareaby='', $disablenofollow=0, $disablenoindex=0)
Empty header.
Definition wrapper.php:71
Class to manage contact/addresses.
Class to manage suppliers invoices.
Class to build HTML component for third parties management Only common components are here.
Class to manage generation of HTML components Only common components must be here.
Class to manage projects.
Class to manage Dolibarr users.
llxFooter()
Footer empty.
Definition document.php:107
facturefourn_prepare_head(FactureFournisseur $object)
Prepare array with list of tabs.
Definition fourn.lib.php:37
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0)
Show tabs of a record.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
newToken()
Return the value of token currently saved into session with name 'newtoken'.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
img_edit($titlealt='default', $float=0, $other='')
Show logo edit/modify fiche.
restrictedArea(User $user, $features, $object=0, $tableandshare='', $feature2='', $dbt_keyfield='fk_soc', $dbt_select='rowid', $isdraft=0, $mode=0)
Check permissions of a user to show a page and an object.