From e71e58366aa8f0fbfbf6bcfe04e6f644fa4d76e2 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 7 Jan 2009 17:49:00 +0000 Subject: [PATCH] Added contact form for supplier. --- htdocs/fourn/facture/contact.php | 381 +++++++++++++++++++++++++++++++ htdocs/lib/fourn.lib.php | 5 + mysql/data/data.sql | 4 + mysql/migration/2.5.0-2.6.0.sql | 5 + 4 files changed, 395 insertions(+) create mode 100644 htdocs/fourn/facture/contact.php diff --git a/htdocs/fourn/facture/contact.php b/htdocs/fourn/facture/contact.php new file mode 100644 index 00000000000..5943a832e0f --- /dev/null +++ b/htdocs/fourn/facture/contact.php @@ -0,0 +1,381 @@ + + * Copyright (C) 2005-2009 Destailleur Laurent + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +/** + \file htdocs/fourn/facture/contact.php + \ingroup facture, fournisseur + \brief Onglet de gestion des contacts des factures + \version $Id$ +*/ + +require ("./pre.inc.php"); +require_once(DOL_DOCUMENT_ROOT."/fourn/fournisseur.facture.class.php"); +require_once(DOL_DOCUMENT_ROOT."/contact.class.php"); +require_once(DOL_DOCUMENT_ROOT.'/lib/fourn.lib.php'); + +$langs->load("facture"); +$langs->load("companies"); + +$facid = isset($_GET["facid"])?$_GET["facid"]:''; + +// Security check +if ($user->societe_id) $socid=$user->societe_id; +$result = restrictedArea($user, 'fournisseur', $facid, '', 'facture'); + + +/* + * Ajout d'un nouveau contact + */ + +if ($_POST["action"] == 'addcontact' && $user->rights->fournisseur->facture->creer) +{ + + $result = 0; + $facture = new FactureFournisseur($db); + $result = $facture->fetch($_GET["facid"]); + + if ($result > 0 && $_GET["facid"] > 0) + { + $result = $facture->add_contact($_POST["contactid"], $_POST["type"], $_POST["source"]); + } + + if ($result >= 0) + { + Header("Location: contact.php?facid=".$facture->id); + exit; + } + else + { + if ($facture->error == 'DB_ERROR_RECORD_ALREADY_EXISTS') + { + $langs->load("errors"); + $mesg = '
'.$langs->trans("ErrorThisContactIsAlreadyDefinedAsThisType").'
'; + } + else + { + $mesg = '
'.$facture->error.'
'; + } + } +} +// modification d'un contact. On enregistre le type +if ($_POST["action"] == 'updateligne' && $user->rights->fournisseur->facture->creer) +{ + $facture = new FactureFournisseur($db); + if ($facture->fetch($_GET["facid"])) + { + $contact = $facture->detail_contact($_POST["elrowid"]); + $type = $_POST["type"]; + $statut = $contact->statut; + + $result = $facture->update_contact($_POST["elrowid"], $statut, $type); + if ($result >= 0) + { + $db->commit(); + } else + { + dolibarr_print_error($db, "result=$result"); + $db->rollback(); + } + } else + { + dolibarr_print_error($db); + } +} + +// bascule du statut d'un contact +if ($_GET["action"] == 'swapstatut' && $user->rights->fournisseur->facture->creer) +{ + $facture = new FactureFournisseur($db); + if ($facture->fetch($_GET["facid"])) + { + $contact = $facture->detail_contact($_GET["ligne"]); + $id_type_contact = $contact->fk_c_type_contact; + $statut = ($contact->statut == 4) ? 5 : 4; + + $result = $facture->update_contact($_GET["ligne"], $statut, $id_type_contact); + if ($result >= 0) + { + $db->commit(); + } else + { + dolibarr_print_error($db, "result=$result"); + $db->rollback(); + } + } else + { + dolibarr_print_error($db); + } +} + +// Efface un contact +if ($_GET["action"] == 'deleteline' && $user->rights->fournisseur->facture->creer) +{ + $facture = new FactureFournisseur($db); + $facture->fetch($_GET["facid"]); + $result = $facture->delete_contact($_GET["lineid"]); + + if ($result >= 0) + { + Header("Location: contact.php?facid=".$facture->id); + exit; + } + else { + dolibarr_print_error($db); + } +} + + +/* + * View + */ + +llxHeader('', $langs->trans("Bill"), "Facture"); + +$html = new Form($db); +$contactstatic=new Contact($db); + + +/* *************************************************************************** */ +/* */ +/* Mode vue et edition */ +/* */ +/* *************************************************************************** */ +if (isset($mesg)) print $mesg; +$id = $_GET["facid"]; +if ($id > 0) +{ + $facture = new FactureFournisseur($db); + if ($facture->fetch($_GET['facid'], $user->societe_id) > 0) + { + $facture->fetch_client(); + + $head = facturefourn_prepare_head($facture); + + dolibarr_fiche_head($head, 'contact', $langs->trans('SupplierInvoice')); + + /* + * Facture synthese pour rappel + */ + print ''; + + // Reference du facture + print '"; + + // Ref supplier + print ''; + print "\n"; + + // Third party + print ""; + print ''; + print "
'.$langs->trans("Ref").''; + print $facture->ref; + print "
'.$langs->trans("RefSupplier").''.$fac->ref_supplier.'
".$langs->trans("Company")."'.$facture->client->getNomUrl(1,'compta').'
"; + + print ''; + + /* + * Lignes de contacts + */ + echo '
'; + + /* + * Ajouter une ligne de contact + * Non affich� en mode modification de ligne + */ + if ($_GET["action"] != 'editline' && $user->rights->facture->creer) + { + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print "\n"; + + $var = false; + + print ''; + print ''; + print ''; + print ''; + + // Ligne ajout pour contact interne + print ""; + + print ''; + + print ''; + + print ''; + print ''; + print ''; + print ''; + + print ''; + + print ''; + print ''; + print ''; + print ''; + + // Ligne ajout pour contact externe + $var=!$var; + print ""; + + print ''; + + print ''; + + print ''; + print ''; + print ''; + print ''; + + print ""; + + print ''; + } + + // Liste des contacts lies + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print "\n"; + + $societe = new Societe($db); + $var = true; + + foreach(array('internal','external') as $source) + { + $tab = $facture->liste_contact(-1,$source); + $num=sizeof($tab); + + $i = 0; + while ($i < $num) + { + $var = !$var; + + print ''; + + // Source + print ''; + + // Societe + print ''; + + // Contact + print ''; + + // Type de contact + print ''; + + // Statut + print ''; + + // Icon update et delete (statut contrat 0=brouillon,1=valid�,2=ferm�) + print ''; + + print "\n"; + + $i ++; + } + } + print "
'.$langs->trans("Source").''.$langs->trans("Company").''.$langs->trans("Contacts").''.$langs->trans("ContactType").' 
'; + print $langs->trans("Internal"); + print ''; + print $mysoc->nom; + print ''; + // On r�cup�re les id des users d�j� s�lectionn�s + //$userAlreadySelected = $facture->getListContactId('internal'); // On ne doit pas desactiver un contact deja selectionner car on doit pouvoir le seclectionner une deuxieme fois pour un autre type + $html->select_users($user->id,'contactid',0,$userAlreadySelected); + print ''; + $facture->selectTypeContact($facture, '', 'type','internal'); + print '
'; + print $langs->trans("External"); + print ''; + $selectedCompany = isset($_GET["newcompany"])?$_GET["newcompany"]:$facture->client->id; + $selectedCompany = $facture->selectCompaniesForNewContact($facture, 'facid', $selectedCompany, $htmlname = 'newcompany'); + print ''; + // On r�cup�re les id des contacts d�j� s�lectionn�s + //$contactAlreadySelected = $facture->getListContactId('external'); // On ne doit pas desactiver un contact deja selectionner car on doit pouvoir le seclectionner une deuxieme fois pour un autre type + $nbofcontacts=$html->select_contacts($selectedCompany, '', 'contactid', 0, $contactAlreadySelected); + if ($nbofcontacts == 0) print $langs->trans("NoContactDefined"); + print ''; + $facture->selectTypeContact($facture, '', 'type','external'); + print '
 
'.$langs->trans("Source").''.$langs->trans("Company").''.$langs->trans("Contacts").''.$langs->trans("ContactType").''.$langs->trans("Status").' 
'; + if ($tab[$i]['source']=='internal') print $langs->trans("Internal"); + if ($tab[$i]['source']=='external') print $langs->trans("External"); + print ''; + if ($tab[$i]['socid'] > 0) + { + print ''; + print img_object($langs->trans("ShowCompany"),"company").' '.$societe->get_nom($tab[$i]['socid']); + print ''; + } + if ($tab[$i]['socid'] < 0) + { + print $mysoc->nom; + } + if (! $tab[$i]['socid']) + { + print ' '; + } + print ''; + if ($tab[$i]['source']=='internal') + { + print ''; + print img_object($langs->trans("ShowUser"),"user").' '.$tab[$i]['nom'].''; + } + if ($tab[$i]['source']=='external') + { + print ''; + print img_object($langs->trans("ShowContact"),"contact").' '.$tab[$i]['nom'].''; + } + print ''.$tab[$i]['libelle'].''; + // Activation desativation du contact + if ($facture->statut >= 0) print ''; + print $contactstatic->LibStatut($tab[$i]['status'],3); + if ($facture->statut >= 0) print ''; + print ''; + if ($user->rights->facture->creer) + { + print ' '; + print ''; + print img_delete(); + print ''; + } + print '
"; + } + else + { + print "Object not found"; + } +} + +$db->close(); + +llxFooter('$Date$'); +?> \ No newline at end of file diff --git a/htdocs/lib/fourn.lib.php b/htdocs/lib/fourn.lib.php index 9ae2744f0af..826d7bc18fb 100644 --- a/htdocs/lib/fourn.lib.php +++ b/htdocs/lib/fourn.lib.php @@ -35,6 +35,11 @@ function facturefourn_prepare_head($fac) $head[$h][2] = 'card'; $h++; + $head[$h][0] = DOL_URL_ROOT.'/fourn/facture/contact.php?facid='.$fac->id; + $head[$h][1] = $langs->trans('BillContacts'); + $head[$h][2] = 'contact'; + $h++; + $head[$h][0] = DOL_URL_ROOT.'/fourn/facture/note.php?facid='.$fac->id; $head[$h][1] = $langs->trans('Notes'); $head[$h][2] = 'note'; diff --git a/mysql/data/data.sql b/mysql/data/data.sql index a25e22ba8f1..801a725df37 100644 --- a/mysql/data/data.sql +++ b/mysql/data/data.sql @@ -1276,6 +1276,10 @@ insert into llx_c_type_contact(rowid, element, source, code, libelle, active ) v insert into llx_c_type_contact(rowid, element, source, code, libelle, active ) values (130, 'fichinter','external', 'BILLING', 'Contact client facturation intervention', 1); insert into llx_c_type_contact(rowid, element, source, code, libelle, active ) values (131, 'fichinter','external', 'CUSTOMER', 'Contact client suivi de l\'intervention', 1); +insert into llx_c_type_contact(rowid, element, source, code, libelle, active ) values (70, 'facture_fourn', 'internal', 'SALESREPFOLL', 'Responsable suivi du paiement', 1); +insert into llx_c_type_contact(rowid, element, source, code, libelle, active ) values (71, 'facture_fourn', 'external', 'BILLING', 'Contact fournisseur facturation', 1); +insert into llx_c_type_contact(rowid, element, source, code, libelle, active ) values (72, 'facture_fourn', 'external', 'SHIPPING', 'Contact fournisseur livraison', 1); +insert into llx_c_type_contact(rowid, element, source, code, libelle, active ) values (73, 'facture_fourn', 'external', 'SERVICE', 'Contact fournisseur prestation', 1); -- -- Eco-Taxes diff --git a/mysql/migration/2.5.0-2.6.0.sql b/mysql/migration/2.5.0-2.6.0.sql index e5243ce06c8..b8e6c0835ac 100644 --- a/mysql/migration/2.5.0-2.6.0.sql +++ b/mysql/migration/2.5.0-2.6.0.sql @@ -8,3 +8,8 @@ update llx_actioncomm set datep = datea where datep is null; + +insert into llx_c_type_contact(rowid, element, source, code, libelle, active ) values (70, 'facture_fourn', 'internal', 'SALESREPFOLL', 'Responsable suivi du paiement', 1); +insert into llx_c_type_contact(rowid, element, source, code, libelle, active ) values (71, 'facture_fourn', 'external', 'BILLING', 'Contact fournisseur facturation', 1); +insert into llx_c_type_contact(rowid, element, source, code, libelle, active ) values (72, 'facture_fourn', 'external', 'SHIPPING', 'Contact fournisseur livraison', 1); +insert into llx_c_type_contact(rowid, element, source, code, libelle, active ) values (73, 'facture_fourn', 'external', 'SERVICE', 'Contact fournisseur prestation', 1);