From 0215ce9122fc122c7b15a4aa3ff79687e00f3ae4 Mon Sep 17 00:00:00 2001 From: Grand Philippe Date: Mon, 1 Oct 2012 10:05:03 +0200 Subject: [PATCH 1/8] add canvas to adherents module --- .../actions_adherentcard_common.class.php | 435 ++++++++++++++++++ .../actions_adherentcard_default.class.php | 148 ++++++ htdocs/adherents/canvas/default/index.php | 1 + .../default/tpl/adherentcard_create.tpl.php | 123 +++++ .../default/tpl/adherentcard_edit.tpl.php | 140 ++++++ .../default/tpl/adherentcard_view.tpl.php | 141 ++++++ htdocs/adherents/canvas/default/tpl/index.php | 1 + htdocs/adherents/canvas/index.php | 1 + 8 files changed, 990 insertions(+) create mode 100644 htdocs/adherents/canvas/actions_adherentcard_common.class.php create mode 100644 htdocs/adherents/canvas/default/actions_adherentcard_default.class.php create mode 100644 htdocs/adherents/canvas/default/index.php create mode 100644 htdocs/adherents/canvas/default/tpl/adherentcard_create.tpl.php create mode 100644 htdocs/adherents/canvas/default/tpl/adherentcard_edit.tpl.php create mode 100644 htdocs/adherents/canvas/default/tpl/adherentcard_view.tpl.php create mode 100644 htdocs/adherents/canvas/default/tpl/index.php create mode 100644 htdocs/adherents/canvas/index.php diff --git a/htdocs/adherents/canvas/actions_adherentcard_common.class.php b/htdocs/adherents/canvas/actions_adherentcard_common.class.php new file mode 100644 index 00000000000..a17cad48f1f --- /dev/null +++ b/htdocs/adherents/canvas/actions_adherentcard_common.class.php @@ -0,0 +1,435 @@ + + * Copyright (C) 2012 Philippe Grand + * + * 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, see . + */ + +/** + * \file htdocs/contact/canvas/actions_adherentcard_common.class.php + * \ingroup thirdparty + * \brief Fichier de la classe Adherent card controller (common) + */ + +/** + * \class ActionsAdherentCardCommon + * \brief Classe permettant la gestion des adherents par defaut + */ +abstract class ActionsAdherentCardCommon +{ + var $db; + var $dirmodule; + var $targetmodule; + var $canvas; + var $card; + + //! Template container + var $tpl = array(); + //! Object container + var $object; + //! Error string + var $error; + //! Error array + var $errors=array(); + + + /** + * Instantiation of DAO class + * + * @return void + */ + private function getInstanceDao() + { + if (! is_object($this->object)) + { + $modelclassfile = dol_buildpath('/'.$this->dirmodule.'/canvas/'.$this->canvas.'/dao_'.$this->targetmodule.'_'.$this->canvas.'.class.php'); + if (file_exists($modelclassfile)) + { + // Include dataservice class (model) + $ret = require_once $modelclassfile; + if ($ret) + { + // Instantiate dataservice class (model) + $modelclassname = 'Dao'.ucfirst($this->targetmodule).ucfirst($this->canvas); + $this->object = new $modelclassname($this->db); + } + } + } + } + + /** + * Get object + * + * @param int $id Object id + * @return object Object loaded + */ + function getObject($id) + { + $ret = $this->getInstanceDao(); + + if (is_object($this->object) && method_exists($this->object,'fetch')) + { + if (! empty($id)) $this->object->fetch($id); + } + else + { + $object = new Adherent($this->db); + if (! empty($id)) $object->fetch($id); + $this->object = $object; + } + } + + /** + * Load data control + * + * @param string &$action Type of action + * @param int $id Id of object + * @return void + */ + function doActions(&$action, $id) + { + global $conf, $user, $langs; + + // Creation utilisateur depuis Adherent + if ($action == 'confirm_create_user' && GETPOST("confirm") == 'yes') + { + // Recuperation adherent actuel + $result = $this->object->fetch($id); + + if ($result > 0) + { + $this->db->begin(); + + // Creation user + $nuser = new User($this->db); + $result=$nuser->create_from_member($this->object,$_POST["login"]); + + if ($result > 0) + { + $result2=$nuser->setPassword($user,$_POST["password"],0,1,1); + if ($result2) + { + $this->db->commit(); + } + else + { + $this->db->rollback(); + } + } + else + { + $this->errors=$nuser->error; + + $this->db->rollback(); + } + } + else + { + $this->errors=$this->object->errors; + } + } + + // Creation adherent + if ($action == 'add') + { + $this->assign_post(); + + if (! $_POST["name"]) + { + array_push($this->errors,$langs->trans("ErrorFieldRequired",$langs->transnoentities("Lastname").' / '.$langs->transnoentities("Label"))); + $action = 'create'; + } + + if ($_POST["name"]) + { + $id = $this->object->create($user); + if ($id > 0) + { + header("Location: ".$_SERVER["PHP_SELF"]."?id=".$id); + exit; + } + else + { + $this->errors=$this->object->errors; + $action = 'create'; + } + } + } + + if ($action == 'confirm_delete' && GETPOST("confirm") == 'yes') + { + $result=$this->object->fetch($id); + + $this->object->old_name = $_POST["old_name"]; + $this->object->old_firstname = $_POST["old_firstname"]; + + $result = $this->object->delete(); + if ($result > 0) + { + header("Location: list.php"); + exit; + } + else + { + $this->errors=$this->object->errors; + } + } + + if ($action == 'update') + { + if ($_POST["cancel"]) + { + header("Location: ".$_SERVER["PHP_SELF"]."?id=".$this->object->id); + exit; + } + + if (empty($_POST["name"])) + { + $this->error=array($langs->trans("ErrorFieldRequired",$langs->transnoentities("Name").' / '.$langs->transnoentities("Label"))); + $action = 'edit'; + } + + if (empty($this->error)) + { + $this->object->fetch($_POST["adherentid"]); + + $this->object->oldcopy=dol_clone($this->object); + + $this->assign_post(); + + $result = $this->object->update($_POST["adherentid"], $user); + + if ($result > 0) + { + header("Location: ".$_SERVER["PHP_SELF"]."?id=".$this->object->id); + exit; + } + else + { + $this->errors=$this->object->errors; + $action = 'edit'; + } + } + } + } + + /** + * Set content of ->tpl array, to use into template + * + * @param string &$action Type of action + * @param int $id Id + * @return string HTML output + */ + function assign_values(&$action, $id) + { + global $conf, $langs, $user, $canvas; + global $form, $formcompany, $objsoc; + + if ($action == 'add' || $action == 'update') $this->assign_post(); + + foreach($this->object as $key => $value) + { + $this->tpl[$key] = $value; + } + + $this->tpl['error']=$this->error; + $this->tpl['errors']=$this->errors; + + if ($action == 'create' || $action == 'edit') + { + if ($conf->use_javascript_ajax) + { + $this->tpl['ajax_selectcountry'] = "\n".''."\n"; + } + + if (is_object($objsoc) && $objsoc->id > 0) + { + $this->tpl['company'] = $objsoc->getNomUrl(1); + $this->tpl['company_id'] = $objsoc->id; + } + else + { + $this->tpl['company'] = $form->select_company($this->object->socid,'socid','',1); + } + + // Civility + $this->tpl['select_civility'] = $formcompany->select_civility($this->object->civilite_id); + + // Predefined with third party + if ((isset($objsoc->typent_code) && $objsoc->typent_code == 'TE_PRIVATE')) + { + if (dol_strlen(trim($this->object->address)) == 0) $this->tpl['address'] = $objsoc->address; + if (dol_strlen(trim($this->object->zip)) == 0) $this->object->zip = $objsoc->zip; + if (dol_strlen(trim($this->object->town)) == 0) $this->object->town = $objsoc->town; + if (dol_strlen(trim($this->object->phone_perso)) == 0) $this->object->phone_perso = $objsoc->phone; + if (dol_strlen(trim($this->object->phone_mobile)) == 0) $this->object->phone_mobile = $objsoc->phone_mobile; + if (dol_strlen(trim($this->object->email)) == 0) $this->object->email = $objsoc->email; + } + + // Zip + $this->tpl['select_zip'] = $formcompany->select_ziptown($this->object->zip,'zipcode',array('town','selectcountry_id','departement_id'),6); + + // Town + $this->tpl['select_town'] = $formcompany->select_ziptown($this->object->town,'town',array('zipcode','selectcountry_id','departement_id')); + + if (dol_strlen(trim($this->object->country_id)) == 0) $this->object->country_id = $objsoc->country_id; + + // Country + $this->tpl['select_country'] = $form->select_country($this->object->country_id,'country_id'); + $countrynotdefined = $langs->trans("ErrorSetACountryFirst").' ('.$langs->trans("SeeAbove").')'; + + if ($user->admin) $this->tpl['info_admin'] = info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionnarySetup"),1); + + // State + if ($this->object->country_id) $this->tpl['select_state'] = $formcompany->select_state($this->object->fk_departement,$this->object->country_code); + else $this->tpl['select_state'] = $countrynotdefined; + + // Physical or Moral + $selectarray=array('0'=>$langs->trans("Physical"),'1'=>$langs->trans("Moral")); + $this->tpl['select_morphy'] = $form->selectarray('morphy',$selectarray,$this->object->morphy,0); + } + + if ($action == 'view' || $action == 'edit' || $action == 'delete') + { + // Emailing + if (! empty($conf->mailing->enabled)) + { + $langs->load("mails"); + $this->tpl['nb_emailing'] = $this->object->getNbOfEMailings(); + } + + + // Dolibarr user + if ($this->object->user_id) + { + $dolibarr_user=new User($this->db); + $result=$dolibarr_user->fetch($this->object->user_id); + $this->tpl['dolibarr_user'] = $dolibarr_user->getLoginUrl(1); + } + else $this->tpl['dolibarr_user'] = $langs->trans("NoDolibarrAccess"); + } + + if ($action == 'view' || $action == 'delete') + { + $this->tpl['showrefnav'] = $form->showrefnav($this->object,'id'); + + if ($this->object->socid > 0) + { + $objsoc = new Societe($this->db); + + $objsoc->fetch($this->object->socid); + $this->tpl['company'] = $objsoc->getNomUrl(1); + } + else + { + $this->tpl['company'] = $langs->trans("AdherentNotLinkedToThirdParty"); + } + + $this->tpl['civility'] = $this->object->getCivilityLabel(); + + $this->tpl['address'] = dol_nl2br($this->object->address); + + $this->tpl['zip'] = ($this->object->zip?$this->object->zip.' ':''); + + $img=picto_from_langcode($this->object->country_code); + $this->tpl['country'] = ($img?$img.' ':'').$this->object->country; + + $this->tpl['phone_perso'] = dol_print_phone($this->object->phone_perso,$this->object->country_code,0,$this->object->id,'AC_TEL'); + $this->tpl['phone_mobile'] = dol_print_phone($this->object->phone_mobile,$this->object->country_code,0,$this->object->id,'AC_TEL'); + $this->tpl['email'] = dol_print_email($this->object->email,0,$this->object->id,'AC_EMAIL'); + + $this->tpl['visibility'] = $this->object->getmorphylib($this->object->morphy); + + $this->tpl['note'] = nl2br($this->object->note); + } + + if ($action == 'create_user') + { + // Full firstname and name separated with a dot : firstname.name + include_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; + require_once DOL_DOCUMENT_ROOT.'/core/lib/security2.lib.php'; + $login=dol_buildlogin($this->object->nom, $this->object->prenom); + + $generated_password=getRandomPassword(''); + $password=$generated_password; + + // Create a form array + $formquestion=array( + array('label' => $langs->trans("LoginToCreate"), 'type' => 'text', 'name' => 'login', 'value' => $login), + array('label' => $langs->trans("Password"), 'type' => 'text', 'name' => 'password', 'value' => $password)); + + $this->tpl['action_create_user'] = $form->formconfirm($_SERVER["PHP_SELF"]."?id=".$this->object->id,$langs->trans("CreateDolibarrLogin"),$langs->trans("ConfirmCreateAdherent"),"confirm_create_user",$formquestion,'no'); + } + } + + /** + * Assign POST values into object + * + * @return string HTML output + */ + private function assign_post() + { + global $langs, $mysoc; + + $this->object->old_name = $_POST["old_name"]; + $this->object->old_firstname = $_POST["old_firstname"]; + + $this->object->fk_soc = $_POST["fk_soc"]; + $this->object->name = $_POST["name"]; + $this->object->firstname = $_POST["firstname"]; + $this->object->civilite_id = $_POST["civilite_id"]; + $this->object->address = $_POST["address"]; + $this->object->zip = $_POST["zipcode"]; + $this->object->town = $_POST["town"]; + $this->object->fk_pays = $_POST["country_id"]?$_POST["country_id"]:$mysoc->country_id; + $this->object->fk_departement = $_POST["departement_id"]; + $this->object->country_id = $_POST["country_id"]?$_POST["country_id"]:$mysoc->country_id; + $this->object->state_id = $_POST["departement_id"]; + $this->object->phone_perso = $_POST["phone_perso"]; + $this->object->phone_mobile = $_POST["phone_mobile"]; + $this->object->email = $_POST["email"]; + $this->object->note = $_POST["note"]; + $this->object->canvas = $_POST["canvas"]; + + // We set country_id, and country_code label of the chosen country + if ($this->object->country_id) + { + $sql = "SELECT code, libelle FROM ".MAIN_DB_PREFIX."c_pays WHERE rowid = ".$this->object->country_id; + $resql=$this->db->query($sql); + if ($resql) + { + $obj = $this->db->fetch_object($resql); + } + else + { + dol_print_error($this->db); + } + $this->object->pays_code = $obj->code; + $this->object->pays = $langs->trans("Country".$obj->code)?$langs->trans("Country".$obj->code):$obj->libelle; + $this->object->country_code = $obj->code; + $this->object->country = $langs->trans("Country".$obj->code)?$langs->trans("Country".$obj->code):$obj->libelle; + } + } + +} + +?> diff --git a/htdocs/adherents/canvas/default/actions_adherentcard_default.class.php b/htdocs/adherents/canvas/default/actions_adherentcard_default.class.php new file mode 100644 index 00000000000..c3e7af66677 --- /dev/null +++ b/htdocs/adherents/canvas/default/actions_adherentcard_default.class.php @@ -0,0 +1,148 @@ + + * Copyright (C) 2011 Laurent Destailleur + * Copyright (C) 2012 Philippe Grand + * + * 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, see . + */ + +/** + * \file htdocs/contact/canvas/default/actions_adherentcard_default.class.php + * \ingroup thirdparty + * \brief Fichier de la classe Thirdparty adherent card controller (default canvas) + */ +include_once DOL_DOCUMENT_ROOT.'/adherent/canvas/actions_adherentcard_common.class.php'; + +/** + * \class ActionsAdherentCardDefault + * \brief Classe permettant la gestion des adherents par defaut + */ +class ActionsAdherentCardDefault extends ActionsAdherentCardCommon +{ + var $db; + var $dirmodule; + var $targetmodule; + var $canvas; + var $card; + + /** + * Constructor + * + * @param DoliDB $db Handler acces base de donnees + * @param string $dirmodule Name of directory of module + * @param string $targetmodule Name of directory of module where canvas is stored + * @param string $canvas Name of canvas + * @param string $card Name of tab (sub-canvas) + */ + function __construct($db, $dirmodule, $targetmodule, $canvas, $card) + { + $this->db = $db; + $this->dirmodule = $dirmodule; + $this->targetmodule = $targetmodule; + $this->canvas = $canvas; + $this->card = $card; + } + + /** + * Return the title of card + * + * @param string $action Code action + * @return string Title + */ + private function getTitle($action) + { + global $langs; + + $out=''; + + if ($action == 'view') $out.= (! empty($conf->global->ADHERENT_ADDRESSES_MANAGEMENT) ? $langs->trans("Adherent") : $langs->trans("ContactAddress")); + if ($action == 'edit') $out.= (! empty($conf->global->ADHERENT_ADDRESSES_MANAGEMENT) ? $langs->trans("EditAdherent") : $langs->trans("EditAdherentAddress")); + if ($action == 'create') $out.= (! empty($conf->global->ADHERENT_ADDRESSES_MANAGEMENT) ? $langs->trans("NewAdherent") : $langs->trans("NewAdherentAddress")); + + return $out; + } + + /** + * Assign custom values for canvas + * + * @param string &$action Type of action + * @param int $id Id + * @return void + */ + function assign_values(&$action, $id) + { + global $conf, $db, $langs, $user; + global $form; + + $ret = $this->getObject($id); + + parent::assign_values($action, $id); + + $this->tpl['title'] = $this->getTitle($action); + $this->tpl['error'] = $this->error; + $this->tpl['errors']= $this->errors; + + if ($action == 'view') + { + // Card header + $head = member_prepare_head($this->object); + $title = $this->getTitle($action); + + $this->tpl['showhead']=dol_get_fiche_head($head, 'card', $title, 0, 'adherent'); + $this->tpl['showend']=dol_get_fiche_end(); + + $objsoc = new Societe($db); + $objsoc->fetch($this->object->socid); + + $this->tpl['actionstodo']=show_actions_todo($conf,$langs,$db,$objsoc,$this->object,1); + + $this->tpl['actionsdone']=show_actions_done($conf,$langs,$db,$objsoc,$this->object,1); + } + else + { + // Confirm delete contact + if ($action == 'delete' && $user->rights->adherent->supprimer) + { + $this->tpl['action_delete'] = $form->formconfirm($_SERVER["PHP_SELF"]."?id=".$this->object->id,$langs->trans("DeleteAdherent"),$langs->trans("ConfirmDeleteAdherent"),"confirm_delete",'',0,1); + } + } + + if ($action == 'list') + { + $this->LoadListDatas($GLOBALS['limit'], $GLOBALS['offset'], $GLOBALS['sortfield'], $GLOBALS['sortorder']); + } + + } + + + /** + * Fetch datas list + * + * @param int $limit Limit number of responses + * @param int $offset Offset for first response + * @param string $sortfield Sort field + * @param string $sortorder Sort order ('ASC' or 'DESC') + * @return void + */ + function LoadListDatas($limit, $offset, $sortfield, $sortorder) + { + global $conf, $langs; + + //$this->getFieldList(); + + $this->list_datas = array(); + } +} + +?> \ No newline at end of file diff --git a/htdocs/adherents/canvas/default/index.php b/htdocs/adherents/canvas/default/index.php new file mode 100644 index 00000000000..7db0dd9ebf9 --- /dev/null +++ b/htdocs/adherents/canvas/default/index.php @@ -0,0 +1 @@ +Url not available \ No newline at end of file diff --git a/htdocs/adherents/canvas/default/tpl/adherentcard_create.tpl.php b/htdocs/adherents/canvas/default/tpl/adherentcard_create.tpl.php new file mode 100644 index 00000000000..10e258aad10 --- /dev/null +++ b/htdocs/adherents/canvas/default/tpl/adherentcard_create.tpl.php @@ -0,0 +1,123 @@ + + * Copyright (C) 2012 Philippe Grand + * + * 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, see . + * + */ +?> + + + +control->tpl['title']); + +dol_htmloutput_errors((is_numeric($object->error)?'':$object->error),$object->errors); + +dol_htmloutput_errors((is_numeric($GLOBALS['error'])?'':$GLOBALS['error']),$GLOBALS['errors']); + +dol_htmloutput_errors($this->control->tpl['error'],$this->control->tpl['errors']); + +echo $this->control->tpl['ajax_selectcountry']; ?> + +
+ +
"> + + + +control->tpl['company_id']) { ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
trans("Lastname").' / '.$langs->trans("Label"); ?>trans("Firstname"); ?>
trans("Company"); ?>control->tpl['company']; ?>
trans("UserTitle"); ?>control->tpl['select_civility']; ?>
trans("Morphy"); ?>
trans("Address"); ?>
trans("Zip").' / '.$langs->trans("Town"); ?>control->tpl['select_zip'].' '.$this->control->tpl['select_town']; ?>
trans("Country"); ?>control->tpl['select_country'].$this->control->tpl['info_admin']; ?>
trans('State'); ?>control->tpl['select_state']; ?>
trans("PhonePro"); ?>trans("PhonePerso"); ?>
trans("PhoneMobile"); ?>
trans("Email"); ?>
trans("ContactVisibility"); ?>control->tpl['select_visibility']; ?>
trans("Note"); ?>
">

+ +
+ + \ No newline at end of file diff --git a/htdocs/adherents/canvas/default/tpl/adherentcard_edit.tpl.php b/htdocs/adherents/canvas/default/tpl/adherentcard_edit.tpl.php new file mode 100644 index 00000000000..d825e14d681 --- /dev/null +++ b/htdocs/adherents/canvas/default/tpl/adherentcard_edit.tpl.php @@ -0,0 +1,140 @@ + + * Copyright (C) 2012 Philippe Grand + * + * 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, see . + * + */ + +$contact = $GLOBALS['objcanvas']->control->object; + +?> + + + +control->tpl['title']); + +dol_htmloutput_errors($this->control->tpl['error'],$this->control->tpl['errors']); + +echo $this->control->tpl['ajax_selectcountry']; +?> + +
+ +
"> + + + + + + + +control->tpl['company_id'])) { ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
trans("Ref"); ?>control->tpl['ref']; ?>
trans("Lastname").' / '.$langs->trans("Label"); ?>trans("Firstname"); ?>
trans("Company"); ?>control->tpl['company']; ?>
trans("UserTitle"); ?>control->tpl['select_civility']; ?>
trans("Morphy"); ?>
trans("Address"); ?>
trans("Zip").' / '.$langs->trans("Town"); ?>control->tpl['select_zip'].' '.$this->control->tpl['select_town']; ?>
trans("Country"); ?>control->tpl['select_country'].$this->control->tpl['info_admin']; ?>
trans('State'); ?>control->tpl['select_state']; ?>
trans("PhonePro"); ?>trans("PhonePerso"); ?>
trans("PhoneMobile"); ?>
trans("Email"); ?>
trans("ContactVisibility"); ?>control->tpl['select_visibility']; ?>
trans("Note"); ?>
trans("DolibarrLogin"); ?>control->tpl['dolibarr_user']; ?>
+ ">  + "> +

+ +
+ + \ No newline at end of file diff --git a/htdocs/adherents/canvas/default/tpl/adherentcard_view.tpl.php b/htdocs/adherents/canvas/default/tpl/adherentcard_view.tpl.php new file mode 100644 index 00000000000..7ffd10cb149 --- /dev/null +++ b/htdocs/adherents/canvas/default/tpl/adherentcard_view.tpl.php @@ -0,0 +1,141 @@ + + * Copyright (C) 2012 Philippe Grand + * + * 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, see . + * + */ + +$contact = $GLOBALS['objcanvas']->control->object; +?> + + +control->tpl['showhead']; ?> + +control->tpl['error'],$this->control->tpl['errors']); +?> + +control->tpl['action_create_user'])) echo $this->control->tpl['action_create_user']; ?> +control->tpl['action_delete'])) echo $this->control->tpl['action_delete']; ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
trans("Ref"); ?>control->tpl['showrefnav']; ?>
trans("Lastname"); ?>control->tpl['name']; ?>trans("Firstname"); ?>control->tpl['firstname']; ?>
trans("Company"); ?>control->tpl['company']; ?>
trans("UserTitle"); ?>control->tpl['civility']; ?>
trans("Morphy"); ?>control->tpl['select_morphy']; ?>
trans("Address"); ?>control->tpl['address']; ?>
trans("Zip").' / '.$langs->trans("Town"); ?>control->tpl['zip'].$this->control->tpl['ville']; ?>
trans("Country"); ?>control->tpl['country']; ?>
trans('State'); ?>control->tpl['departement']; ?>
trans("PhonePro"); ?>control->tpl['phone_pro']; ?>trans("PhonePerso"); ?>control->tpl['phone_perso']; ?>
trans("PhoneMobile"); ?>control->tpl['phone_mobile']; ?>
trans("EMail"); ?>control->tpl['email']; ?>
trans("ContactVisibility"); ?>control->tpl['visibility']; ?>
trans("Note"); ?>control->tpl['note']; ?>
trans("DolibarrLogin"); ?>control->tpl['dolibarr_user']; ?>
+ +control->tpl['showend']; ?> + +societe_id) { ?> +
+ +rights->adherent->creer) { ?> +">trans('Modify'); ?> + + +control->tpl['user_id'] && $user->rights->user->user->creer) { ?> +">trans("CreateDolibarrLogin"); ?> + + +rights->adherent->supprimer) { ?> +">trans('Delete'); ?> + + +

+control->tpl['actionstodo']; + +echo $this->control->tpl['actionsdone']; +?> + + \ No newline at end of file diff --git a/htdocs/adherents/canvas/default/tpl/index.php b/htdocs/adherents/canvas/default/tpl/index.php new file mode 100644 index 00000000000..7db0dd9ebf9 --- /dev/null +++ b/htdocs/adherents/canvas/default/tpl/index.php @@ -0,0 +1 @@ +Url not available \ No newline at end of file diff --git a/htdocs/adherents/canvas/index.php b/htdocs/adherents/canvas/index.php new file mode 100644 index 00000000000..7db0dd9ebf9 --- /dev/null +++ b/htdocs/adherents/canvas/index.php @@ -0,0 +1 @@ +Url not available \ No newline at end of file From 1d21f24fa79bcce6b3c66beb34f4db877fe9d5cb Mon Sep 17 00:00:00 2001 From: Maxime Kohlhaas Date: Mon, 1 Oct 2012 11:25:17 +0200 Subject: [PATCH 2/8] Task # 559 : Add possibility to define a discount for min quantity on supplier product prices --- .../fourn/class/fournisseur.product.class.php | 32 ++++++++++++++----- .../install/mysql/migration/3.2.0-3.3.0.sql | 4 +++ htdocs/langs/en_US/products.lang | 1 + htdocs/langs/fr_FR/products.lang | 1 + htdocs/product/fournisseurs.php | 20 +++++++++--- 5 files changed, 46 insertions(+), 12 deletions(-) diff --git a/htdocs/fourn/class/fournisseur.product.class.php b/htdocs/fourn/class/fournisseur.product.class.php index 02b6b92ab9e..fc02ba27d4a 100644 --- a/htdocs/fourn/class/fournisseur.product.class.php +++ b/htdocs/fourn/class/fournisseur.product.class.php @@ -44,6 +44,8 @@ class ProductFournisseur extends Product var $fourn_ref; // ref supplier var $fourn_qty; // quantity for price var $fourn_price; // price for quantity + var $fourn_remise_percent; // discount for quantity (percent) + var $fourn_remise; // discount for quantity (amount) var $product_fourn_id; // supplier id var $fk_availability; // availability delay var $fourn_unitprice; @@ -133,18 +135,20 @@ class ProductFournisseur extends Product /** * Modify the purchase price for a supplier * - * @param int $qty Min quantity for which price is valid - * @param float $buyprice Purchase price for the quantity min - * @param User $user Object user user made changes + * @param int $qty Min quantity for which price is valid + * @param float $buyprice Purchase price for the quantity min + * @param User $user Object user user made changes * @param string $price_base_type HT or TTC * @param Societe $fourn Supplier * @param int $availability Product availability * @param string $ref_fourn Supplier ref * @param float $tva_tx VAT rate * @param string $charges costs affering to product + * @param float $remise_percent Discount regarding qty (percent) + * @param float $remise Discount regarding qty (amount) * @return int >0 if KO, >0 if OK */ - function update_buyprice($qty, $buyprice, $user, $price_base_type, $fourn, $availability, $ref_fourn, $tva_tx, $charges=0) + function update_buyprice($qty, $buyprice, $user, $price_base_type, $fourn, $availability, $ref_fourn, $tva_tx, $charges=0, $remise_percent=0, $remise=0) { global $conf,$mysoc; @@ -177,6 +181,8 @@ class ProductFournisseur extends Product $sql.= " SET fk_user = " . $user->id." ,"; $sql.= " price = ".price2num($buyprice).","; $sql.= " quantity = ".$qty.","; + $sql.= " remise_percent = ".$remise_percent.","; + $sql.= " remise = ".$remise.","; $sql.= " unitprice = ".$unitBuyPrice.","; $sql.= " unitcharges = ".$unitCharges.","; $sql.= " tva_tx = ".$tva_tx.","; @@ -211,7 +217,7 @@ class ProductFournisseur extends Product { // Add price for this quantity to supplier $sql = "INSERT INTO ".MAIN_DB_PREFIX."product_fournisseur_price("; - $sql.= "datec, fk_product, fk_soc, ref_fourn, fk_user, price, quantity, unitprice, tva_tx, fk_availability, entity)"; + $sql.= "datec, fk_product, fk_soc, ref_fourn, fk_user, price, quantity, remise_percent, remise, unitprice, tva_tx, fk_availability, entity)"; $sql.= " values('".$this->db->idate($now)."',"; $sql.= " ".$this->id.","; $sql.= " ".$fourn->id.","; @@ -219,6 +225,8 @@ class ProductFournisseur extends Product $sql.= " ".$user->id.","; $sql.= " ".price2num($buyprice).","; $sql.= " ".$qty.","; + $sql.= " ".$remise_percent.","; + $sql.= " ".$remise.","; $sql.= " ".$unitBuyPrice.","; $sql.= " ".$tva_tx.","; $sql.= " ".$availability.","; @@ -280,7 +288,7 @@ class ProductFournisseur extends Product */ function fetch_product_fournisseur_price($rowid) { - $sql = "SELECT pfp.rowid, pfp.price, pfp.quantity, pfp.unitprice, pfp.tva_tx, pfp.fk_availability,"; + $sql = "SELECT pfp.rowid, pfp.price, pfp.quantity, pfp.unitprice, pfp.remise_percent, pfp.remise, pfp.tva_tx, pfp.fk_availability,"; $sql.= " pfp.fk_soc, pfp.ref_fourn, pfp.fk_product, pfp.charges, pfp.unitcharges"; $sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur_price as pfp"; $sql.= " WHERE pfp.rowid = ".$rowid; @@ -297,6 +305,8 @@ class ProductFournisseur extends Product $this->fourn_price = $obj->price; $this->fourn_charges = $obj->charges; $this->fourn_qty = $obj->quantity; + $this->fourn_remise_percent = $obj->remise_percent; + $this->fourn_remise = $obj->remise; $this->fourn_unitprice = $obj->unitprice; $this->fourn_unitcharges = $obj->unitcharges; $this->tva_tx = $obj->tva_tx; @@ -331,7 +341,7 @@ class ProductFournisseur extends Product $sql = "SELECT s.nom as supplier_name, s.rowid as fourn_id,"; $sql.= " pfp.rowid as product_fourn_pri_id, pfp.ref_fourn, pfp.fk_product as product_fourn_id,"; - $sql.= " pfp.price, pfp.quantity, pfp.unitprice, pfp.tva_tx, pfp.fk_availability, pfp.charges, pfp.unitcharges"; + $sql.= " pfp.price, pfp.quantity, pfp.unitprice, pfp.remise_percent, pfp.remise, pfp.tva_tx, pfp.fk_availability, pfp.charges, pfp.unitcharges"; $sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur_price as pfp"; $sql.= ", ".MAIN_DB_PREFIX."societe as s"; $sql.= " WHERE pfp.entity IN (".getEntity('product', 1).")"; @@ -356,6 +366,8 @@ class ProductFournisseur extends Product $prodfourn->fourn_ref = $record["ref_fourn"]; $prodfourn->fourn_price = $record["price"]; $prodfourn->fourn_qty = $record["quantity"]; + $prodfourn->fourn_remise_percent = $record["remise_percent"]; + $prodfourn->fourn_remise = $record["remise"]; $prodfourn->fourn_unitprice = $record["unitprice"]; $prodfourn->fourn_charges = $record["charges"]; $prodfourn->fourn_unitcharges = $record["unitcharges"]; @@ -406,6 +418,8 @@ class ProductFournisseur extends Product $this->fourn_ref = ''; $this->fourn_price = ''; $this->fourn_qty = ''; + $this->fourn_remise_percent = ''; + $this->fourn_remise = ''; $this->fourn_unitprice = ''; $this->fourn_id = ''; $this->fourn_name = ''; @@ -431,9 +445,11 @@ class ProductFournisseur extends Product $this->fourn_ref = $record["ref_fourn"]; $this->fourn_price = $record["price"]; $this->fourn_qty = $record["quantity"]; + $this->fourn_remise_percent = $record["remise_percent"]; + $this->fourn_remise = $record["remise"]; $this->fourn_unitprice = $record["unitprice"]; $this->fourn_charges = $record["charges"]; - $this->fourn_unitcharges = $record["unitcharges"]; + $this->fourn_unitcharges = $record["unitcharges"]; $this->fourn_tva_tx = $record["tva_tx"]; $this->fourn_id = $record["fourn_id"]; $this->fourn_name = $record["supplier_name"]; diff --git a/htdocs/install/mysql/migration/3.2.0-3.3.0.sql b/htdocs/install/mysql/migration/3.2.0-3.3.0.sql index baadd65d206..bf6229c859f 100755 --- a/htdocs/install/mysql/migration/3.2.0-3.3.0.sql +++ b/htdocs/install/mysql/migration/3.2.0-3.3.0.sql @@ -742,3 +742,7 @@ insert into llx_accountingaccount (rowid, fk_pcg_version, pcg_type, pcg_subtype, insert into llx_accountingaccount (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (436,'PCG99-BASE','PROD', 'XXXXXX', '791','79', 'Transferts de charges d''exploitation ', '1'); insert into llx_accountingaccount (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (437,'PCG99-BASE','PROD', 'XXXXXX', '796','79', 'Transferts de charges financières', '1'); insert into llx_accountingaccount (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (438,'PCG99-BASE','PROD', 'XXXXXX', '797','79', 'Transferts de charges exceptionnelles', '1'); + +-- Add discount in product supplier price +ALTER TABLE llx_product_fournisseur_price ADD COLUMN remise_percent DOUBLE NOT NULL DEFAULT 0 AFTER quantity; +ALTER TABLE llx_product_fournisseur_price ADD COLUMN remise DOUBLE NOT NULL DEFAULT 0 AFTER remise_percent; diff --git a/htdocs/langs/en_US/products.lang b/htdocs/langs/en_US/products.lang index d5f67a57d11..f59a9e0bba6 100644 --- a/htdocs/langs/en_US/products.lang +++ b/htdocs/langs/en_US/products.lang @@ -146,6 +146,7 @@ ProductSpecial=Special QtyMin=Quantity minimum PriceQty=Price for this quantity PriceQtyMin=Price quantity min. +DiscountQtyMin=Discount quantity min. NoPriceDefinedForThisSupplier=No price/qty defined for this supplier/product NoSupplierPriceDefinedForThisProduct=No supplier price/qty defined for this product RecordedProducts=Products recorded diff --git a/htdocs/langs/fr_FR/products.lang b/htdocs/langs/fr_FR/products.lang index 4f5bb65ad4d..3c301e60168 100644 --- a/htdocs/langs/fr_FR/products.lang +++ b/htdocs/langs/fr_FR/products.lang @@ -146,6 +146,7 @@ ProductSpecial=Special QtyMin=Quantité minimum PriceQty=Prix pour la quantité PriceQtyMin=Prix quantité min. +DiscountQtyMin=Remise quantité min. NoPriceDefinedForThisSupplier=Aucun prix/qté défini pour ce fournisseur/produit NoSupplierPriceDefinedForThisProduct=Aucun prix/qté fournisseur défini pour ce produit RecordedProducts=Produits en vente diff --git a/htdocs/product/fournisseurs.php b/htdocs/product/fournisseurs.php index 397828dd5c2..08b7ab05410 100644 --- a/htdocs/product/fournisseurs.php +++ b/htdocs/product/fournisseurs.php @@ -94,6 +94,7 @@ if ($action == 'updateprice' && GETPOST('cancel') <> $langs->trans("Cancel")) $ref_fourn=GETPOST("ref_fourn"); if (empty($ref_fourn)) $ref_fourn=GETPOST("search_ref_fourn"); $quantity=GETPOST("qty"); + $remise_percent=price2num(GETPOST('remise_percent','alpha')); $tva_tx=price2num(GETPOST('tva_tx','alpha')); if (empty($quantity)) @@ -153,10 +154,10 @@ if ($action == 'updateprice' && GETPOST('cancel') <> $langs->trans("Cancel")) $supplier=new Fournisseur($db); $result=$supplier->fetch($id_fourn); - if (isset($_POST['ref_fourn_price_id'])) - $product->fetch_product_fournisseur_price($_POST['ref_fourn_price_id']); + if (isset($_POST['ref_fourn_price_id'])) + $product->fetch_product_fournisseur_price($_POST['ref_fourn_price_id']); - $ret=$product->update_buyprice($quantity, $_POST["price"], $user, $_POST["price_base_type"], $supplier, $_POST["oselDispo"], $ref_fourn, $tva_tx, $_POST["charges"]); + $ret=$product->update_buyprice($quantity, $_POST["price"], $user, $_POST["price_base_type"], $supplier, $_POST["oselDispo"], $ref_fourn, $tva_tx, $_POST["charges"], $remise_percent); if ($ret < 0) { $error++; @@ -346,7 +347,12 @@ if ($id || $ref) print ''; print ' '; print $form->select_PriceBaseType((GETPOST('price_base_type')?GETPOST('price_base_type'):$product->price_base_type), "price_base_type"); - print ''; + print ''; + + // Discount qty min + print ''.$langs->trans("DiscountQtyMin").''; + print ' %'; + print ''; print ''; // Charges ???? @@ -407,6 +413,7 @@ if ($id || $ref) // Charges ???? if (! empty($conf->margin->enabled)) print ''.$langs->trans("Charges").''; print_liste_field_titre($langs->trans("UnitPriceHT"),$_SERVER["PHP_SELF"],"pfp.unitprice","",$param,'align="right"',$sortfield,$sortorder); + print ''.$langs->trans("DiscountQtyMin").''; // Charges ???? if (! empty($conf->margin->enabled)) print ''.$langs->trans("UnitCharges").''; print ''; @@ -466,6 +473,11 @@ if ($id || $ref) print price($productfourn->fourn_unitprice); //print $objp->unitprice? price($objp->unitprice) : ($objp->quantity?price($objp->price/$objp->quantity):" "); print ''; + + // Discount + print ''; + print vatrate($productfourn->fourn_remise_percent, $langs); + print ''; // Unit Charges ??? if (! empty($conf->margin->enabled)) From ed2a140046c55fd9506a383483b55801b0632d24 Mon Sep 17 00:00:00 2001 From: Maxime Kohlhaas Date: Mon, 1 Oct 2012 11:45:28 +0200 Subject: [PATCH 3/8] Task # 559 : add display of discount in product list while adding line on supplier order --- htdocs/core/class/html.form.class.php | 13 ++++++++++--- htdocs/fourn/commande/fiche.php | 4 ++-- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index 93017f18362..5a3482fac18 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -1408,7 +1408,7 @@ class Form $langs->load('stocks'); $sql = "SELECT p.rowid, p.label, p.ref, p.price, p.duration,"; - $sql.= " pfp.ref_fourn, pfp.rowid as idprodfournprice, pfp.price as fprice, pfp.quantity, pfp.unitprice,"; + $sql.= " pfp.ref_fourn, pfp.rowid as idprodfournprice, pfp.price as fprice, pfp.quantity, pfp.remise_percent, pfp.remise, pfp.unitprice,"; $sql.= " s.nom"; $sql.= " FROM ".MAIN_DB_PREFIX."product as p"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product_fournisseur_price as pfp ON p.rowid = pfp.fk_product"; @@ -1435,7 +1435,7 @@ class Form $sql .= " OR p.barcode LIKE '".$filterkey."'"; } } - $sql.= " ORDER BY pfp.ref_fourn DESC"; + $sql.= " ORDER BY pfp.ref_fourn DESC, pfp.quantity ASC"; // Build output string $outselect=''; @@ -1461,6 +1461,7 @@ class Form $outref=$objp->ref; $outval=''; $outqty=1; + $outdiscount=0; $opt = '