diff --git a/htdocs/compta/bank/account.php b/htdocs/compta/bank/account.php index d85d6ff3b271b0d60e0af844a3d657b28cb36d14..90a4e59fe40ce559ce782bf98f87886d61841153 100644 --- a/htdocs/compta/bank/account.php +++ b/htdocs/compta/bank/account.php @@ -5,7 +5,8 @@ * Copyright (C) 2004 Christophe Combelles <ccomb@free.fr> * Copyright (C) 2005-2012 Regis Houssin <regis.houssin@capnetworks.com> * Copyright (C) 2010-2011 Juanjo Menent <jmenent@@2byte.es> - * Copyright (C) 2012 Marcos García <marcosgdf@gmail.com> + * Copyright (C) 2012 Marcos García <marcosgdf@gmail.com> + * Copyright (C) 2011-2014 Alexandre Spangaro <alexandre.spangaro@gmail.com> * * 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 @@ -30,10 +31,12 @@ require('../../main.inc.php'); require_once DOL_DOCUMENT_ROOT.'/core/lib/bank.lib.php'; require_once DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php'; +require_once DOL_DOCUMENT_ROOT.'/user/class/user.class.php'; require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/sociales/class/chargesociales.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/paiement/class/paiement.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/tva/class/tva.class.php'; +require_once DOL_DOCUMENT_ROOT.'/compta/salaries/class/salaries.class.php'; require_once DOL_DOCUMENT_ROOT.'/fourn/class/paiementfourn.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'; @@ -133,11 +136,13 @@ if ($action == 'confirm_delete' && $confirm == 'yes' && $user->rights->banque->m llxHeader(); $societestatic=new Societe($db); +$userstatic=new User($db); $chargestatic=new ChargeSociales($db); $memberstatic=new Adherent($db); $paymentstatic=new Paiement($db); $paymentsupplierstatic=new PaiementFourn($db); $paymentvatstatic=new TVA($db); +$paymentsalstatic=new Sal($db); $bankstatic=new Account($db); $banklinestatic=new AccountLine($db); @@ -458,8 +463,12 @@ if ($id > 0 || ! empty($ref)) } if ($mode_search && ! empty($conf->tax->enabled)) { - $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."bank_url as bu2 ON bu2.fk_bank = b.rowid AND bu2.type='payment_vat'"; + // VAT + $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."bank_url as bu2 ON bu2.fk_bank = b.rowid AND bu2.type='payment_vat'"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."tva as t ON bu2.url_id = t.rowid"; + // Salaries + $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."bank_url as bu3 ON bu3.fk_bank = b.rowid AND bu3.type='payment_sal'"; + $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."salaries as sal ON bu3.url_id = sal.rowid"; } if ($mode_search && ! empty($conf->adherent->enabled)) { @@ -577,6 +586,12 @@ if ($id > 0 || ! empty($ref)) $paymentvatstatic->ref=$links[$key]['url_id']; print ' '.$paymentvatstatic->getNomUrl(2); } + elseif ($links[$key]['type']=='payment_sal') + { + $paymentsalstatic->id=$links[$key]['url_id']; + $paymentsalstatic->ref=$links[$key]['url_id']; + print ' '.$paymentsalstatic->getNomUrl(2); + } elseif ($links[$key]['type']=='banktransfert') { // Do not show link to transfer since there is no transfer card (avoid confusion). Can already be accessed from transaction detail. @@ -611,6 +626,10 @@ if ($id > 0 || ! empty($ref)) elseif ($links[$key]['type']=='company') { + } + elseif ($links[$key]['type']=='user') + { + } elseif ($links[$key]['type']=='member') { @@ -650,6 +669,12 @@ if ($id > 0 || ! empty($ref)) $societestatic->nom=$links[$key]['label']; print $societestatic->getNomUrl(1,'',16); } + else if ($links[$key]['type']=='user') + { + $userstatic->id=$links[$key]['url_id']; + $userstatic->lastname=$links[$key]['label']; + print $userstatic->getNomUrl(1,''); + } else if ($links[$key]['type']=='sc') { // sc=old value diff --git a/htdocs/compta/charges/index.php b/htdocs/compta/charges/index.php index 21d68d426630a8a14a1f87830e3f4db9d30176d9..1004f765fa813c62f52c875531ccb6b4684a86da 100644 --- a/htdocs/compta/charges/index.php +++ b/htdocs/compta/charges/index.php @@ -2,6 +2,7 @@ /* Copyright (C) 2001-2003 Rodolphe Quiedeville <rodolphe@quiedeville.org> * Copyright (C) 2004-2010 Laurent Destailleur <eldy@users.sourceforge.net> * Copyright (C) 2005-2010 Regis Houssin <regis.houssin@capnetworks.com> + * Copyright (C) 2011-2014 Alexandre Spangaro <alexandre.spangaro@gmail.com> * * 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 @@ -20,13 +21,14 @@ /** * \file htdocs/compta/charges/index.php * \ingroup compta - * \brief Page to list payments of social contributions and vat + * \brief Page to list payments of social contributions, vat and salaries */ require '../../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/compta/tva/class/tva.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/sociales/class/chargesociales.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/sociales/class/paymentsocialcontribution.class.php'; +require_once DOL_DOCUMENT_ROOT.'/compta/salaries/class/salaries.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; $langs->load("compta"); @@ -59,6 +61,7 @@ if (! $sortorder) $sortorder="DESC"; $tva_static = new Tva($db); $socialcontrib=new ChargeSociales($db); $payment_sc_static=new PaymentSocialContribution($db); +$sal_static = new Sal($db); llxHeader('',$langs->trans("TaxAndDividendsArea")); @@ -74,12 +77,92 @@ print_fiche_titre($title, ($year?"<a href='index.php?year=".($year-1).$param."'> if ($year) $param.='&year='.$year; -// Social contributions only if (GETPOST("mode") != 'sconly') { print $langs->trans("DescTaxAndDividendsArea").'<br>'; print "<br>"; +} + +// Salaries +if (empty($_GET["mode"]) || $_GET["mode"] != 'sconly') +{ + $sal = new Sal($db); + + print_fiche_titre($langs->trans("SalPayments").($year?' ('.$langs->trans("Year").' '.$year.')':''), '', ''); + + $sql = "SELECT s.rowid, s.amount, s.label, s.datev as dm"; + $sql.= " FROM ".MAIN_DB_PREFIX."salaries as s"; + $sql.= " WHERE s.entity = ".$conf->entity; + if ($year > 0) + { + // Si period renseignee on l'utilise comme critere de date, sinon on prend date echeance, + // ceci afin d'etre compatible avec les cas ou la periode n'etait pas obligatoire + $sql.= " AND s.datev between '".$db->idate(dol_get_first_day($year,1,false))."' AND '".$db->idate(dol_get_last_day($year,12,false))."'"; + } + if (preg_match('/^s/',$sortfield)) $sql.= $db->order($sortfield,$sortorder); + + $result = $db->query($sql); + if ($result) + { + $num = $db->num_rows($result); + $i = 0; + $total = 0 ; + print '<table class="noborder" width="100%">'; + print '<tr class="liste_titre">'; + print_liste_field_titre($langs->trans("PeriodEndDate"),$_SERVER["PHP_SELF"],"s.datev","",$param,'width="120"',$sortfield,$sortorder); + print_liste_field_titre($langs->trans("Label"),$_SERVER["PHP_SELF"],"s.label","",$param,'',$sortfield,$sortorder); + print_liste_field_titre($langs->trans("ExpectedToPay"),$_SERVER["PHP_SELF"],"s.amount","",$param,'align="right"',$sortfield,$sortorder); + print_liste_field_titre($langs->trans("RefPayment"),$_SERVER["PHP_SELF"],"s.rowid","",$param,'',$sortfield,$sortorder); + print_liste_field_titre($langs->trans("DatePayment"),$_SERVER["PHP_SELF"],"s.datev","",$param,'align="center"',$sortfield,$sortorder); + print_liste_field_titre($langs->trans("PayedByThisPayment"),$_SERVER["PHP_SELF"],"s.amount","",$param,'align="right"',$sortfield,$sortorder); + print "</tr>\n"; + $var=1; + while ($i < $num) + { + $obj = $db->fetch_object($result); + + $total = $total + $obj->amount; + + $var=!$var; + print "<tr ".$bc[$var].">"; + print '<td align="left">'.dol_print_date($db->jdate($obj->dm),'day').'</td>'."\n"; + print "<td>".$obj->label."</td>\n"; + + print '<td align="right">'.price($obj->amount)."</td>"; + + // Ref payment + $sal_static->id=$obj->rowid; + $sal_static->ref=$obj->rowid; + print '<td align="left">'.$sal_static->getNomUrl(1)."</td>\n"; + + print '<td align="center">'.dol_print_date($db->jdate($obj->dm),'day')."</td>\n"; + print '<td align="right">'.price($obj->amount)."</td>"; + print "</tr>\n"; + + $i++; + } + print '<tr class="liste_total"><td align="right" colspan="2">'.$langs->trans("Total").'</td>'; + print '<td align="right">'.price($total)."</td>"; + print '<td align="center"> </td>'; + print '<td align="center"> </td>'; + print '<td align="right">'.price($total)."</td>"; + print "</tr>"; + + print "</table>"; + $db->free($result); + + print "<br>"; + } + else + { + dol_print_error($db); + } +} + +// Social contributions only +if (GETPOST("mode") != 'sconly') +{ print_fiche_titre($langs->trans("SocialContributionsPayments").($year?' ('.$langs->trans("Year").' '.$year.')':''), '', ''); } @@ -219,7 +302,7 @@ if (empty($_GET["mode"]) || $_GET["mode"] != 'sconly') $var=!$var; print "<tr ".$bc[$var].">"; - print '<td align="left">'.dol_print_date($db->jdate($obj->dm),'day').' ? </td>'."\n"; + print '<td align="left">'.dol_print_date($db->jdate($obj->dm),'day').'</td>'."\n"; print "<td>".$obj->label."</td>\n"; diff --git a/htdocs/compta/salaries/class/salaries.class.php b/htdocs/compta/salaries/class/salaries.class.php new file mode 100644 index 0000000000000000000000000000000000000000..ccb89a1e4e50a382d8ffe950495e47ff3f65edf2 --- /dev/null +++ b/htdocs/compta/salaries/class/salaries.class.php @@ -0,0 +1,578 @@ +<?php +/* Copyright (C) 2011-2014 Alexandre Spangaro <alexandre.spangaro@gmail.com> + * + * 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 3 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 <http://www.gnu.org/licenses/>. + */ + +/** + * \file htdocs/compta/salaries/class/salaries.class.php + * \ingroup tax + * \brief Class for tax module salaries + */ + +// Put here all includes required by your class file +require_once DOL_DOCUMENT_ROOT .'/core/class/commonobject.class.php'; + + +/** + * Put here description of your class + */ +class Sal extends CommonObject +{ + //public $element='salaries'; //!< Id that identify managed objects + //public $table_element='salaries'; //!< Name of table without prefix where object is stored + + var $id; + var $ref; + + var $tms; + var $fk_user; + var $datep; + var $datev; + var $amount; + var $label; + var $datesp; + var $dateep; + var $note; + var $fk_bank; + var $fk_user_creat; + var $fk_user_modif; + + + + /** + * Constructor + * + * @param DoliDB $db Database handler + */ + function __construct($db) + { + $this->db = $db; + $this->element = 'salaries'; + $this->table_element = 'salaries'; + return 1; + } + + + /** + * Create in database + * + * @param User $user User that create + * @return int <0 if KO, >0 if OK + */ + function create($user) + { + global $conf, $langs; + + $error=0; + + // Clean parameters + $this->fk_user=trim($this->fk_user); + $this->amount=trim($this->amount); + $this->label=trim($this->label); + $this->note=trim($this->note); + $this->fk_bank=trim($this->fk_bank); + $this->fk_user_creat=trim($this->fk_user_creat); + $this->fk_user_modif=trim($this->fk_user_modif); + + // Check parameters + // Put here code to add control on parameters values + + // Insert request + $sql = "INSERT INTO ".MAIN_DB_PREFIX."salaries("; + $sql.= "tms,"; + $sql.= "fk_user,"; + $sql.= "datep,"; + $sql.= "datev,"; + $sql.= "amount,"; + $sql.= "label,"; + $sql.= "datesp,"; + $sql.= "dateep,"; + $sql.= "note,"; + $sql.= "fk_bank,"; + $sql.= "fk_user_creat,"; + $sql.= "fk_user_modif"; + + $sql.= ") VALUES ("; + + $sql.= " ".$this->db->idate($this->tms).","; + $sql.= " '".$this->fk_user."',"; + $sql.= " ".$this->db->idate($this->datep).","; + $sql.= " ".$this->db->idate($this->datev).","; + $sql.= " '".$this->amount."',"; + $sql.= " '".$this->label."',"; + $sql.= " ".$this->db->idate($this->datesp).","; + $sql.= " ".$this->db->idate($this->dateep).","; + $sql.= " '".$this->note."',"; + $sql.= " ".($this->fk_bank <= 0 ? "NULL" : "'".$this->fk_bank."'").","; + $sql.= " '".$this->fk_user_creat."',"; + $sql.= " '".$this->fk_user_modif."'"; + + $sql.= ")"; + + dol_syslog(get_class($this)."::create sql=".$sql, LOG_DEBUG); + $resql=$this->db->query($sql); + if ($resql) + { + $this->id = $this->db->last_insert_id(MAIN_DB_PREFIX."salaries"); + + // Appel des triggers + include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php'; + $interface=new Interfaces($this->db); + $result=$interface->run_triggers('SAL_CREATE',$this,$user,$langs,$conf); + if ($result < 0) { $error++; $this->errors=$interface->errors; } + // Fin appel triggers + + return $this->id; + } + else + { + $this->error="Error ".$this->db->lasterror(); + dol_syslog(get_class($this)."::create ".$this->error, LOG_ERR); + return -1; + } + } + + /** + * Update database + * + * @param User $user User that modify + * @param int $notrigger 0=no, 1=yes (no update trigger) + * @return int <0 if KO, >0 if OK + */ + function update($user=0, $notrigger=0) + { + global $conf, $langs; + + $error=0; + + // Clean parameters + $this->fk_user=trim($this->fk_user); + $this->amount=trim($this->amount); + $this->label=trim($this->label); + $this->note=trim($this->note); + $this->fk_bank=trim($this->fk_bank); + $this->fk_user_creat=trim($this->fk_user_creat); + $this->fk_user_modif=trim($this->fk_user_modif); + + // Check parameters + if (empty($this->fk_user) || $this->fk_user < 0) + { + $this->error='ErrorBadParameter'; + return -1; + } + + // Update request + $sql = "UPDATE ".MAIN_DB_PREFIX."salaries SET"; + + $sql.= " tms=".$this->db->idate($this->tms).","; + $sql.= " fk_user='".$this->fk_user."',"; + $sql.= " datep=".$this->db->idate($this->datep).","; + $sql.= " datev=".$this->db->idate($this->datev).","; + $sql.= " amount='".$this->amount."',"; + $sql.= " label='".$this->db->escape($this->label)."',"; + $sql.= " datesp=".$this->db->idate($this->datesp).","; + $sql.= " dateep=".$this->db->idate($this->dateep).","; + $sql.= " note='".$this->db->escape($this->note)."',"; + $sql.= " fk_bank='".$this->fk_bank."',"; + $sql.= " fk_user_creat='".$this->fk_user_creat."',"; + $sql.= " fk_user_modif='".$this->fk_user_modif."'"; + + $sql.= " WHERE rowid=".$this->id; + + dol_syslog(get_class($this)."::update sql=".$sql, LOG_DEBUG); + $resql = $this->db->query($sql); + if (! $resql) + { + $this->error="Error ".$this->db->lasterror(); + dol_syslog(get_class($this)."::update ".$this->error, LOG_ERR); + return -1; + } + + if (! $notrigger) + { + // Appel des triggers + include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php'; + $interface=new Interfaces($this->db); + $result=$interface->run_triggers('SAL_MODIFY',$this,$user,$langs,$conf); + if ($result < 0) { $error++; $this->errors=$interface->errors; } + // Fin appel triggers + } + + return 1; + } + + + /** + * Load object in memory from database + * + * @param int $id id object + * @param User $user User that load + * @return int <0 if KO, >0 if OK + */ + function fetch($id, $user=0) + { + global $langs; + $sql = "SELECT"; + $sql.= " s.rowid,"; + + $sql.= " s.tms,"; + $sql.= " s.fk_user,"; + $sql.= " s.datep,"; + $sql.= " s.datev,"; + $sql.= " s.amount,"; + $sql.= " s.label,"; + $sql.= " s.datesp,"; + $sql.= " s.dateep,"; + $sql.= " s.note,"; + $sql.= " s.fk_bank,"; + $sql.= " s.fk_user_creat,"; + $sql.= " s.fk_user_modif,"; + $sql.= " b.fk_account,"; + $sql.= " b.fk_type,"; + $sql.= " b.rappro"; + + $sql.= " FROM ".MAIN_DB_PREFIX."salaries as s"; + $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."bank as b ON s.fk_bank = b.rowid"; + $sql.= " WHERE s.rowid = ".$id; + + dol_syslog(get_class($this)."::fetch sql=".$sql, LOG_DEBUG); + $resql=$this->db->query($sql); + if ($resql) + { + if ($this->db->num_rows($resql)) + { + $obj = $this->db->fetch_object($resql); + + $this->id = $obj->rowid; + $this->ref = $obj->rowid; + $this->tms = $this->db->jdate($obj->tms); + $this->fk_user = $obj->fk_user; + $this->datep = $this->db->jdate($obj->datep); + $this->datev = $this->db->jdate($obj->datev); + $this->amount = $obj->amount; + $this->label = $obj->label; + $this->datesp = $this->db->jdate($obj->datesp); + $this->dateep = $this->db->jdate($obj->dateep); + $this->note = $obj->note; + $this->fk_bank = $obj->fk_bank; + $this->fk_user_creat = $obj->fk_user_creat; + $this->fk_user_modif = $obj->fk_user_modif; + $this->fk_account = $obj->fk_account; + $this->fk_type = $obj->fk_type; + $this->rappro = $obj->rappro; + } + $this->db->free($resql); + + return 1; + } + else + { + $this->error="Error ".$this->db->lasterror(); + dol_syslog(get_class($this)."::fetch ".$this->error, LOG_ERR); + return -1; + } + } + + + /** + * Delete object in database + * + * @param User $user User that delete + * @return int <0 if KO, >0 if OK + */ + function delete($user) + { + global $conf, $langs; + + $error=0; + + $sql = "DELETE FROM ".MAIN_DB_PREFIX."salaries"; + $sql.= " WHERE rowid=".$this->id; + + dol_syslog(get_class($this)."::delete sql=".$sql); + $resql = $this->db->query($sql); + if (! $resql) + { + $this->error="Error ".$this->db->lasterror(); + dol_syslog(get_class($this)."::delete ".$this->error, LOG_ERR); + return -1; + } + + // Appel des triggers + include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php'; + $interface=new Interfaces($this->db); + $result=$interface->run_triggers('SAL_DELETE',$this,$user,$langs,$conf); + if ($result < 0) { $error++; $this->errors=$interface->errors; } + // Fin appel triggers + + return 1; + } + + + /** + * Initialise an instance with random values. + * Used to build previews or test instances. + * id must be 0 if object instance is a specimen. + * + * @return void + */ + function initAsSpecimen() + { + $this->id=0; + + $this->tms=''; + $this->fk_user=''; + $this->datep=''; + $this->datev=''; + $this->amount=''; + $this->label=''; + $this->datesp=''; + $this->dateep=''; + $this->note=''; + $this->fk_bank=''; + $this->fk_user_creat=''; + $this->fk_user_modif=''; + } + + /** + * Ajoute un paiement de salaire + * + * @param User $user Object user that insert + * @return int <0 if KO, rowid in tva table if OK + */ + function addPayment($user) + { + global $conf,$langs; + + $this->db->begin(); + + // Clean parameters + $this->amount=price2num(trim($this->amount)); + + // Check parameters + if (! $this->label) + { + $this->error=$langs->trans("ErrorFieldRequired",$langs->transnoentities("Label")); + return -3; + } + if ($this->fk_user < 0 || $this->fk_user == '') + { + $this->error=$langs->trans("ErrorFieldRequired",$langs->transnoentities("Person")); + return -4; + } + if ($this->amount < 0 || $this->amount == '') + { + $this->error=$langs->trans("ErrorFieldRequired",$langs->transnoentities("Amount")); + return -5; + } + if (! empty($conf->banque->enabled) && (empty($this->accountid) || $this->accountid <= 0)) + { + $this->error=$langs->trans("ErrorFieldRequired",$langs->transnoentities("Account")); + return -6; + } + if (! empty($conf->banque->enabled) && (empty($this->paymenttype) || $this->paymenttype <= 0)) + { + $this->error=$langs->trans("ErrorFieldRequired",$langs->transnoentities("PaymentMode")); + return -6; + } + + // Insertion dans table des paiement salaires + $sql = "INSERT INTO ".MAIN_DB_PREFIX."salaries (fk_user"; + $sql.= ", datep"; + $sql.= ", datev"; + $sql.= ", amount"; + if ($this->note) $sql.=", note"; + if ($this->label) $sql.=", label"; + $sql.= ", datesp"; + $sql.= ", dateep"; + $sql.= ", fk_user_creat"; + $sql.= ", fk_bank"; + $sql.= ", entity"; + $sql.= ") "; + $sql.= " VALUES ("; + $sql.= "'".$this->fk_user."'"; + $sql.= ", '".$this->db->idate($this->datep)."'"; + $sql.= ", '".$this->db->idate($this->datev)."'"; + $sql.= ", ".$this->amount; + if ($this->note) $sql.= ", '".$this->db->escape($this->note)."'"; + if ($this->label) $sql.= ", '".$this->db->escape($this->label)."'"; + $sql.= ", '".$this->db->idate($this->datesp)."'"; + $sql.= ", '".$this->db->idate($this->dateep)."'"; + $sql.= ", '".$user->id."'"; + $sql.= ", NULL"; + $sql.= ", ".$conf->entity; + $sql.= ")"; + + dol_syslog(get_class($this)."::addPayment sql=".$sql); + $result = $this->db->query($sql); + if ($result) + { + $this->id = $this->db->last_insert_id(MAIN_DB_PREFIX."salaries"); // TODO devrait s'appeler payment_sal + + // Appel des triggers + include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php'; + $interface=new Interfaces($this->db); + $result=$interface->run_triggers('SAL_ADDPAYMENT',$this,$user,$langs,$conf); + if ($result < 0) { $error++; $this->errors=$interface->errors; } + // Fin appel triggers + + if ($this->id > 0) + { + $ok=1; + if (! empty($conf->banque->enabled) && ! empty($this->amount)) + { + // Insertion dans llx_bank + require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'; + + $acc = new Account($this->db); + $result=$acc->fetch($this->accountid); + if ($result <= 0) dol_print_error($this->db); + + // Insert payment into llx_bank + // Add link 'payment_sal' in bank_url between payment and bank transaction + $bank_line_id = $acc->addline( + $this->datep, + $this->paymenttype, + $this->label, + -abs($this->amount), + '', + '', + $user + ); + + // Mise a jour fk_bank dans llx_paiement. + // On connait ainsi le paiement qui a genere l'ecriture bancaire + if ($bank_line_id > 0) + { + $this->update_fk_bank($bank_line_id); + } + else + { + $this->error=$acc->error; + $ok=0; + } + + // Add link 'payment_sal' in bank_url between payment and bank transaction + $url=DOL_URL_ROOT.'/compta/salaries/fiche.php?id='; + + $result=$acc->add_url_line($bank_line_id, $this->id, $url, "(SalPayment)", "payment_sal"); + if ($result <= 0) + { + $this->error=$acc->error; + $ok=0; + } + + // Add link 'user' in bank_url between operation and bank transaction + $linkaddedforthirdparty=array(); + foreach ($this->amounts as $key => $value) + { + $sal = new Sal ($this->db); + + $sal->fetch($key); + $sal->fetch_user($this->fk_user); + + if (! in_array($sal->user->id,$linkaddedforthirdparty)) // Not yet done for this thirdparty + { + $result=$acc->add_url_line( + $bank_line_id, + $sal->user->id, + DOL_URL_ROOT.'/user/fiche.php?id=', + $sal->user->lastname, + 'user' + ); + + if ($result <= 0) dol_print_error($this->db); + $linkaddedforthirdparty[$sal->user->id]=$sal->user->id; // Mark as done for this thirdparty + } + + } + } + + if ($ok) + { + $this->db->commit(); + return $this->id; + } + else + { + $this->db->rollback(); + return -3; + } + } + else + { + $this->error=$this->db->error(); + $this->db->rollback(); + return -2; + } + } + else + { + $this->error=$this->db->error(); + $this->db->rollback(); + return -1; + } + } + + /** + * Mise a jour du lien entre le paiement salaire et la ligne générée dans llx_bank + * + * @param int $id_bank Id compte bancaire + * @return int <0 if KO, >0 if OK + */ + function update_fk_bank($id_bank) + { + $sql = 'UPDATE '.MAIN_DB_PREFIX.'salaries SET fk_bank = '.$id_bank; + $sql.= ' WHERE rowid = '.$this->id; + $result = $this->db->query($sql); + if ($result) + { + return 1; + } + else + { + dol_print_error($this->db); + return -1; + } + } + + + /** + * Renvoie nom clicable (avec eventuellement le picto) + * + * @param int $withpicto 0=Pas de picto, 1=Inclut le picto dans le lien, 2=Picto seul + * @param string $option Sur quoi pointe le lien + * @return string Chaine avec URL + */ + function getNomUrl($withpicto=0,$option='') + { + global $langs; + + $result=''; + + $lien = '<a href="'.DOL_URL_ROOT.'/compta/salaries/fiche.php?id='.$this->id.'">'; + $lienfin='</a>'; + + $picto='payment'; + $label=$langs->trans("ShowSalPayment").': '.$this->ref; + + if ($withpicto) $result.=($lien.img_object($label,$picto).$lienfin); + if ($withpicto && $withpicto != 2) $result.=' '; + if ($withpicto != 2) $result.=$lien.$this->ref.$lienfin; + return $result; + } + +} +?> diff --git a/htdocs/compta/salaries/fiche.php b/htdocs/compta/salaries/fiche.php new file mode 100644 index 0000000000000000000000000000000000000000..9ff49c2ad114aa16668432a6ccdb03586839f913 --- /dev/null +++ b/htdocs/compta/salaries/fiche.php @@ -0,0 +1,327 @@ +<?php +/* Copyright (C) 2011-2014 Alexandre Spangaro <alexandre.spangaro@gmail.com> + * + * 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 3 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 <http://www.gnu.org/licenses/>. + */ + +/** + * \file htdocs/compta/salaries/fiche.php + * \ingroup tax + * \brief Page of salaries payments + */ + +require '../../main.inc.php'; +require_once DOL_DOCUMENT_ROOT.'/compta/salaries/class/salaries.class.php'; +require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'; + +$langs->load("compta"); +$langs->load("banks"); +$langs->load("bills"); + +$id=GETPOST("id",'int'); +$action=GETPOST('action'); + +// Security check +$socid = isset($_GET["socid"])?$_GET["socid"]:''; +if ($user->societe_id) $socid=$user->societe_id; +$result = restrictedArea($user, 'tax', '', '', 'charges'); + +$sal = new Sal($db); + +// Initialize technical object to manage hooks of thirdparties. Note that conf->hooks_modules contains array array +$hookmanager->initHooks(array('taxsalcard')); + + + +/** + * Actions + */ + +if ($_POST["cancel"] == $langs->trans("Cancel")) +{ + header("Location: index.php"); + exit; +} + +if ($action == 'add' && $_POST["cancel"] <> $langs->trans("Cancel")) +{ + $db->begin(); + + $datev=dol_mktime(12,0,0, $_POST["datevmonth"], $_POST["datevday"], $_POST["datevyear"]); + $datep=dol_mktime(12,0,0, $_POST["datepmonth"], $_POST["datepday"], $_POST["datepyear"]); + $datesp=dol_mktime(12,0,0, $_POST["datespmonth"], $_POST["datespday"], $_POST["datespyear"]); + $dateep=dol_mktime(12,0,0, $_POST["dateepmonth"], $_POST["dateepday"], $_POST["dateepyear"]); + + + $sal->accountid=$_POST["accountid"]; + $sal->paymenttype=$_POST["paiementtype"]; + $sal->fk_user=$_POST["fk_user"]; + $sal->datev=$datev; + $sal->datep=$datep; + $sal->amount=$_POST["amount"]; + $sal->label=$_POST["label"]; + $sal->datesp=$datesp; + $sal->dateep=$dateep; + + $ret=$sal->addPayment($user); + if ($ret > 0) + { + $db->commit(); + header("Location: index.php"); + exit; + } + else + { + $db->rollback(); + setEventMessage($sal->error, 'errors'); + $action="create"; + } +} + +if ($action == 'delete') +{ + $result=$sal->fetch($id); + + if ($sal->rappro == 0) + { + $db->begin(); + + $ret=$sal->delete($user); + if ($ret > 0) + { + if ($sal->fk_bank) + { + $accountline=new AccountLine($db); + $result=$accountline->fetch($sal->fk_bank); + if ($result > 0) $result=$accountline->delete($user); // $result may be 0 if not found (when bank entry was deleted manually and fk_bank point to nothing) + } + + if ($result >= 0) + { + $db->commit(); + header("Location: ".DOL_URL_ROOT.'/compta/salaries/index.php'); + exit; + } + else + { + $sal->error=$accountline->error; + $db->rollback(); + setEventMessage($sal->error,'errors'); + } + } + else + { + $db->rollback(); + setEventMessage($sal->error,'errors'); + } + } + else + { + setEventMessage('Error try do delete a line linked to a conciliated bank transaction','errors'); + } +} + + +/* +* View +*/ + +llxHeader(); + +$form = new Form($db); + +if ($id) +{ + $salpayment = new Sal($db); + $result = $salpayment->fetch($id); + if ($result <= 0) + { + dol_print_error($db); + exit; + } +} + +// Formulaire saisie salaire +if ($action == 'create') +{ + print "<form name='add' action=\"fiche.php\" method=\"post\">\n"; + print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">'; + print '<input type="hidden" name="action" value="add">'; + + print_fiche_titre($langs->trans("NewSalPayment")); + + print '<table class="border" width="100%">'; + + print "<tr>"; + print '<td class="fieldrequired">'.$langs->trans("DatePayment").'</td><td>'; + print $form->select_date($datep,"datep",'','','','add'); + print '</td></tr>'; + + print '<tr><td class="fieldrequired">'.$langs->trans("DateValue").'</td><td>'; + print $form->select_date($datev,"datev",'','','','add'); + print '</td></tr>'; + + print "<tr>"; + print '<td class="fieldrequired">'.$langs->trans("Person").'</td><td>'; + print $form->select_dolusers(GETPOST('fk_user','int'),'fk_user',1); + print '</td></tr>'; + + // Label + print '<tr><td class="fieldrequired">'.$langs->trans("Label").'</td><td><input name="label" size="40" value="'.($_POST["label"]?$_POST["label"]:$langs->trans("SalPayment")).'"></td></tr>'; + + print "<tr>"; + print '<td class="fieldrequired">'.$langs->trans("DateStartPeriod").'</td><td>'; + print $form->select_date($datesp,"datesp",'','','','add'); + print '</td></tr>'; + + print '<tr><td class="fieldrequired">'.$langs->trans("DateEndPeriod").'</td><td>'; + print $form->select_date($dateep,"dateep",'','','','add'); + print '</td></tr>'; + + // Amount + print '<tr><td class="fieldrequired">'.$langs->trans("Amount").'</td><td><input name="amount" size="10" value="'.$_POST["amount"].'"></td></tr>'; + + // Bank + if (! empty($conf->banque->enabled)) + { + print '<tr><td class="fieldrequired">'.$langs->trans("Account").'</td><td>'; + $form->select_comptes($_POST["accountid"],"accountid",0,"courant=1",1); // Affiche liste des comptes courant + print '</td></tr>'; + + print '<tr><td class="fieldrequired">'.$langs->trans("PaymentMode").'</td><td>'; + $form->select_types_paiements($_POST["paiementtype"], "paiementtype"); + print "</td>\n"; + print "</tr>"; + } + + // Other attributes + $parameters=array('colspan' => ' colspan="1"'); + $reshook=$hookmanager->executeHooks('formObjectOptions',$parameters,$object,$action); // Note that $action and $object may have been modified by hook + + print '</table>'; + + print "<br>"; + + print '<center><input type="submit" class="button" value="'.$langs->trans("Save").'"> '; + print '<input type="submit" class="button" name="cancel" value="'.$langs->trans("Cancel").'"></center>'; + + print '</form>'; +} + + +/* ************************************************************************** */ +/* */ +/* Barre d'action */ +/* */ +/* ************************************************************************** */ + +if ($id) +{ + $h = 0; + $head[$h][0] = DOL_URL_ROOT.'/compta/salaries/fiche.php?id='.$salpayment->id; + $head[$h][1] = $langs->trans('Card'); + $head[$h][2] = 'card'; + $h++; + + dol_fiche_head($head, 'card', $langs->trans("SalPayment"), 0, 'payment'); + + + print '<table class="border" width="100%">'; + + print "<tr>"; + print '<td width="25%">'.$langs->trans("Ref").'</td><td colspan="3">'; + print $salpayment->ref; + print '</td></tr>'; + + // Person + print '<tr><td>'.$langs->trans("Person").'</td><td>'; + $usersal=new User($db); + $usersal->fetch($salpayment->fk_user); + print $usersal->getNomUrl(1); + print '</td></tr>'; + + // Label + print '<tr><td>'.$langs->trans("Label").'</td><td>'.$salpayment->label.'</td></tr>'; + + print "<tr>"; + print '<td>'.$langs->trans("DateStartPeriod").'</td><td colspan="3">'; + print dol_print_date($salpayment->datesp,'day'); + print '</td></tr>'; + + print '<tr><td>'.$langs->trans("DateEndPeriod").'</td><td colspan="3">'; + print dol_print_date($salpayment->dateep,'day'); + print '</td></tr>'; + + print "<tr>"; + print '<td>'.$langs->trans("DatePayment").'</td><td colspan="3">'; + print dol_print_date($salpayment->datep,'day'); + print '</td></tr>'; + + print '<tr><td>'.$langs->trans("DateValue").'</td><td colspan="3">'; + print dol_print_date($salpayment->datev,'day'); + print '</td></tr>'; + + print '<tr><td>'.$langs->trans("Amount").'</td><td colspan="3">'.price($salpayment->amount).'</td></tr>'; + + if (! empty($conf->banque->enabled)) + { + if ($salpayment->fk_account > 0) + { + $bankline=new AccountLine($db); + $bankline->fetch($salpayment->fk_bank); + + print '<tr>'; + print '<td>'.$langs->trans('BankTransactionLine').'</td>'; + print '<td colspan="3">'; + print $bankline->getNomUrl(1,0,'showall'); + print '</td>'; + print '</tr>'; + } + } + + // Other attributes + $parameters=array('colspan' => ' colspan="3"'); + $reshook=$hookmanager->executeHooks('formObjectOptions',$parameters,$salpayment,$action); // Note that $action and $object may have been modified by hook + + print '</table>'; + + print '</div>'; + + /* + * Boutons d'actions + */ + print "<div class=\"tabsAction\">\n"; + if ($salpayment->rappro == 0) + { + if (! empty($user->rights->tax->charges->supprimer)) + { + print '<a class="butActionDelete" href="fiche.php?id='.$salpayment->id.'&action=delete">'.$langs->trans("Delete").'</a>'; + } + else + { + print '<a class="butActionRefused" href="#" title="'.(dol_escape_htmltag($langs->trans("NotAllowed"))).'">'.$langs->trans("Delete").'</a>'; + } + } + else + { + print '<a class="butActionRefused" href="#" title="'.$langs->trans("LinkedToAConcialitedTransaction").'">'.$langs->trans("Delete").'</a>'; + } + print "</div>"; +} + + +$db->close(); + +llxFooter(); +?> diff --git a/htdocs/compta/salaries/index.php b/htdocs/compta/salaries/index.php new file mode 100644 index 0000000000000000000000000000000000000000..a2e166529def7b05da0493abbed00cd1a1350ed4 --- /dev/null +++ b/htdocs/compta/salaries/index.php @@ -0,0 +1,107 @@ +<?php +/* Copyright (C) 2011-2014 Alexandre Spangaro <alexandre.spangaro@gmail.com> + * + * 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 3 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 <http://www.gnu.org/licenses/>. + */ + +/** + * \file htdocs/compta/salaries/index.php + * \ingroup tax + * \brief List of salaries payments + */ + +require '../../main.inc.php'; +require_once DOL_DOCUMENT_ROOT.'/compta/salaries/class/salaries.class.php'; + +$langs->load("compta"); + +// Security check +$socid = isset($_GET["socid"])?$_GET["socid"]:''; +if ($user->societe_id) $socid=$user->societe_id; +$result = restrictedArea($user, 'tax', '', '', 'charges'); + + + +/* + * View + */ + +llxHeader(); + +$salstatic = new Sal($db); +$userstatic = new User($db); + + +print_fiche_titre($langs->trans("SalPayments")); + +$sql = "SELECT u.rowid as uid, u.lastname, u.firstname, s.rowid, s.fk_user, s.amount, s.label, s.datev as dm"; +$sql.= " FROM ".MAIN_DB_PREFIX."salaries as s, ".MAIN_DB_PREFIX."user as u"; +$sql.= " WHERE u.rowid = s.fk_user"; +$sql.= " AND s.entity = ".$conf->entity; +$sql.= " ORDER BY dm DESC"; + +$result = $db->query($sql); +if ($result) +{ + $num = $db->num_rows($result); + $i = 0; + $total = 0 ; + + print '<table class="noborder" width="100%">'; + print '<tr class="liste_titre">'; + print '<td class="nowrap" align="left">'.$langs->trans("Ref").'</td>'; + print "<td>".$langs->trans("Person")."</td>"; + print "<td>".$langs->trans("Label")."</td>"; + print '<td class="nowrap" align="left">'.$langs->trans("DatePayment").'</td>'; + print "<td align=\"right\">".$langs->trans("PayedByThisPayment")."</td>"; + print "</tr>\n"; + $var=1; + while ($i < $num) + { + $obj = $db->fetch_object($result); + $var=!$var; + print "<tr ".$bc[$var].">"; + + $userstatic->id=$obj->uid; + $userstatic->lastname=$obj->lastname; + $userstatic->firstname=$obj->firstname; + $salstatic->id=$obj->rowid; + $salstatic->ref=$obj->rowid; + print "<td>".$salstatic->getNomUrl(1)."</td>\n"; + print "<td>".$userstatic->getNomUrl(1)."</td>\n"; + print "<td>".dol_trunc($obj->label,40)."</td>\n"; + print '<td align="left">'.dol_print_date($db->jdate($obj->dm),'day')."</td>\n"; + $total = $total + $obj->amount; + + print "<td align=\"right\">".price($obj->amount)."</td>"; + print "</tr>\n"; + + $i++; + } + print '<tr class="liste_total"><td colspan="4">'.$langs->trans("Total").'</td>'; + print "<td align=\"right\"><b>".price($total)."</b></td></tr>"; + + print "</table>"; + $db->free($result); +} +else +{ + dol_print_error($db); +} + + +$db->close(); + +llxFooter(); +?> diff --git a/htdocs/core/menus/init_menu_auguria.sql b/htdocs/core/menus/init_menu_auguria.sql index ea9852253e2e29ac64c4178071cc6d93bf813d86..91769af37fb993570f341749f2008c3e00e09e09 100644 --- a/htdocs/core/menus/init_menu_auguria.sql +++ b/htdocs/core/menus/init_menu_auguria.sql @@ -180,9 +180,12 @@ insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, left insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->deplacement->enabled && $leftmenu=="tripsandexpenses"', __HANDLER__, 'left', 2102__+MAX_llx_menu__, 'accountancy', '', 2100__+MAX_llx_menu__, '/compta/deplacement/list.php?leftmenu=tripsandexpenses', 'List', 1, 'trips', '$user->rights->deplacement->lire', '', 0, 2, __ENTITY__); insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->deplacement->enabled && $leftmenu=="tripsandexpenses"', __HANDLER__, 'left', 2103__+MAX_llx_menu__, 'accountancy', '', 2100__+MAX_llx_menu__, '/compta/deplacement/stats/index.php?leftmenu=tripsandexpenses', 'Statistics', 1, 'trips', '$user->rights->deplacement->lire', '', 0, 2, __ENTITY__); insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->tax->enabled', __HANDLER__, 'left', 2200__+MAX_llx_menu__, 'accountancy', 'tax', 6__+MAX_llx_menu__, '/compta/charges/index.php?leftmenu=tax&mainmenu=accountancy', 'MenuTaxAndDividends', 0, 'compta', '$user->rights->tax->charges->lire', '', 0, 6, __ENTITY__); -insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->tax->enabled', __HANDLER__, 'left', 2201__+MAX_llx_menu__, 'accountancy', 'tax_social', 2200__+MAX_llx_menu__, '/compta/sociales/index.php?leftmenu=tax_social', 'SocialContributions', 1, '', '$user->rights->tax->charges->lire', '', 0, 1, __ENTITY__); -insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->tax->enabled && $leftmenu=="tax_social"', __HANDLER__, 'left', 2202__+MAX_llx_menu__, 'accountancy', '', 2201__+MAX_llx_menu__, '/compta/sociales/charges.php?leftmenu=tax_social&action=create', 'MenuNewSocialContribution', 2, '', '$user->rights->tax->charges->creer', '', 0, 2, __ENTITY__); -insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->tax->enabled && $leftmenu=="tax_social"', __HANDLER__, 'left', 2203__+MAX_llx_menu__, 'accountancy', '', 2201__+MAX_llx_menu__, '/compta/charges/index.php?leftmenu=tax_social&mainmenu=accountancy&mode=sconly', 'Payments', 2, '', '$user->rights->tax->charges->lire', '', 0, 3, __ENTITY__); +insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->tax->enabled', __HANDLER__, 'left', 2201__+MAX_llx_menu__, 'accountancy', 'tax_sal', 2200__+MAX_llx_menu__, '/compta/salaries/index.php?leftmenu=tax_sal&mainmenu=accountancy', 'Salaries', 1, 'companies', '$user->rights->tax->charges->lire', '', 0, 7, __ENTITY__); +insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->tax->enabled && $leftmenu=="tax_sal"', __HANDLER__, 'left', 2201__+MAX_llx_menu__, 'accountancy', '', 2201__+MAX_llx_menu__, '/compta/salaries/fiche.php?leftmenu=tax_sal&action=create', 'NewPayment', 2, 'companies', '$user->rights->tax->charges->creer', '', 0, 0, __ENTITY__); +insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->tax->enabled && $leftmenu=="tax_sal"', __HANDLER__, 'left', 2202__+MAX_llx_menu__, 'accountancy', '', 2201__+MAX_llx_menu__, '/compta/salaries/index.php?leftmenu=tax_sal', 'Payments', 2, 'companies', '$user->rights->tax->charges->lire', '', 0, 1, __ENTITY__); +insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->tax->enabled', __HANDLER__, 'left', 2250__+MAX_llx_menu__, 'accountancy', 'tax_social', 2200__+MAX_llx_menu__, '/compta/sociales/index.php?leftmenu=tax_social', 'SocialContributions', 1, '', '$user->rights->tax->charges->lire', '', 0, 1, __ENTITY__); +insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->tax->enabled && $leftmenu=="tax_social"', __HANDLER__, 'left', 2251__+MAX_llx_menu__, 'accountancy', '', 2250__+MAX_llx_menu__, '/compta/sociales/charges.php?leftmenu=tax_social&action=create', 'MenuNewSocialContribution', 2, '', '$user->rights->tax->charges->creer', '', 0, 2, __ENTITY__); +insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->tax->enabled && $leftmenu=="tax_social"', __HANDLER__, 'left', 2252__+MAX_llx_menu__, 'accountancy', '', 2250__+MAX_llx_menu__, '/compta/charges/index.php?leftmenu=tax_social&mainmenu=accountancy&mode=sconly', 'Payments', 2, '', '$user->rights->tax->charges->lire', '', 0, 3, __ENTITY__); insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->tax->enabled && empty($conf->global->TAX_DISABLE_VAT_MENUS)', __HANDLER__, 'left', 2300__+MAX_llx_menu__, 'accountancy', 'tax_vat', 2200__+MAX_llx_menu__, '/compta/tva/index.php?leftmenu=tax_vat&mainmenu=accountancy', 'VAT', 1, 'companies', '$user->rights->tax->charges->lire', '', 0, 7, __ENTITY__); insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->tax->enabled && empty($conf->global->TAX_DISABLE_VAT_MENUS) && $leftmenu=="tax_vat"', __HANDLER__, 'left', 2301__+MAX_llx_menu__, 'accountancy', '', 2300__+MAX_llx_menu__, '/compta/tva/fiche.php?leftmenu=tax_vat&action=create', 'NewPayment', 2, 'companies', '$user->rights->tax->charges->creer', '', 0, 0, __ENTITY__); insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->tax->enabled && empty($conf->global->TAX_DISABLE_VAT_MENUS) && $leftmenu=="tax_vat"', __HANDLER__, 'left', 2302__+MAX_llx_menu__, 'accountancy', '', 2300__+MAX_llx_menu__, '/compta/tva/reglement.php?leftmenu=tax_vat', 'Payments', 2, 'companies', '$user->rights->tax->charges->lire', '', 0, 1, __ENTITY__); diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php index 6c7e64d118a3c0198376b1e00a17c182498f16a6..d879d8cde7a4df562d39ac4191f94544ea1d2783 100644 --- a/htdocs/core/menus/standard/eldy.lib.php +++ b/htdocs/core/menus/standard/eldy.lib.php @@ -804,7 +804,13 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu if (! empty($conf->tax->enabled)) { $newmenu->add("/compta/charges/index.php?leftmenu=tax&mainmenu=accountancy",$langs->trans("MenuTaxAndDividends"), 0, $user->rights->tax->charges->lire, '', $mainmenu, 'tax'); - if (empty($leftmenu) || preg_match('/^tax/i',$leftmenu)) $newmenu->add("/compta/sociales/index.php?leftmenu=tax_social",$langs->trans("MenuSocialContributions"),1,$user->rights->tax->charges->lire); + // Salaries + if (empty($leftmenu) || preg_match('/^tax/i',$leftmenu)) $newmenu->add("/compta/salaries/index.php?leftmenu=tax_sal&mainmenu=accountancy",$langs->trans("Salaries"),1,$user->rights->tax->charges->lire, '', $mainmenu, 'tax_vat'); + if (empty($leftmenu) || preg_match('/^tax/i',$leftmenu)) $newmenu->add("/compta/salaries/fiche.php?leftmenu=tax_sal&action=create",$langs->trans("NewPayment"),2,$user->rights->tax->charges->creer); + if (empty($leftmenu) || preg_match('/^tax/i',$leftmenu)) $newmenu->add("/compta/salaries/index.php?leftmenu=tax_sal",$langs->trans("Payments"),2,$user->rights->tax->charges->lire); + global $mysoc; + // Social contributions + if (empty($leftmenu) || preg_match('/^tax/i',$leftmenu)) $newmenu->add("/compta/sociales/index.php?leftmenu=tax_social",$langs->trans("MenuSocialContributions"),1,$user->rights->tax->charges->lire); if (empty($leftmenu) || preg_match('/^tax/i',$leftmenu)) $newmenu->add("/compta/sociales/charges.php?leftmenu=tax_social&action=create",$langs->trans("MenuNewSocialContribution"), 2, $user->rights->tax->charges->creer); if (empty($leftmenu) || preg_match('/^tax/i',$leftmenu)) $newmenu->add("/compta/charges/index.php?leftmenu=tax_social&mainmenu=accountancy&mode=sconly",$langs->trans("Payments"), 2, $user->rights->tax->charges->lire); // VAT diff --git a/htdocs/install/mysql/tables/llx_salaries.sql b/htdocs/install/mysql/tables/llx_salaries.sql new file mode 100644 index 0000000000000000000000000000000000000000..398086274f15afd334692169fafad4d9da3a40a2 --- /dev/null +++ b/htdocs/install/mysql/tables/llx_salaries.sql @@ -0,0 +1,35 @@ +-- =================================================================== +-- Copyright (C) 2011-2014 Alexandre Spangaro <alexandre.spangaro@gmail.com> +-- +-- 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 3 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 <http://www.gnu.org/licenses/>. +-- +-- =================================================================== + +create table llx_salaries +( + rowid integer AUTO_INCREMENT PRIMARY KEY, + tms timestamp, + fk_user integer NOT NULL, + datep date, -- date de paiement + datev date, -- date de valeur + amount real NOT NULL DEFAULT 0, + label varchar(255), + datesp date, -- date de début de la période + dateep date, -- date de fin de la période + entity integer DEFAULT 1 NOT NULL, -- multi company id + note text, + fk_bank integer, + fk_user_creat integer, -- utilisateur qui a cree l'info + fk_user_modif integer -- utilisateur qui a modifié l'info +)ENGINE=innodb; \ No newline at end of file diff --git a/htdocs/langs/en_US/compta.lang b/htdocs/langs/en_US/compta.lang index b505efef8bc354372c509d6594d65b10d0c3b0f7..45158337f041297fe015075a382e9d6d5a09c592 100644 --- a/htdocs/langs/en_US/compta.lang +++ b/htdocs/langs/en_US/compta.lang @@ -41,6 +41,7 @@ VATToCollect=VAT purchases VATSummary=VAT Balance LT2SummaryES=IRPF Balance VATPaid=VAT paid +SalPaid=Salary paid LT2PaidES=IRPF Paid LT2CustomerES=IRPF sales LT2SupplierES=IRPF purchases @@ -63,19 +64,24 @@ PaymentCustomerInvoice=Customer invoice payment PaymentSupplierInvoice=Supplier invoice payment PaymentSocialContribution=Social contribution payment PaymentVat=VAT payment +PaymentSal=Salary payment ListPayment=List of payments ListOfPayments=List of payments ListOfCustomerPayments=List of customer payments ListOfSupplierPayments=List of supplier payments DatePayment=Payment date NewVATPayment=New VAT payment +NewSalPayment=New Salary payment newLT2PaymentES=New IRPF payment LT2PaymentES=IRPF Payment LT2PaymentsES=IRPF Payments VATPayment=VAT Payment VATPayments=VAT Payments +SalPayment=Salary payment +SalPayments=Saalries payments SocialContributionsPayments=Social contributions payments ShowVatPayment=Show VAT payment +ShowSalPayment=Show salary payment TotalToPay=Total to pay TotalVATReceived=Total VAT received CustomerAccountancyCode=Customer accountancy code diff --git a/htdocs/langs/fr_FR/compta.lang b/htdocs/langs/fr_FR/compta.lang index 4630b76f6e62b6b00ebaeb612ad913c77ce01d7c..99cc954ab6d3dc0d9498ee252d2d2d48a761ae56 100644 --- a/htdocs/langs/fr_FR/compta.lang +++ b/htdocs/langs/fr_FR/compta.lang @@ -63,19 +63,24 @@ PaymentCustomerInvoice=Règlement facture client PaymentSupplierInvoice=Règlement facture fournisseur PaymentSocialContribution=Règlement charge sociale PaymentVat=Règlement TVA +PaymentSal=Règlement salaire ListPayment=Liste des règlements ListOfPayments=Liste des règlements ListOfCustomerPayments=Liste des règlements clients ListOfSupplierPayments=Liste des règlements fournisseurs DatePayment=Date de règlement NewVATPayment=Nouveau règlement de TVA +NewSalPayment=Nouveau règlement de salaire newLT2PaymentES=Nouveau règlement de IRPF LT2PaymentES=Règlement IRPF LT2PaymentsES=Règlements IRPF VATPayment=Règlement TVA VATPayments=Règlements TVA +SalPayment=Règlement salaire +SalPayments=Règlements des salaires SocialContributionsPayments=Règlements charges sociales ShowVatPayment=Affiche paiement TVA +ShowSalPayment=Affiche paiement salaire TotalToPay=Total à payer TotalVATReceived=Total TVA perçue CustomerAccountancyCode=Compte comptable client