NEW Upload file with drag and drop for VATs

This commit is contained in:
Laurent Destailleur 2023-05-04 17:50:23 +02:00
parent f61f425231
commit c4dc0b3c35
5 changed files with 265 additions and 253 deletions

View File

@ -15,6 +15,7 @@ NEW: Accountancy - Add specific page to export accounting data rather than the j
NEW: Accountancy - Add sub-account balance FPC22
NEW: Accountancy - Manage customer retained warranty FPC21+
NEW: Accountancy - Manage intra-community VAT on supplier invoices - FPC22
NEW: Can upload a file with drag and drop on purchase invoice, vats, salaries and social contributions
NEW: adapt category and product pictures sizes on takepos
NEW: Add ability of ODT support to supplier invoices
NEW: Add a public virtual card page for each user

View File

@ -453,9 +453,6 @@ if ($action == 'create') {
// View mode
if ($id > 0) {
$object = new ChargeSociales($db);
$result = $object->fetch($id);
$formconfirm = '';
if ($result > 0) {

View File

@ -43,9 +43,9 @@ if (isModEnabled('accounting')) {
// Load translation files required by the page
$langs->loadLangs(array('compta', 'banks', 'bills'));
$id = GETPOST("id", 'int');
$id = GETPOST('id', 'int');
$ref = GETPOST('ref', 'alpha');
$action = GETPOST("action", "aZ09");
$action = GETPOST('action', 'aZ09');
$confirm = GETPOST('confirm', 'alpha');
$cancel = GETPOST('cancel', 'aZ09');
$contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : 'myobjectcard'; // To manage different context of search
@ -80,8 +80,8 @@ if (empty($action) && empty($id) && empty($ref)) {
}
// Load object
if ($id > 0) {
$object->fetch($id);
if ($id > 0 || $ref) {
$object->fetch($id, $ref);
}
$permissiontoread = $user->rights->tax->charges->lire;
@ -96,277 +96,282 @@ $socid = GETPOST('socid', 'int');
if ($user->socid) {
$socid = $user->socid;
}
$result = restrictedArea($user, 'tax', '', 'tva', 'charges');
$result = restrictedArea($user, 'tax', $object->id, 'tva', 'charges');
/*
* Actions
*/
$parameters = array();
$parameters = array('socid' => $socid);
$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
if ($reshook < 0) {
setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
}
if ($cancel && !$id) {
header("Location: list.php");
exit;
}
if ($action == 'setlib' && $user->rights->tax->charges->creer) {
$object->fetch($id);
$result = $object->setValueFrom('label', GETPOST('lib', 'alpha'), '', '', 'text', '', $user, 'TAX_MODIFY');
if ($result < 0) {
setEventMessages($object->error, $object->errors, 'errors');
}
}
if ($action == 'setdatev' && $user->rights->tax->charges->creer) {
$object->fetch($id);
$object->datev = $datev;
$result = $object->update($user);
if ($result < 0) {
dol_print_error($db, $object->error);
if (empty($reshook)) {
if ($cancel && !$id) {
header("Location: list.php");
exit;
}
$action = '';
}
// payment mode
if ($action == 'setmode' && $user->rights->tax->charges->creer) {
$object->fetch($id);
$result = $object->setPaymentMethods(GETPOST('mode_reglement_id', 'int'));
if ($result < 0) {
setEventMessages($object->error, $object->errors, 'errors');
}
}
// Bank account
if ($action == 'setbankaccount' && $user->rights->tax->charges->creer) {
$object->fetch($id);
$result = $object->setBankAccount(GETPOST('fk_account', 'int'));
if ($result < 0) {
setEventMessages($object->error, $object->errors, 'errors');
}
}
// Classify paid
if ($action == 'confirm_paid' && $user->rights->tax->charges->creer && $confirm == 'yes') {
$object->fetch($id);
$result = $object->setPaid($user);
}
if ($action == 'reopen' && $user->rights->tax->charges->creer) {
$result = $object->fetch($id);
if ($object->paye) {
$result = $object->setUnpaid($user);
if ($result > 0) {
header('Location: '.$_SERVER["PHP_SELF"].'?id='.$id);
exit();
} else {
if ($action == 'setlib' && $user->rights->tax->charges->creer) {
$object->fetch($id);
$result = $object->setValueFrom('label', GETPOST('lib', 'alpha'), '', '', 'text', '', $user, 'TAX_MODIFY');
if ($result < 0) {
setEventMessages($object->error, $object->errors, 'errors');
}
}
}
if ($action == 'add' && !$cancel) {
$error = 0;
if ($action == 'setdatev' && $user->rights->tax->charges->creer) {
$object->fetch($id);
$object->datev = $datev;
$result = $object->update($user);
if ($result < 0) {
dol_print_error($db, $object->error);
}
$object->fk_account = GETPOST("accountid", 'int');
$object->type_payment = GETPOST("type_payment", 'alphanohtml');
$object->num_payment = GETPOST("num_payment", 'alphanohtml');
$object->datev = $datev;
$object->datep = $datep;
$amount = price2num(GETPOST("amount", 'alpha'));
if ($refund == 1) {
$amount = -$amount;
}
$object->amount = $amount;
$object->label = GETPOST("label", 'alpha');
$object->note = GETPOST("note", 'restricthtml');
$object->note_private = GETPOST("note", 'restricthtml');
if (empty($object->datep)) {
setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("DatePayment")), null, 'errors');
$error++;
}
if (empty($object->datev)) {
setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("PeriodEndDate")), null, 'errors');
$error++;
}
if (!empty($auto_create_payment) && (empty($object->type_payment) || $object->type_payment < 0)) {
setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("PaymentMode")), null, 'errors');
$error++;
}
if (empty($object->amount)) {
setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Amount")), null, 'errors');
$error++;
}
if (!empty($auto_create_payment) && ($object->fk_account <= 0)) {
setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("AccountToCredit")), null, 'errors');
$error++;
$action = '';
}
if (!$error) {
$ret = $object->create($user);
if ($ret < 0) {
// payment mode
if ($action == 'setmode' && $user->rights->tax->charges->creer) {
$object->fetch($id);
$result = $object->setPaymentMethods(GETPOST('mode_reglement_id', 'int'));
if ($result < 0) {
setEventMessages($object->error, $object->errors, 'errors');
}
}
// Bank account
if ($action == 'setbankaccount' && $user->rights->tax->charges->creer) {
$object->fetch($id);
$result = $object->setBankAccount(GETPOST('fk_account', 'int'));
if ($result < 0) {
setEventMessages($object->error, $object->errors, 'errors');
}
}
// Classify paid
if ($action == 'confirm_paid' && $user->rights->tax->charges->creer && $confirm == 'yes') {
$object->fetch($id);
$result = $object->setPaid($user);
}
if ($action == 'reopen' && $user->rights->tax->charges->creer) {
$result = $object->fetch($id);
if ($object->paye) {
$result = $object->setUnpaid($user);
if ($result > 0) {
header('Location: '.$_SERVER["PHP_SELF"].'?id='.$id);
exit();
} else {
setEventMessages($object->error, $object->errors, 'errors');
}
}
}
if ($action == 'add' && !$cancel) {
$error = 0;
$object->fk_account = GETPOST("accountid", 'int');
$object->type_payment = GETPOST("type_payment", 'alphanohtml');
$object->num_payment = GETPOST("num_payment", 'alphanohtml');
$object->datev = $datev;
$object->datep = $datep;
$amount = price2num(GETPOST("amount", 'alpha'));
if ($refund == 1) {
$amount = -$amount;
}
$object->amount = $amount;
$object->label = GETPOST("label", 'alpha');
$object->note = GETPOST("note", 'restricthtml');
$object->note_private = GETPOST("note", 'restricthtml');
if (empty($object->datep)) {
setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("DatePayment")), null, 'errors');
$error++;
}
if (empty($object->datev)) {
setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("PeriodEndDate")), null, 'errors');
$error++;
}
if (!empty($auto_create_payment) && (empty($object->type_payment) || $object->type_payment < 0)) {
setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("PaymentMode")), null, 'errors');
$error++;
}
if (empty($object->amount)) {
setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Amount")), null, 'errors');
$error++;
}
if (!empty($auto_create_payment) && ($object->fk_account <= 0)) {
setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("AccountToCredit")), null, 'errors');
$error++;
}
// Auto create payment
if (!empty($auto_create_payment) && !$error) {
$db->begin();
if (!$error) {
$ret = $object->create($user);
if ($ret < 0) {
$error++;
}
// Create a line of payments
$paiement = new PaymentVAT($db);
$paiement->chid = $object->id;
$paiement->datepaye = $datep;
$paiement->amounts = array($object->id=>$amount); // Tableau de montant
$paiement->paiementtype = GETPOST("type_payment", 'alphanohtml');
$paiement->num_payment = GETPOST("num_payment", 'alphanohtml');
$paiement->note = GETPOST("note", 'restricthtml');
// Auto create payment
if (!empty($auto_create_payment) && !$error) {
$db->begin();
if (!$error) {
$paymentid = $paiement->create($user, (int) GETPOST('closepaidtva'));
if ($paymentid < 0) {
$error++;
setEventMessages($paiement->error, null, 'errors');
$action = 'create';
// Create a line of payments
$paiement = new PaymentVAT($db);
$paiement->chid = $object->id;
$paiement->datepaye = $datep;
$paiement->amounts = array($object->id=>$amount); // Tableau de montant
$paiement->paiementtype = GETPOST("type_payment", 'alphanohtml');
$paiement->num_payment = GETPOST("num_payment", 'alphanohtml');
$paiement->note = GETPOST("note", 'restricthtml');
if (!$error) {
$paymentid = $paiement->create($user, (int) GETPOST('closepaidtva'));
if ($paymentid < 0) {
$error++;
setEventMessages($paiement->error, null, 'errors');
$action = 'create';
}
}
if (!$error) {
$result = $paiement->addPaymentToBank($user, 'payment_vat', '(VATPayment)', GETPOST('accountid', 'int'), '', '');
if (!($result > 0)) {
$error++;
setEventMessages($paiement->error, null, 'errors');
}
}
if (!$error) {
$db->commit();
} else {
$db->rollback();
}
}
if (!$error) {
$result = $paiement->addPaymentToBank($user, 'payment_vat', '(VATPayment)', GETPOST('accountid', 'int'), '', '');
if (!($result > 0)) {
$error++;
setEventMessages($paiement->error, null, 'errors');
}
}
if (!$error) {
$db->commit();
} else {
$db->rollback();
if (empty($error)) {
header("Location: card.php?id=" . $object->id);
exit;
}
}
if (empty($error)) {
header("Location: card.php?id=" . $object->id);
exit;
}
$action = 'create';
}
$action = 'create';
}
if ($action == 'confirm_delete' && $confirm == 'yes') {
$result = $object->fetch($id);
$totalpaid = $object->getSommePaiement();
if ($action == 'confirm_delete' && $confirm == 'yes') {
$result = $object->fetch($id);
$totalpaid = $object->getSommePaiement();
if (empty($totalpaid)) {
$db->begin();
if (empty($totalpaid)) {
$db->begin();
$ret = $object->delete($user);
if ($ret > 0) {
if ($object->fk_bank) {
$accountline = new AccountLine($db);
$result = $accountline->fetch($object->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)
$ret = $object->delete($user);
if ($ret > 0) {
if ($object->fk_bank) {
$accountline = new AccountLine($db);
$result = $accountline->fetch($object->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/tva/list.php');
exit;
if ($result >= 0) {
$db->commit();
header("Location: ".DOL_URL_ROOT.'/compta/tva/list.php');
exit;
} else {
$object->error = $accountline->error;
$db->rollback();
setEventMessages($object->error, $object->errors, 'errors');
}
} else {
$object->error = $accountline->error;
$db->rollback();
setEventMessages($object->error, $object->errors, 'errors');
}
} else {
$db->rollback();
setEventMessages($object->error, $object->errors, 'errors');
}
} else {
setEventMessages($langs->trans('DisabledBecausePayments'), null, 'errors');
}
}
if ($action == 'update' && !GETPOST("cancel") && $user->rights->tax->charges->creer) {
$amount = price2num(GETPOST('amount', 'alpha'), 'MT');
if (empty($amount)) {
setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Amount")), null, 'errors');
$action = 'edit';
} elseif (!is_numeric($amount)) {
setEventMessages($langs->trans("ErrorFieldMustBeANumeric", $langs->transnoentities("Amount")), null, 'errors');
$action = 'create';
} else {
$result = $object->fetch($id);
$object->amount = $amount;
$result = $object->update($user);
if ($result <= 0) {
setEventMessages($object->error, $object->errors, 'errors');
setEventMessages($langs->trans('DisabledBecausePayments'), null, 'errors');
}
}
}
// Action clone object
if ($action == 'confirm_clone' && $confirm != 'yes') {
$action = '';
}
if ($action == 'update' && !GETPOST("cancel") && $user->rights->tax->charges->creer) {
$amount = price2num(GETPOST('amount', 'alpha'), 'MT');
if ($action == 'confirm_clone' && $confirm == 'yes' && ($user->rights->tax->charges->creer)) {
$db->begin();
$originalId = $id;
$object->fetch($id);
if ($object->id > 0) {
$object->id = $object->ref = null;
$object->paye = 0;
if (GETPOST('amount', 'alphanohtml')) {
$object->amount = price2num(GETPOST('amount', 'alphanohtml'), 'MT', 2);
}
if (GETPOST('clone_label', 'alphanohtml')) {
$object->label = GETPOST('clone_label', 'alphanohtml');
if (empty($amount)) {
setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Amount")), null, 'errors');
$action = 'edit';
} elseif (!is_numeric($amount)) {
setEventMessages($langs->trans("ErrorFieldMustBeANumeric", $langs->transnoentities("Amount")), null, 'errors');
$action = 'create';
} else {
$object->label = $langs->trans("CopyOf").' '.$object->label;
$result = $object->fetch($id);
$object->amount = $amount;
$result = $object->update($user);
if ($result <= 0) {
setEventMessages($object->error, $object->errors, 'errors');
}
}
$newdateperiod = dol_mktime(0, 0, 0, GETPOST('clone_periodmonth', 'int'), GETPOST('clone_periodday', 'int'), GETPOST('clone_periodyear', 'int'));
if ($newdateperiod) {
$object->datev = $newdateperiod;
}
//if ($object->check()) {
$id = $object->create($user);
if ($id > 0) {
$db->commit();
$db->close();
header("Location: ".$_SERVER["PHP_SELF"]."?id=".$id);
exit;
} else {
$id = $originalId;
$db->rollback();
setEventMessages($object->error, $object->errors, 'errors');
}
//}
} else {
$db->rollback();
dol_print_error($db, $object->error);
}
// Action clone object
if ($action == 'confirm_clone' && $confirm != 'yes') {
$action = '';
}
if ($action == 'confirm_clone' && $confirm == 'yes' && ($user->rights->tax->charges->creer)) {
$db->begin();
$originalId = $id;
$object->fetch($id);
if ($object->id > 0) {
$object->id = $object->ref = null;
$object->paye = 0;
if (GETPOST('amount', 'alphanohtml')) {
$object->amount = price2num(GETPOST('amount', 'alphanohtml'), 'MT', 2);
}
if (GETPOST('clone_label', 'alphanohtml')) {
$object->label = GETPOST('clone_label', 'alphanohtml');
} else {
$object->label = $langs->trans("CopyOf").' '.$object->label;
}
$newdateperiod = dol_mktime(0, 0, 0, GETPOST('clone_periodmonth', 'int'), GETPOST('clone_periodday', 'int'), GETPOST('clone_periodyear', 'int'));
if ($newdateperiod) {
$object->datev = $newdateperiod;
}
//if ($object->check()) {
$id = $object->create($user);
if ($id > 0) {
$db->commit();
$db->close();
header("Location: ".$_SERVER["PHP_SELF"]."?id=".$id);
exit;
} else {
$id = $originalId;
$db->rollback();
setEventMessages($object->error, $object->errors, 'errors');
}
//}
} else {
$db->rollback();
dol_print_error($db, $object->error);
}
}
// Actions to build doc
include DOL_DOCUMENT_ROOT.'/core/actions_builddoc.inc.php';
}
@ -382,16 +387,7 @@ $title = $langs->trans("VAT")." - ".$langs->trans("Card");
$help_url = '';
llxHeader('', $title, $help_url);
if ($id) {
$result = $object->fetch($id);
if ($result <= 0) {
dol_print_error($db);
exit;
}
}
// Form to enter VAT
// Form to create a VAT
if ($action == 'create') {
print load_fiche_titre($langs->trans("VAT").' - '.$langs->trans("New"));
@ -532,6 +528,8 @@ if ($action == 'create') {
// View mode
if ($id > 0) {
$formconfirm = '';
$head = vat_prepare_head($object);
$totalpaid = $object->getSommePaiement();
@ -546,25 +544,37 @@ if ($id > 0) {
$formquestion[] = array('type' => 'date', 'name' => 'clone_period', 'label' => $langs->trans("PeriodEndDate"), 'value' => -1);
$formquestion[] = array('type' => 'text', 'name' => 'amount', 'label' => $langs->trans("Amount"), 'value' => price($object->amount), 'morecss' => 'width100');
print $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('ToClone'), $langs->trans('ConfirmCloneVAT', $object->ref), 'confirm_clone', $formquestion, 'yes', 1, 240);
$formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('ToClone'), $langs->trans('ConfirmCloneVAT', $object->ref), 'confirm_clone', $formquestion, 'yes', 1, 240);
}
if ($action == 'paid') {
$text = $langs->trans('ConfirmPayVAT');
print $form->formconfirm($_SERVER["PHP_SELF"]."?id=".$object->id, $langs->trans('PayVAT'), $text, "confirm_paid", '', '', 2);
$formconfirm = $form->formconfirm($_SERVER["PHP_SELF"]."?id=".$object->id, $langs->trans('PayVAT'), $text, "confirm_paid", '', '', 2);
}
if ($action == 'delete') {
$text = $langs->trans('ConfirmDeleteVAT');
print $form->formconfirm($_SERVER['PHP_SELF'].'?id='.$object->id, $langs->trans('DeleteVAT'), $text, 'confirm_delete', '', '', 2);
$formconfirm = $form->formconfirm($_SERVER['PHP_SELF'].'?id='.$object->id, $langs->trans('DeleteVAT'), $text, 'confirm_delete', '', '', 2);
}
if ($action == 'edit') {
print "<form name=\"charge\" action=\"".$_SERVER["PHP_SELF"]."?id=$object->id&amp;action=update\" method=\"post\">";
print '<form name="charge" action="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'" method="POST">';
print '<input type="hidden" name="token" value="'.newToken().'">';
print '<input type="hidden" name="action" value="update">';
}
// Call Hook formConfirm
$parameters = array('formConfirm' => $formconfirm, 'lineid' => $lineid);
$reshook = $hookmanager->executeHooks('formConfirm', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
if (empty($reshook)) {
$formconfirm .= $hookmanager->resPrint;
} elseif ($reshook > 0) {
$formconfirm = $hookmanager->resPrint;
}
print dol_get_fiche_head($head, 'card', $langs->trans("VATPayment"), -1, 'payment');
print dol_get_fiche_head($head, 'card', $langs->trans("VATPayment"), -1, 'payment', 0, '', '', 0, '', 1);
// Print form confirm
print $formconfirm;
$morehtmlref = '<div class="refidno">';
// Label of social contribution

View File

@ -299,15 +299,13 @@ class Tva extends CommonObject
* Load object in memory from database
*
* @param int $id id object
* @param User $user User that load
* @param string $ref Ref of VAT (not used yet)
* @return int <0 if KO, >0 if OK
*/
public function fetch($id, $user = null)
public function fetch($id, $ref = '')
{
global $langs;
$sql = "SELECT";
$sql .= " t.rowid,";
$sql .= " t.tms,";
$sql .= " t.datep,";
$sql .= " t.datev,";
@ -320,12 +318,11 @@ class Tva extends CommonObject
$sql .= " t.fk_user_creat,";
$sql .= " t.fk_user_modif,";
$sql .= " t.fk_account";
$sql .= " FROM ".MAIN_DB_PREFIX."tva as t";
//$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."bank as b ON t.fk_bank = b.rowid";
$sql .= " WHERE t.rowid = ".((int) $id);
dol_syslog(get_class($this)."::fetch", LOG_DEBUG);
$resql = $this->db->query($sql);
if ($resql) {
if ($this->db->num_rows($resql)) {

View File

@ -11268,7 +11268,7 @@ function getElementProperties($element_type)
$regs = array();
$classfile = $classname = $classpath = $dir_output = '';
$classfile = $classname = $classpath = $subdir = $dir_output = '';
// Parse element/subelement
$module = $element_type;
@ -11439,6 +11439,10 @@ function getElementProperties($element_type)
} elseif ($element_type == 'chargesociales') {
$classpath = 'compta/sociales/class';
$module = 'tax';
} elseif ($element_type == 'tva') {
$classpath = 'compta/tva/class';
$module = 'tax';
$subdir = '/vat';
}
if (empty($classfile)) {
@ -11451,6 +11455,8 @@ function getElementProperties($element_type)
$classpath = $module.'/class';
}
//print 'getElementProperties subdir='.$subdir;
// Set dir_output
if ($module && isset($conf->$module)) { // The generic case
if (!empty($conf->$module->multidir_output[$conf->entity])) {
@ -11468,6 +11474,7 @@ function getElementProperties($element_type)
} elseif ($element == 'invoice_supplier') {
$dir_output = $conf->fournisseur->facture->dir_output;
}
$dir_output .= $subdir;
$element_properties = array(
'module' => $module,