mirror of
https://github.com/Dolibarr/dolibarr.git
synced 2025-02-20 13:46:52 +01:00
NEW contract signed status update (#30779)
* Moved signed status constants to array dictionary * Added getLibSignedStatus & getSignedStatusLocalisedArray methods * Updated fetch & create methods for signed_status * Added signed status to status badge * Updated signed_status module builder field * Added object context signed status for action trigger * Added signed status to contract list * Fixed signed status for contract list * Added sign, unsign, confirm_sign, confirm_unsign actions. Added sign button. * Fixed old contract without signed status * Added contract modify notification * Added contract signed status update * Updated EN localizations * Fixed contract notification administration * Fixed notification message * Fixed contract status badge * Fixed langs * Fixed langs key * Fixed duplicate localization
This commit is contained in:
parent
4b1b0084c9
commit
fb6677010d
|
|
@ -33,7 +33,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
|
|||
require_once DOL_DOCUMENT_ROOT.'/core/triggers/interface_50_modNotification_Notification.class.php';
|
||||
|
||||
// Load translation files required by the page
|
||||
$langs->loadLangs(array('admin', 'other', 'orders', 'propal', 'bills', 'errors', 'mails'));
|
||||
$langs->loadLangs(array('admin', 'other', 'orders', 'propal', 'bills', 'errors', 'mails', 'contracts'));
|
||||
|
||||
// Security check
|
||||
if (!$user->admin) {
|
||||
|
|
@ -295,6 +295,8 @@ foreach ($listofnotifiedevents as $notifiedevent) {
|
|||
$elementLabel = $langs->trans('Shipping');
|
||||
} elseif ($notifiedevent['elementtype'] == 'expensereport' || $notifiedevent['elementtype'] == 'expense_report') {
|
||||
$elementLabel = $langs->trans('ExpenseReport');
|
||||
} elseif ($notifiedevent['elementtype'] == 'contrat') {
|
||||
$elementLabel = $langs->trans('Contract');
|
||||
}
|
||||
|
||||
if ($notifiedevent['elementtype'] == 'propal') {
|
||||
|
|
@ -315,6 +317,8 @@ foreach ($listofnotifiedevents as $notifiedevent) {
|
|||
$model = 'invoice_supplier_send';
|
||||
} elseif ($notifiedevent['elementtype'] == 'member') {
|
||||
$model = 'member';
|
||||
} elseif ($notifiedevent['elementtype'] == 'contrat') {
|
||||
$model = 'contract_send';
|
||||
}
|
||||
|
||||
$constantes[$notifiedevent['code'].'_TEMPLATE'] = array('type'=>'emailtemplate:'.$model, 'label'=>$label);
|
||||
|
|
@ -435,11 +439,14 @@ foreach ($listofnotifiedevents as $notifiedevent) {
|
|||
} elseif ($notifiedevent['elementtype'] == 'expensereport' || $notifiedevent['elementtype'] == 'expense_report') {
|
||||
$elementPicto = 'expensereport';
|
||||
$elementLabel = $langs->trans('ExpenseReport');
|
||||
} elseif ($notifiedevent['elementtype'] == 'contrat') {
|
||||
$elementPicto = 'contract';
|
||||
$elementLabel = $langs->trans('Contract');
|
||||
} elseif ($notifiedevent['elementtype'] == 'agenda') {
|
||||
$elementPicto = 'action';
|
||||
}
|
||||
|
||||
$labelfortrigger = 'AmountHT';
|
||||
$labelfortrigger = 'AmountHT';
|
||||
$codehasnotrigger = 0;
|
||||
if (preg_match('/^(ACTION|HOLIDAY)/', $notifiedevent['code'])) {
|
||||
$codehasnotrigger++;
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@ if (isModEnabled('project')) {
|
|||
require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
|
||||
|
||||
// Load translation files required by the page
|
||||
$langs->loadLangs(array("contracts", "orders", "companies", "bills", "products", 'compta'));
|
||||
$langs->loadLangs(array("contracts", "orders", "companies", "bills", "products", 'compta', 'propal'));
|
||||
|
||||
$action = GETPOST('action', 'aZ09');
|
||||
$confirm = GETPOST('confirm', 'alpha');
|
||||
|
|
@ -175,6 +175,22 @@ if (empty($reshook)) {
|
|||
} else {
|
||||
setEventMessages($object->error, $object->errors, 'errors');
|
||||
}
|
||||
} elseif ($action == 'confirm_sign' && $confirm == 'yes' && $user->hasRight('contract', 'creer')) {
|
||||
$result = $object->setSignedStatus($user, GETPOSTINT('signed_status'), 0, 'CONTRACT_MODIFY');
|
||||
if ($result >= 0) {
|
||||
header('Location: ' . $_SERVER["PHP_SELF"] . '?id=' . $object->id);
|
||||
exit;
|
||||
} else {
|
||||
$mesg = $object->error;
|
||||
}
|
||||
} elseif ($action == 'confirm_unsign' && $confirm == 'yes' && $user->hasRight('contract', 'creer')) {
|
||||
$result = $object->setSignedStatus($user, $object::SIGNED_STATUSES['STATUS_NO_SIGNATURE'], 0, 'CONTRACT_MODIFY');
|
||||
if ($result >= 0) {
|
||||
header('Location: ' . $_SERVER["PHP_SELF"] . '?id=' . $object->id);
|
||||
exit;
|
||||
} else {
|
||||
$mesg = $object->error;
|
||||
}
|
||||
} elseif ($action == 'confirm_closeline' && $confirm == 'yes' && $permissiontoactivate) {
|
||||
$date_end = '';
|
||||
if (GETPOST('endmonth') && GETPOST('endday') && GETPOST('endyear')) {
|
||||
|
|
@ -1363,6 +1379,31 @@ if ($action == 'create') {
|
|||
// Clone confirmation
|
||||
$formquestion = array(array('type' => 'other', 'name' => 'socid', 'label' => $langs->trans("SelectThirdParty"), 'value' => $form->select_company(GETPOSTINT('socid'), 'socid', $filter)));
|
||||
$formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('ToClone'), $langs->trans('ConfirmCloneContract', $object->ref), 'confirm_clone', $formquestion, 'yes', 1);
|
||||
} elseif ($action == 'sign') {
|
||||
$text = $langs->trans('ConfirmSignContract');
|
||||
if (isModEnabled('notification')) {
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/class/notify.class.php';
|
||||
$notify = new Notify($db);
|
||||
$text .= '<br>';
|
||||
$text .= $notify->confirmMessage('CONTRACT_MODIFY', $object->socid, $object);
|
||||
}
|
||||
$formquestion = [];
|
||||
$formquestion[] = [
|
||||
'type' => 'select',
|
||||
'name' => 'signed_status',
|
||||
'label' => '<span class="fieldrequired">'.$langs->trans('SignStatus').'</span>',
|
||||
'values' => $object->getSignedStatusLocalisedArray()
|
||||
];
|
||||
$formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('SignContract'), $text, 'confirm_sign', $formquestion, 0, 1);
|
||||
} elseif ($action == 'unsign') {
|
||||
$text = $langs->trans('ConfirmUnsignContract');
|
||||
if (isModEnabled('notification')) {
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/class/notify.class.php';
|
||||
$notify = new Notify($db);
|
||||
$text .= '<br>';
|
||||
$text .= $notify->confirmMessage('CONTRACT_MODIFY', $object->socid, $object);
|
||||
}
|
||||
$formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('UnsignContract'), $text, 'confirm_unsign', '', 0, 1);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -2246,6 +2287,15 @@ if ($action == 'create') {
|
|||
}
|
||||
}
|
||||
|
||||
// Sign
|
||||
if ($object->status > Contrat::STATUS_DRAFT) {
|
||||
if ($object->signed_status != Contrat::SIGNED_STATUSES['STATUS_SIGNED_ALL']) {
|
||||
print '<div class="inline-block divButAction"><a class="butAction" href="' . $_SERVER["PHP_SELF"] . '?id=' . $object->id . '&action=sign&token=' . newToken() . '">' . $langs->trans("ContractSign") . '</a></div>';
|
||||
} else {
|
||||
print '<div class="inline-block divButAction"><a class="butAction" href="' . $_SERVER["PHP_SELF"] . '?id=' . $object->id . '&action=unsign&token=' . newToken() . '">' . $langs->trans("ContractUnsign") . '</a></div>';
|
||||
}
|
||||
}
|
||||
|
||||
// Clone
|
||||
if ($user->hasRight('contrat', 'creer')) {
|
||||
unset($params['attr']['title']);
|
||||
|
|
|
|||
|
|
@ -238,7 +238,7 @@ class Contrat extends CommonObject
|
|||
'tms' => array('type' => 'timestamp', 'label' => 'DateModification', 'enabled' => 1, 'visible' => -1, 'notnull' => 1, 'position' => 35),
|
||||
'datec' => array('type' => 'datetime', 'label' => 'DateCreation', 'enabled' => 1, 'visible' => -1, 'position' => 40),
|
||||
'date_contrat' => array('type' => 'datetime', 'label' => 'Date contrat', 'enabled' => 1, 'visible' => -1, 'position' => 45),
|
||||
'signed_status' => array('type' => 'smallint(6)', 'label' => 'SignedStatus', 'enabled' => 1, 'visible' => -1, 'position' => 50, 'arrayofkeyval' => array(0 => 'NoSignature', 1 => 'SignedSender', 2 => 'SignedReceiver', 9 => 'SignedAll')),
|
||||
'signed_status' => array('type' => 'smallint(6)', 'label' => 'SignedStatus', 'enabled' => 1, 'visible' => -1, 'position' => 50, 'arrayofkeyval' => array(0 => 'NoSignature', 1 => 'SignedSender', 2 => 'SignedReceiver', 3 => 'SignedReceiverOnline', 9 => 'SignedAll')),
|
||||
'fk_soc' => array('type' => 'integer:Societe:societe/class/societe.class.php', 'label' => 'ThirdParty', 'enabled' => 'isModEnabled("societe")', 'visible' => -1, 'notnull' => 1, 'position' => 70),
|
||||
'fk_projet' => array('type' => 'integer:Project:projet/class/project.class.php:1:(fk_statut:=:1)', 'label' => 'Project', 'enabled' => "isModEnabled('project')", 'visible' => -1, 'position' => 75),
|
||||
'fk_commercial_signature' => array('type' => 'integer:User:user/class/user.class.php', 'label' => 'SaleRepresentative Signature', 'enabled' => 1, 'visible' => -1, 'position' => 80),
|
||||
|
|
@ -259,26 +259,16 @@ class Contrat extends CommonObject
|
|||
const STATUS_VALIDATED = 1;
|
||||
const STATUS_CLOSED = 2;
|
||||
|
||||
/*
|
||||
* No signature
|
||||
/**
|
||||
* Signed statuses dictionary. Label used as key for string localizations.
|
||||
*/
|
||||
const STATUS_NO_SIGNATURE = 0;
|
||||
|
||||
/*
|
||||
* Signed by sender
|
||||
*/
|
||||
const STATUS_SIGNED_SENDER = 1;
|
||||
|
||||
/*
|
||||
* Signed by receiver
|
||||
*/
|
||||
const STATUS_SIGNED_RECEIVER = 2;
|
||||
|
||||
/*
|
||||
* Signed by all
|
||||
*/
|
||||
const STATUS_SIGNED_ALL = 9; // To handle future kind of signature (ex: tripartite contract)
|
||||
|
||||
const SIGNED_STATUSES = [
|
||||
'STATUS_NO_SIGNATURE' => 0,
|
||||
'STATUS_SIGNED_SENDER' => 1,
|
||||
'STATUS_SIGNED_RECEIVER' => 2,
|
||||
'STATUS_SIGNED_RECEIVER_ONLINE' => 3,
|
||||
'STATUS_SIGNED_ALL' => 9 // To handle future kind of signature (ex: tripartite contract)
|
||||
];
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
|
|
@ -697,6 +687,7 @@ class Contrat extends CommonObject
|
|||
$sql .= " ref_supplier, ref_customer,";
|
||||
$sql .= " ref_ext,";
|
||||
$sql .= " entity,";
|
||||
$sql .= " signed_status,";
|
||||
$sql .= " date_contrat as datecontrat,";
|
||||
$sql .= " fk_user_author,";
|
||||
$sql .= " fk_projet as fk_project,";
|
||||
|
|
@ -738,6 +729,7 @@ class Contrat extends CommonObject
|
|||
$this->entity = $obj->entity;
|
||||
$this->statut = $obj->status;
|
||||
$this->status = $obj->status;
|
||||
$this->signed_status = $obj->signed_status;
|
||||
|
||||
$this->date_contrat = $this->db->jdate($obj->datecontrat);
|
||||
$this->date_creation = $this->db->jdate($obj->datecontrat);
|
||||
|
|
@ -1017,7 +1009,7 @@ class Contrat extends CommonObject
|
|||
// Insert contract
|
||||
$sql = "INSERT INTO ".MAIN_DB_PREFIX."contrat (datec, fk_soc, fk_user_author, date_contrat,";
|
||||
$sql .= " fk_commercial_signature, fk_commercial_suivi, fk_projet,";
|
||||
$sql .= " ref, entity, note_private, note_public, ref_customer, ref_supplier, ref_ext)";
|
||||
$sql .= " ref, entity, signed_status, note_private, note_public, ref_customer, ref_supplier, ref_ext)";
|
||||
$sql .= " VALUES ('".$this->db->idate($now)."', ".((int) $this->socid).", ".((int) $user->id);
|
||||
$sql .= ", ".(dol_strlen($this->date_contrat) != 0 ? "'".$this->db->idate($this->date_contrat)."'" : "NULL");
|
||||
$sql .= ",".($this->commercial_signature_id > 0 ? ((int) $this->commercial_signature_id) : "NULL");
|
||||
|
|
@ -1025,6 +1017,7 @@ class Contrat extends CommonObject
|
|||
$sql .= ",".($this->fk_project > 0 ? ((int) $this->fk_project) : "NULL");
|
||||
$sql .= ", ".(dol_strlen($this->ref) <= 0 ? "null" : "'".$this->db->escape($this->ref)."'");
|
||||
$sql .= ", ".((int) $conf->entity);
|
||||
$sql .= ", ".((int) $this->signed_status);
|
||||
$sql .= ", ".(!empty($this->note_private) ? ("'".$this->db->escape($this->note_private)."'") : "NULL");
|
||||
$sql .= ", ".(!empty($this->note_public) ? ("'".$this->db->escape($this->note_public)."'") : "NULL");
|
||||
$sql .= ", ".(!empty($this->ref_customer) ? ("'".$this->db->escape($this->ref_customer)."'") : "NULL");
|
||||
|
|
@ -2001,6 +1994,7 @@ class Contrat extends CommonObject
|
|||
$text .= ($mode == 7 ? '</span><span class="nowraponall">' : '');
|
||||
$text .= ($mode != 7 || $this->nbofservicesclosed > 0) ? ($this->nbofservicesclosed.ContratLigne::LibStatut(5, 3, -1, 'class="marginleft2"')) : '';
|
||||
$text .= ($mode == 7 ? '</span>' : '');
|
||||
$text .= $this->signed_status != '' ? ' '.$this->getLibSignedStatus(5) : '';
|
||||
return $text;
|
||||
} else {
|
||||
return dolGetStatus($this->labelStatus[$status], $this->labelStatusShort[$status], '', $statusType, $mode);
|
||||
|
|
@ -2934,8 +2928,6 @@ class Contrat extends CommonObject
|
|||
return $return;
|
||||
}
|
||||
|
||||
// @Todo getLibSignedStatus, LibSignedStatus
|
||||
|
||||
/**
|
||||
* Set signed status
|
||||
*
|
||||
|
|
@ -2947,6 +2939,69 @@ class Contrat extends CommonObject
|
|||
*/
|
||||
public function setSignedStatus(User $user, int $status = 0, int $notrigger = 0, $triggercode = ''): int
|
||||
{
|
||||
global $langs;
|
||||
$langs->loadLangs(array('contracts', 'commercial'));
|
||||
$this->signed_status = $status;
|
||||
$this->context['signature'] = $status;
|
||||
switch ($status) {
|
||||
case 0:
|
||||
$this->context['actionmsg2'] = $langs->transnoentitiesnoconv('ContractUnsignedInDolibarr');
|
||||
break;
|
||||
case 1:
|
||||
$this->context['actionmsg2'] = $langs->transnoentitiesnoconv('SignedSender');
|
||||
break;
|
||||
case 2:
|
||||
$this->context['actionmsg2'] = $langs->transnoentitiesnoconv('SignedReceiver');
|
||||
break;
|
||||
case 3:
|
||||
$this->context['actionmsg2'] = $langs->transnoentitiesnoconv('SignedReceiverOnline');
|
||||
break;
|
||||
case 9:
|
||||
$this->context['actionmsg2'] = $langs->transnoentitiesnoconv('SignedAll');
|
||||
break;
|
||||
}
|
||||
return $this->setSignedStatusCommon($user, $status, $notrigger, $triggercode);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the label for signed status
|
||||
*
|
||||
* @param int $mode 0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto
|
||||
* @return string Label
|
||||
*/
|
||||
public function getLibSignedStatus(int $mode = 0): string
|
||||
{
|
||||
global $langs;
|
||||
$langs->load("commercial");
|
||||
$list_signed_status = $this->getSignedStatusLocalisedArray();
|
||||
$signed_status_label = $this->signed_status != '' ? $list_signed_status[$this->signed_status] : '';
|
||||
$signed_status_label_short = $this->signed_status != '' ? $list_signed_status[$this->signed_status] : '';
|
||||
$signed_status_code = 'status'.$this->signed_status;
|
||||
return dolGetStatus($signed_status_label, $signed_status_label_short, '', $signed_status_code, $mode);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an array of signed statuses with associated localized labels
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getSignedStatusLocalisedArray(): array
|
||||
{
|
||||
global $langs;
|
||||
$langs->load("commercial");
|
||||
|
||||
$l10n_signed_status_labels = [
|
||||
self::SIGNED_STATUSES['STATUS_NO_SIGNATURE'] => 'NoSignature',
|
||||
self::SIGNED_STATUSES['STATUS_SIGNED_SENDER'] => 'SignedSender',
|
||||
self::SIGNED_STATUSES['STATUS_SIGNED_RECEIVER'] => 'SignedReceiver',
|
||||
self::SIGNED_STATUSES['STATUS_SIGNED_RECEIVER_ONLINE'] => 'SignedReceiverOnline',
|
||||
self::SIGNED_STATUSES['STATUS_SIGNED_ALL'] => 'SignedAll'
|
||||
];
|
||||
|
||||
$l10n_signed_status = [];
|
||||
foreach (self::SIGNED_STATUSES as $signed_status_code) {
|
||||
$l10n_signed_status[$signed_status_code] = $langs->transnoentitiesnoconv($l10n_signed_status_labels[$signed_status_code]);
|
||||
}
|
||||
return $l10n_signed_status;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -71,6 +71,7 @@ $search_ref_customer = GETPOST('search_ref_customer', 'alpha');
|
|||
$search_ref_supplier = GETPOST('search_ref_supplier', 'alpha');
|
||||
$search_all = (GETPOST('search_all', 'alphanohtml') != '') ? GETPOST('search_all', 'alphanohtml') : GETPOST('sall', 'alphanohtml');
|
||||
$search_status = GETPOST('search_status', 'alpha');
|
||||
$search_signed_status = GETPOST('search_signed_status', 'alpha');
|
||||
$search_user = GETPOST('search_user', 'intcomma');
|
||||
$search_sale = GETPOST('search_sale', 'intcomma');
|
||||
$search_product_category = GETPOST('search_product_category', 'intcomma');
|
||||
|
|
@ -194,6 +195,7 @@ $arrayfields = array(
|
|||
'c.tms' => array('label' => $langs->trans("DateModificationShort"), 'checked' => 0, 'position' => 500),
|
||||
'lower_planned_end_date' => array('label' => $langs->trans("LowerDateEndPlannedShort"), 'checked' => 1, 'position' => 900, 'help' => $langs->trans("LowerDateEndPlannedShort")),
|
||||
'status' => array('label' => $langs->trans("Status"), 'checked' => 1, 'position' => 1000),
|
||||
'c.signed_status' =>array('label' => $langs->trans('SignedStatus'), 'checked' => 0, 'position' => 1001),
|
||||
);
|
||||
// Extra fields
|
||||
include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_array_fields.tpl.php';
|
||||
|
|
@ -277,6 +279,7 @@ if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x'
|
|||
$search_date_modif_endday = "";
|
||||
$search_date_modif_end = "";
|
||||
$search_status = "";
|
||||
$search_signed_status = '';
|
||||
$toselect = array();
|
||||
$search_type_thirdparty = '';
|
||||
$searchCategoryCustomerList = array();
|
||||
|
|
@ -307,7 +310,7 @@ $now = dol_now();
|
|||
$title = "";
|
||||
|
||||
$sql = 'SELECT';
|
||||
$sql .= " c.rowid, c.ref, c.datec as date_creation, c.tms as date_modification, c.date_contrat, c.statut, c.ref_customer, c.ref_supplier, c.note_private, c.note_public, c.entity,";
|
||||
$sql .= " c.rowid, c.ref, c.datec as date_creation, c.tms as date_modification, c.date_contrat, c.statut, c.ref_customer, c.ref_supplier, c.note_private, c.note_public, c.entity, c.signed_status,";
|
||||
$sql .= ' s.rowid as socid, s.nom as name, s.name_alias, s.email, s.town, s.zip, s.fk_pays as country_id, s.client, s.code_client, s.status as company_status, s.logo as company_logo,';
|
||||
$sql .= " typent.code as typent_code,";
|
||||
$sql .= " state.code_departement as state_code, state.nom as state_name,";
|
||||
|
|
@ -489,6 +492,9 @@ if ($search_date_modif_start) {
|
|||
if ($search_date_modif_end) {
|
||||
$sql .= " AND c.tms <= '".$db->idate($search_date_modif_end)."'";
|
||||
}
|
||||
if ($search_signed_status != '' && $search_signed_status >= 0) {
|
||||
$sql .= ' AND c.signed_status = '.urlencode($search_signed_status);
|
||||
}
|
||||
|
||||
// Add where from extra fields
|
||||
include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_sql.tpl.php';
|
||||
|
|
@ -713,6 +719,9 @@ if ($search_dfyear > 0) {
|
|||
if ($search_dfmonth > 0) {
|
||||
$param .= '&search_dfmonth='.urlencode((string) ($search_dfmonth));
|
||||
}
|
||||
if ($search_signed_status != '' && $search_signed_status >= 0) {
|
||||
$param .= '&search_signed_status='.urlencode($search_signed_status);
|
||||
}
|
||||
if ($search_sale > 0) {
|
||||
$param .= '&search_sale='.urlencode($search_sale);
|
||||
}
|
||||
|
|
@ -933,6 +942,13 @@ if (!empty($arrayfields['c.date_contrat']['checked'])) {
|
|||
print '</div>';
|
||||
print '</td>';
|
||||
}
|
||||
// Signed status
|
||||
if (!empty($arrayfields['c.signed_status']['checked'])) {
|
||||
print '<td class="liste_titre center">';
|
||||
$list_signed_status = $object->getSignedStatusLocalisedArray();
|
||||
print $form->selectarray('search_signed_status', $list_signed_status, $search_signed_status, 1, 0, 0, '', 1, 0, 0, '', 'search_status');
|
||||
print '</td>';
|
||||
}
|
||||
// Extra fields
|
||||
include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php';
|
||||
|
||||
|
|
@ -1045,6 +1061,10 @@ if (!empty($arrayfields['c.date_contrat']['checked'])) {
|
|||
print_liste_field_titre($arrayfields['c.date_contrat']['label'], $_SERVER["PHP_SELF"], "c.date_contrat", "", $param, '', $sortfield, $sortorder, 'center ');
|
||||
$totalarray['nbfield']++; // For the column action
|
||||
}
|
||||
if (!empty($arrayfields['c.signed_status']['checked'])) {
|
||||
print_liste_field_titre($arrayfields['c.signed_status']['label'], $_SERVER["PHP_SELF"], "c.signed_status", "", $param, '', $sortfield, $sortorder, 'center ');
|
||||
$totalarray['nbfield']++;
|
||||
}
|
||||
// Extra fields
|
||||
include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php';
|
||||
// Hook fields
|
||||
|
|
@ -1103,6 +1123,7 @@ while ($i < $imaxinloop) {
|
|||
$contracttmp->nbofservicesopened = $obj->nb_running;
|
||||
$contracttmp->nbofservicesexpired = $obj->nb_expired;
|
||||
$contracttmp->nbofservicesclosed = $obj->nb_closed;
|
||||
$contracttmp->signed_status = $obj->signed_status;
|
||||
|
||||
$socstatic->id = $obj->socid;
|
||||
$socstatic->name = $obj->name;
|
||||
|
|
@ -1296,6 +1317,13 @@ while ($i < $imaxinloop) {
|
|||
if (!empty($arrayfields['c.date_contrat']['checked'])) {
|
||||
print '<td class="center">'.dol_print_date($db->jdate($obj->date_contrat), 'day', 'tzserver').'</td>';
|
||||
}
|
||||
// Signed Status
|
||||
if (!empty($arrayfields['c.signed_status']['checked'])) {
|
||||
print '<td class="center">'.$contracttmp->getLibSignedStatus(5).'</td>';
|
||||
if (!$i) {
|
||||
$totalarray['nbfield']++;
|
||||
}
|
||||
}
|
||||
// Extra fields
|
||||
include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php';
|
||||
// Fields from hook
|
||||
|
|
|
|||
|
|
@ -434,6 +434,8 @@ if ($action == "importSignature") {
|
|||
// Document format not supported to insert online signature.
|
||||
// We should just create an image file with the signature.
|
||||
}
|
||||
$user = new User($db);
|
||||
$object->setSignedStatus($user, $object::SIGNED_STATUSES['STATUS_SIGNED_RECEIVER_ONLINE'], 0, 'CONTRACT_MODIFY');
|
||||
}
|
||||
} elseif ($mode == 'fichinter') {
|
||||
require_once DOL_DOCUMENT_ROOT . '/fichinter/class/fichinter.class.php';
|
||||
|
|
|
|||
|
|
@ -149,7 +149,8 @@ class Notify
|
|||
'EXPENSE_REPORT_APPROVE',
|
||||
'HOLIDAY_VALIDATE',
|
||||
'HOLIDAY_APPROVE',
|
||||
'ACTION_CREATE'
|
||||
'ACTION_CREATE',
|
||||
'CONTRACT_MODIFY'
|
||||
);
|
||||
|
||||
/**
|
||||
|
|
@ -904,6 +905,13 @@ class Notify
|
|||
$object_type = 'action';
|
||||
$mesg = $outputlangs->transnoentitiesnoconv("EMailTextActionAdded", $link);
|
||||
break;
|
||||
case 'CONTRACT_MODIFY':
|
||||
$link = '<a href="'.$urlwithroot.'/contrat/card.php?id='.$object->id.'&entity='.$object->entity.'">'.$newref.'</a>';
|
||||
$context_info = array_key_exists('signature', $object->context) ? $object->getLibSignedStatus() : '';
|
||||
$dir_output = $conf->contract->multidir_output;
|
||||
$object_type = 'contract';
|
||||
$mesg = $outputlangs->transnoentitiesnoconv("EMailTextContractModified", $link, $context_info);
|
||||
break;
|
||||
default:
|
||||
$object_type = $object->element;
|
||||
$dir_output = $conf->$object_type->multidir_output[$object->entity ? $object->entity : $conf->entity]."/".get_exdir(0, 0, 0, 1, $object, $object_type);
|
||||
|
|
@ -1202,6 +1210,13 @@ class Notify
|
|||
$object_type = 'action';
|
||||
$mesg = $langs->transnoentitiesnoconv("EMailTextActionAdded", $link);
|
||||
break;
|
||||
case 'CONTRACT_MODIFY':
|
||||
$link = '<a href="'.$urlwithroot.'/contrat/card.php?id='.$object->id.'&entity='.$object->entity.'">'.$newref.'</a>';
|
||||
$context_info = array_key_exists('signature', $object->context) ? $object->getLibSignedStatus() : '';
|
||||
$dir_output = $conf->contract->multidir_output;
|
||||
$object_type = 'contrat';
|
||||
$mesg = $langs->transnoentitiesnoconv("EMailTextContractModified", $link, $context_info);
|
||||
break;
|
||||
default:
|
||||
$object_type = $object->element;
|
||||
$dir_output = $conf->$object_type->multidir_output[$object->entity ? $object->entity : $conf->entity]."/".get_exdir(0, 0, 0, 1, $object, $object_type);
|
||||
|
|
|
|||
|
|
@ -36,10 +36,18 @@ ActivateAllOnContract=Activate all services
|
|||
CloseAContract=Close a contract
|
||||
ConfirmDeleteAContract=Are you sure you want to delete this contract and all its services?
|
||||
ConfirmValidateContract=Are you sure you want to validate this contract under name <b>%s</b>?
|
||||
ConfirmSignContract=Are you sure you want to set this contract as signed ?
|
||||
ConfirmUnsignContract=Are you sure you want to set this contract as unsigned ?
|
||||
ConfirmActivateAllOnContract=This will open all services (not yet active). Are you sure you want to open all services?
|
||||
ConfirmCloseContract=This will close all services (expired or not). Are you sure you want to close this contract?
|
||||
ConfirmCloseService=Are you sure you want to close this service with date <b>%s</b>?
|
||||
ValidateAContract=Validate a contract
|
||||
UnsignContract=Unsign contract
|
||||
ContractSign=Set Signed
|
||||
ContractUnsign=Set Unsigned
|
||||
ContractSignedInDolibarr=Contract signed
|
||||
ContractSignedOnline=Contract signed online
|
||||
ContractUnsignedInDolibarr=Contract unsigned
|
||||
ActivateService=Activate service
|
||||
ConfirmActivateService=Are you sure you want to activate this service with date <b>%s</b>?
|
||||
RefContract=Contract reference
|
||||
|
|
|
|||
|
|
@ -70,6 +70,7 @@ Notify_BILL_SUPPLIER_VALIDATE=Vendor invoice validated
|
|||
Notify_BILL_SUPPLIER_PAYED=Vendor invoice paid
|
||||
Notify_BILL_SUPPLIER_SENTBYMAIL=Vendor invoice sent by mail
|
||||
Notify_BILL_SUPPLIER_CANCELED=Vendor invoice canceled
|
||||
Notify_CONTRACT_MODIFY=Contract modified
|
||||
Notify_CONTRACT_VALIDATE=Contract validated
|
||||
Notify_FICHINTER_VALIDATE=Intervention validated
|
||||
Notify_FICHINTER_MODIFY=Intervention modified
|
||||
|
|
@ -234,6 +235,7 @@ EMailTextExpenseReportApproved=Expense report %s has been approved.
|
|||
EMailTextHolidayValidated=Leave request %s has been validated.
|
||||
EMailTextHolidayApproved=Leave request %s has been approved.
|
||||
EMailTextActionAdded=The action %s has been added to the Agenda.
|
||||
EMailTextContractModified=The contract %s has been modified. %s
|
||||
ImportedWithSet=Importation data set
|
||||
DolibarrNotification=Automatic notification
|
||||
ResizeDesc=Enter new width <b>OR</b> new height. Ratio will be kept during resizing...
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user