Merge branch 'develop' of https://github.com/Dolibarr/dolibarr into dev_accountancy
This commit is contained in:
commit
63f3ac2f2b
@ -23,6 +23,8 @@ Following changes may create regressions for some external modules, but were nec
|
||||
follow page naming conventions (so default filter/sort order features can also work).
|
||||
* The trigger ORDER_SUPPLIER_STATUS_ONPROCESS was renamed into ORDER_SUPPLIER_STATUS_ORDERED
|
||||
* The trigger ORDER_SUPPLIER_STATUS_RECEIVED_ALL was renamed into ORDER_SUPPLIER_STATUS_RECEIVED_COMPLETELY
|
||||
* The parameter note into method cloture() is added at end of private note (previously in v6, it replaced)
|
||||
* The parameter $user is now mandatory for method createFromOrder and createFromPropal.
|
||||
|
||||
|
||||
***** ChangeLog for 6.0.2 compared to 6.0.1 *****
|
||||
|
||||
@ -612,14 +612,14 @@ if (empty($reshook))
|
||||
// Close proposal
|
||||
else if ($action == 'setstatut' && $user->rights->propal->cloturer && ! GETPOST('cancel','alpha'))
|
||||
{
|
||||
if (! GETPOST('statut')) {
|
||||
if (! GETPOST('statut','int')) {
|
||||
setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("CloseAs")), null, 'errors');
|
||||
$action = 'statut';
|
||||
} else {
|
||||
// prevent browser refresh from closing proposal several times
|
||||
if ($object->statut == Propal::STATUS_VALIDATED)
|
||||
{
|
||||
$result=$object->cloture($user, GETPOST('statut','int'), GETPOST('note_private','alpha'));
|
||||
$result=$object->cloture($user, GETPOST('statut','int'), GETPOST('note_private','none'));
|
||||
if ($result < 0)
|
||||
{
|
||||
setEventMessages($object->error, $object->errors, 'errors');
|
||||
@ -1687,8 +1687,8 @@ if ($action == 'create')
|
||||
//Form to close proposal (signed or not)
|
||||
$formquestion = array(
|
||||
array('type' => 'select','name' => 'statut','label' => $langs->trans("CloseAs"),'values' => array(2=>$object->labelstatut [2],3=>$object->labelstatut [3])),
|
||||
//array('type' => 'other','name' => 'note_private', 'label' => $langs->trans("Note"),'value' => '<textarea cols="30" rows="' . ROWS_3 . '" wrap="soft" name="note_private" id="note_private">'.$object->note_private.'</textarea>'));
|
||||
array('type' => 'text', 'name' => 'note_private', 'label' => $langs->trans("Note"),'value' => $object->note_private));
|
||||
array('type' => 'text', 'name' => 'note_private', 'label' => $langs->trans("Note"),'value' => '') // Field to complete private note (not replace)
|
||||
);
|
||||
|
||||
if (! empty($conf->notification->enabled)) {
|
||||
require_once DOL_DOCUMENT_ROOT . '/core/class/notify.class.php';
|
||||
|
||||
@ -90,7 +90,7 @@ class Proposals extends DolibarrApi
|
||||
* @param string $sortorder Sort order
|
||||
* @param int $limit Limit for list
|
||||
* @param int $page Page number
|
||||
* @param string $thirdparty_ids Thirdparty ids to filter commercial proposal of. Example: '1' or '1,2,3' {@pattern /^[0-9,]*$/i}
|
||||
* @param string $thirdparty_ids Thirdparty ids to filter commercial proposal of. Example: '1' or '1,2,3' {@pattern /^2|3$/i}
|
||||
* @param string $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.ref:like:'SO-%') and (t.datec:<:'20160101')"
|
||||
* @return array Array of order objects
|
||||
*/
|
||||
@ -507,6 +507,49 @@ class Proposals extends DolibarrApi
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Close (Accept or refuse) a quote / commercial proposal
|
||||
*
|
||||
* @param int $id Commercial proposal ID
|
||||
* @param int $status Must be 2 (accepted) or 3 (refused) {@min 2}{@max 3}
|
||||
* @param string $note_private Add this mention at end of private note
|
||||
* @param int $notrigger Disabled triggers
|
||||
*
|
||||
* @url POST {id}/close
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
function close($id, $status, $note_private='', $notrigger=0)
|
||||
{
|
||||
if(! DolibarrApiAccess::$user->rights->propal->creer) {
|
||||
throw new RestException(401);
|
||||
}
|
||||
$result = $this->propal->fetch($id);
|
||||
if( ! $result ) {
|
||||
throw new RestException(404, 'Commercial Proposal not found');
|
||||
}
|
||||
|
||||
if( ! DolibarrApi::_checkAccessToResource('propal',$this->propal->id)) {
|
||||
throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
|
||||
}
|
||||
|
||||
$result = $this->propal->cloture(DolibarrApiAccess::$user, $status, $note_private, $notrigger);
|
||||
if ($result == 0) {
|
||||
throw new RestException(500, 'Error nothing done. May be object is already closed');
|
||||
}
|
||||
if ($result < 0) {
|
||||
throw new RestException(500, 'Error when closing Commercial Proposal: '.$this->propal->error);
|
||||
}
|
||||
|
||||
return array(
|
||||
'success' => array(
|
||||
'code' => 200,
|
||||
'message' => 'Commercial Proposal closed (Ref='.$this->propal->ref.')'
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Validate fields before create or update object
|
||||
*
|
||||
@ -526,6 +569,7 @@ class Proposals extends DolibarrApi
|
||||
return $propal;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Clean sensible object datas
|
||||
*
|
||||
|
||||
@ -1505,48 +1505,6 @@ class Propal extends CommonObject
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update value of extrafields on the proposal
|
||||
*
|
||||
* @param User $user Object user that modify
|
||||
* @return int <0 if ko, >0 if ok
|
||||
*/
|
||||
function update_extrafields($user)
|
||||
{
|
||||
global $conf, $hookmanager;
|
||||
|
||||
$action='update';
|
||||
$error = 0;
|
||||
|
||||
// Actions on extra fields (by external module or standard code)
|
||||
// TODO le hook fait double emploi avec le trigger !!
|
||||
$hookmanager->initHooks(array('propaldao'));
|
||||
$parameters=array('id'=>$this->id);
|
||||
$reshook=$hookmanager->executeHooks('insertExtraFields',$parameters,$this,$action); // Note that $action and $object may have been modified by some hooks
|
||||
if (empty($reshook))
|
||||
{
|
||||
if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) // For avoid conflicts if trigger used
|
||||
{
|
||||
$result=$this->insertExtraFields();
|
||||
if ($result < 0)
|
||||
{
|
||||
$error++;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if ($reshook < 0) $error++;
|
||||
|
||||
if (!$error)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Set status to validated
|
||||
*
|
||||
@ -2257,8 +2215,8 @@ class Propal extends CommonObject
|
||||
*
|
||||
* @param User $user Object user that close
|
||||
* @param int $statut Statut
|
||||
* @param string $note Comment
|
||||
* @param int $notrigger 1=Does not execute triggers, 0= execute triggers
|
||||
* @param string $note Complete private note with this note
|
||||
* @param int $notrigger 1=Does not execute triggers, 0=Execute triggers
|
||||
* @return int <0 if KO, >0 if OK
|
||||
*/
|
||||
function cloture($user, $statut, $note, $notrigger=0)
|
||||
@ -2270,8 +2228,10 @@ class Propal extends CommonObject
|
||||
|
||||
$this->db->begin();
|
||||
|
||||
$newprivatenote = dol_concatdesc($this->note_private, $note);
|
||||
|
||||
$sql = "UPDATE ".MAIN_DB_PREFIX."propal";
|
||||
$sql.= " SET fk_statut = ".$statut.", note_private = '".$this->db->escape($note)."', date_cloture='".$this->db->idate($now)."', fk_user_cloture=".$user->id;
|
||||
$sql.= " SET fk_statut = ".$statut.", note_private = '".$this->db->escape($newprivatenote)."', date_cloture='".$this->db->idate($now)."', fk_user_cloture=".$user->id;
|
||||
$sql.= " WHERE rowid = ".$this->id;
|
||||
|
||||
$resql=$this->db->query($sql);
|
||||
@ -2297,7 +2257,7 @@ class Propal extends CommonObject
|
||||
return -2;
|
||||
}
|
||||
}
|
||||
if ($statut == self::STATUS_BILLED)
|
||||
if ($statut == self::STATUS_BILLED) // Why this ?
|
||||
{
|
||||
$trigger_name='PROPAL_CLASSIFY_BILLED';
|
||||
}
|
||||
|
||||
@ -1077,11 +1077,12 @@ class Commande extends CommonOrder
|
||||
* Load an object from a proposal and create a new order into database
|
||||
*
|
||||
* @param Object $object Object source
|
||||
* @param User $user User making creation
|
||||
* @return int <0 if KO, 0 if nothing done, 1 if OK
|
||||
*/
|
||||
function createFromProposal($object)
|
||||
function createFromProposal($object, User $user)
|
||||
{
|
||||
global $conf,$user,$hookmanager;
|
||||
global $conf, $hookmanager;
|
||||
|
||||
dol_include_once('/core/class/extrafields.class.php');
|
||||
|
||||
@ -3048,48 +3049,6 @@ class Commande extends CommonOrder
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update value of extrafields on order
|
||||
*
|
||||
* @param User $user Object user that modify
|
||||
* @return int <0 if ko, >0 if ok
|
||||
*/
|
||||
function update_extrafields($user)
|
||||
{
|
||||
global $hookmanager, $conf;
|
||||
|
||||
$action='create';
|
||||
$error = 0;
|
||||
|
||||
// Actions on extra fields (by external module or standard code)
|
||||
// TODO le hook fait double emploi avec le trigger !!
|
||||
$hookmanager->initHooks(array('orderdao'));
|
||||
$parameters=array('id'=>$this->id);
|
||||
$reshook=$hookmanager->executeHooks('insertExtraFields',$parameters,$this,$action); // Note that $action and $object may have been modified by some hooks
|
||||
if (empty($reshook))
|
||||
{
|
||||
if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) // For avoid conflicts if trigger used
|
||||
{
|
||||
$result=$this->insertExtraFields();
|
||||
if ($result < 0)
|
||||
{
|
||||
$error++;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if ($reshook < 0) $error++;
|
||||
|
||||
if (!$error)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete the customer order
|
||||
*
|
||||
|
||||
@ -747,7 +747,7 @@ class Facture extends CommonInvoice
|
||||
* @param int $invertdetail Reverse sign of amounts for lines
|
||||
* @return int <0 if KO, >0 if OK
|
||||
*/
|
||||
function createFromCurrent($user,$invertdetail=0)
|
||||
function createFromCurrent(User $user, $invertdetail=0)
|
||||
{
|
||||
global $conf;
|
||||
|
||||
@ -948,11 +948,12 @@ class Facture extends CommonInvoice
|
||||
* Load an object from an order and create a new invoice into database
|
||||
*
|
||||
* @param Object $object Object source
|
||||
* @param User $user Object user
|
||||
* @return int <0 if KO, 0 if nothing done, 1 if OK
|
||||
*/
|
||||
function createFromOrder($object)
|
||||
function createFromOrder($object, User $user)
|
||||
{
|
||||
global $user,$hookmanager;
|
||||
global $hookmanager;
|
||||
|
||||
$error=0;
|
||||
|
||||
|
||||
@ -387,8 +387,12 @@ function checkUserAccessToObject($user, $featuresarray, $objectid=0, $tableandsh
|
||||
$nocheck = array('barcode','stock','fournisseur'); // No test
|
||||
$checkdefault = 'all other not already defined'; // Test on entity and link to third party. Not allowed if link is empty (Ex: invoice, orders...).
|
||||
|
||||
// If dbtable not defined, we use same name for table than module name
|
||||
if (empty($dbtablename)) $dbtablename = $feature;
|
||||
// If dbtablename not defined, we use same name for table than module name
|
||||
if (empty($dbtablename))
|
||||
{
|
||||
$dbtablename = $feature;
|
||||
$sharedelement = (! empty($params[1]) ? $params[1] : $dbtablename); // We change dbtablename, so we set sharedelement too.
|
||||
}
|
||||
|
||||
// Check permission for object with entity
|
||||
if (in_array($feature,$check))
|
||||
|
||||
@ -65,7 +65,7 @@ class InterfaceWorkflowManager extends DolibarrTriggers
|
||||
$newobject->context['origin'] = $object->element;
|
||||
$newobject->context['origin_id'] = $object->id;
|
||||
|
||||
$ret=$newobject->createFromProposal($object);
|
||||
$ret=$newobject->createFromProposal($object, $user);
|
||||
if ($ret < 0) { $this->error=$newobject->error; $this->errors[]=$newobject->error; }
|
||||
return $ret;
|
||||
}
|
||||
@ -84,7 +84,7 @@ class InterfaceWorkflowManager extends DolibarrTriggers
|
||||
$newobject->context['origin'] = $object->element;
|
||||
$newobject->context['origin_id'] = $object->id;
|
||||
|
||||
$ret=$newobject->createFromOrder($object);
|
||||
$ret=$newobject->createFromOrder($object, $user);
|
||||
if ($ret < 0) { $this->error=$newobject->error; $this->errors[]=$newobject->error; }
|
||||
return $ret;
|
||||
}
|
||||
@ -117,11 +117,11 @@ class InterfaceWorkflowManager extends DolibarrTriggers
|
||||
}
|
||||
}
|
||||
|
||||
// classify billed order & billed propososal
|
||||
// classify billed order & billed propososal
|
||||
if ($action == 'BILL_VALIDATE')
|
||||
{
|
||||
dol_syslog( "Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id );
|
||||
|
||||
|
||||
// First classify billed the order to allow the proposal classify process
|
||||
if (! empty($conf->commande->enabled) && ! empty($conf->global->WORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_ORDER))
|
||||
{
|
||||
@ -144,7 +144,7 @@ class InterfaceWorkflowManager extends DolibarrTriggers
|
||||
}
|
||||
return $ret;
|
||||
}
|
||||
|
||||
|
||||
// Second classify billed the proposal.
|
||||
if (! empty($conf->propal->enabled) && ! empty($conf->global->WORKFLOW_INVOICE_CLASSIFY_BILLED_PROPAL))
|
||||
{
|
||||
@ -167,7 +167,7 @@ class InterfaceWorkflowManager extends DolibarrTriggers
|
||||
}
|
||||
return $ret;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
// Invoice classify billed order
|
||||
@ -234,7 +234,7 @@ class InterfaceWorkflowManager extends DolibarrTriggers
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//Build array of quantity ordered by product
|
||||
if (is_array($order->lines) && count($order->lines)>0) {
|
||||
foreach($order->lines as $orderline) {
|
||||
|
||||
@ -893,7 +893,7 @@ else
|
||||
print '</td>';
|
||||
if (! $i) $totalarray['nbfield']++;
|
||||
}
|
||||
// Stock
|
||||
// Stock real
|
||||
if (! empty($arrayfields['p.stock']['checked']))
|
||||
{
|
||||
print '<td align="right">';
|
||||
@ -905,7 +905,7 @@ else
|
||||
print '</td>';
|
||||
if (! $i) $totalarray['nbfield']++;
|
||||
}
|
||||
// Stock
|
||||
// Stock virtual
|
||||
if (! empty($arrayfields['stock_virtual']['checked']))
|
||||
{
|
||||
print '<td align="right">';
|
||||
|
||||
@ -95,10 +95,10 @@ class Thirdparties extends DolibarrApi
|
||||
* @param int $mode Set to 1 to show only customers
|
||||
* Set to 2 to show only prospects
|
||||
* Set to 3 to show only those are not customer neither prospect
|
||||
* @param string $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.ref:like:'SO-%') and (t.date_creation:<:'20160101')"
|
||||
* @param string $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.nom:like:'TheCompany%') and (t.date_creation:<:'20160101')"
|
||||
* @return array Array of thirdparty objects
|
||||
*/
|
||||
function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 0, $page = 0, $mode=0, $sqlfilters = '') {
|
||||
function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $mode=0, $sqlfilters = '') {
|
||||
global $db, $conf;
|
||||
|
||||
$obj_ret = array();
|
||||
|
||||
@ -1304,44 +1304,6 @@ class SupplierProposal extends CommonObject
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update value of extrafields on the proposal
|
||||
*
|
||||
* @param User $user Object user that modify
|
||||
* @return int <0 if ko, >0 if ok
|
||||
*/
|
||||
function update_extrafields($user)
|
||||
{
|
||||
$action='update';
|
||||
|
||||
// Actions on extra fields (by external module or standard code)
|
||||
$hookmanager->initHooks(array('supplier_proposaldao'));
|
||||
$parameters=array('id'=>$this->id);
|
||||
$reshook=$hookmanager->executeHooks('insertExtraFields',$parameters,$this,$action); // Note that $action and $object may have been modified by some hooks
|
||||
if (empty($reshook))
|
||||
{
|
||||
if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) // For avoid conflicts if trigger used
|
||||
{
|
||||
$result=$this->insertExtraFields();
|
||||
if ($result < 0)
|
||||
{
|
||||
$error++;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if ($reshook < 0) $error++;
|
||||
|
||||
if (!$error)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Set status to validated
|
||||
*
|
||||
|
||||
@ -555,7 +555,7 @@ function createInvoice($authentication,$invoice)
|
||||
if (empty($invoice['id']) && empty($invoice['ref']) && empty($invoice['ref_ext'])) {
|
||||
$error++; $errorcode='KO'; $errorlabel="Invoice id or ref or ref_ext is mandatory.";
|
||||
}
|
||||
|
||||
|
||||
if (! $error)
|
||||
{
|
||||
$new_invoice=new Facture($db);
|
||||
@ -568,13 +568,13 @@ function createInvoice($authentication,$invoice)
|
||||
$new_invoice->statut= Facture::STATUS_DRAFT; // We start with status draft
|
||||
$new_invoice->fk_project=$invoice['project_id'];
|
||||
$new_invoice->date_creation=$now;
|
||||
|
||||
|
||||
//take mode_reglement and cond_reglement from thirdparty
|
||||
$soc = new Societe($db);
|
||||
$res=$soc->fetch($new_invoice->socid);
|
||||
if ($res > 0) {
|
||||
$new_invoice->mode_reglement_id = ! empty($invoice['payment_mode_id'])?$invoice['payment_mode_id']:$soc->mode_reglement_id;
|
||||
$new_invoice->cond_reglement_id = $soc->cond_reglement_id;
|
||||
$new_invoice->cond_reglement_id = $soc->cond_reglement_id;
|
||||
}
|
||||
else $new_invoice->mode_reglement_id = $invoice['payment_mode_id'];
|
||||
|
||||
@ -677,12 +677,12 @@ function createInvoiceFromOrder($authentication,$id_order='', $ref_order='', $re
|
||||
if (empty($id_order) && empty($ref_order) && empty($ref_ext_order)) {
|
||||
$error++; $errorcode='KO'; $errorlabel="order id or ref or ref_ext is mandatory.";
|
||||
}
|
||||
|
||||
|
||||
//////////////////////
|
||||
if (! $error)
|
||||
{
|
||||
$fuser->getrights();
|
||||
|
||||
|
||||
if ($fuser->rights->commande->lire)
|
||||
{
|
||||
$order=new Commande($db);
|
||||
@ -695,19 +695,19 @@ function createInvoiceFromOrder($authentication,$id_order='', $ref_order='', $re
|
||||
$error++;
|
||||
$errorcode='PERMISSION_DENIED'; $errorlabel=$order->socid.'User does not have permission for this request';
|
||||
}
|
||||
|
||||
|
||||
if(!$error)
|
||||
{
|
||||
|
||||
|
||||
$newobject=new Facture($db);
|
||||
$result = $newobject->createFromOrder($order);
|
||||
|
||||
$result = $newobject->createFromOrder($order, $fuser);
|
||||
|
||||
if ($result < 0)
|
||||
{
|
||||
$error++;
|
||||
dol_syslog("Webservice server_invoice:: invoice creation from order failed", LOG_ERR);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -722,7 +722,7 @@ function createInvoiceFromOrder($authentication,$id_order='', $ref_order='', $re
|
||||
$errorcode='PERMISSION_DENIED'; $errorlabel='User does not have permission for this request';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if ($error)
|
||||
{
|
||||
$objectresp = array('result'=>array('result_code' => $errorcode, 'result_label' => $errorlabel));
|
||||
@ -731,7 +731,7 @@ function createInvoiceFromOrder($authentication,$id_order='', $ref_order='', $re
|
||||
{
|
||||
$objectresp= array('result'=>array('result_code'=>'OK', 'result_label'=>''),'id'=>$newobject->id,'ref'=>$newobject->ref,'ref_ext'=>$newobject->ref_ext);
|
||||
}
|
||||
|
||||
|
||||
return $objectresp;
|
||||
}
|
||||
|
||||
@ -761,20 +761,20 @@ function updateInvoice($authentication,$invoice)
|
||||
if (empty($invoice['id']) && empty($invoice['ref']) && empty($invoice['ref_ext'])) {
|
||||
$error++; $errorcode='KO'; $errorlabel="Invoice id or ref or ref_ext is mandatory.";
|
||||
}
|
||||
|
||||
|
||||
if (! $error)
|
||||
{
|
||||
$objectfound=false;
|
||||
|
||||
|
||||
$object=new Facture($db);
|
||||
$result=$object->fetch($invoice['id'],$invoice['ref'],$invoice['ref_ext'], '');
|
||||
|
||||
|
||||
if (!empty($object->id)) {
|
||||
|
||||
|
||||
$objectfound=true;
|
||||
|
||||
|
||||
$db->begin();
|
||||
|
||||
|
||||
if (isset($invoice['status']))
|
||||
{
|
||||
if ($invoice['status'] == Facture::STATUS_DRAFT)
|
||||
@ -784,7 +784,7 @@ function updateInvoice($authentication,$invoice)
|
||||
if ($invoice['status'] == Facture::STATUS_VALIDATED)
|
||||
{
|
||||
$result = $object->validate($fuser);
|
||||
|
||||
|
||||
if ($result >= 0)
|
||||
{
|
||||
// Define output language
|
||||
@ -794,13 +794,13 @@ function updateInvoice($authentication,$invoice)
|
||||
}
|
||||
if ($invoice['status'] == Facture::STATUS_CLOSED)
|
||||
{
|
||||
$result = $object->set_paid($fuser,$invoice->close_code,$invoice->close_note);
|
||||
$result = $object->set_paid($fuser,$invoice->close_code,$invoice->close_note);
|
||||
}
|
||||
if ($invoice['status'] == Facture::STATUS_ABANDONED)
|
||||
$result = $object->set_canceled($fuser,$invoice->close_code,$invoice->close_note);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if ((! $error) && ($objectfound))
|
||||
{
|
||||
$db->commit();
|
||||
@ -823,12 +823,12 @@ function updateInvoice($authentication,$invoice)
|
||||
$errorlabel='Invoice id='.$invoice['id'].' ref='.$invoice['ref'].' ref_ext='.$invoice['ref_ext'].' cannot be found';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if ($error)
|
||||
{
|
||||
$objectresp = array('result'=>array('result_code' => $errorcode, 'result_label' => $errorlabel));
|
||||
}
|
||||
|
||||
|
||||
return $objectresp;
|
||||
}
|
||||
|
||||
|
||||
@ -172,7 +172,7 @@ class BuildDocTest extends PHPUnit_Framework_TestCase
|
||||
$localobjectcom->initAsSpecimen();
|
||||
|
||||
$localobject=new Facture($this->savdb);
|
||||
$localobject->createFromOrder($localobjectcom);
|
||||
$localobject->createFromOrder($localobjectcom, $user);
|
||||
$localobject->date_lim_reglement = dol_now() + 3600 * 24 *30;
|
||||
|
||||
// Crabe (english)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user