Skip to content

Commit

Permalink
Add API "close" for proposals
Browse files Browse the repository at this point in the history
Standardize code
  • Loading branch information
eldy committed Oct 18, 2017
1 parent 347883b commit d40dda8
Show file tree
Hide file tree
Showing 8 changed files with 85 additions and 162 deletions.
5 changes: 3 additions & 2 deletions htdocs/comm/propal/card.php
Expand Up @@ -612,14 +612,15 @@
// 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'));
$newprivatenote = dol_concatdesc($object->note_private, GETPOST('note_private','alpha'));
$result=$object->cloture($user, GETPOST('statut','int'), $newprivatenote);
if ($result < 0)
{
setEventMessages($object->error, $object->errors, 'errors');
Expand Down
44 changes: 43 additions & 1 deletion htdocs/comm/propal/class/api_proposals.class.php
Expand Up @@ -90,7 +90,7 @@ function get($id)
* @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
*/
Expand Down Expand Up @@ -507,6 +507,48 @@ function validate($id, $notrigger=0)
);
}

/**
* 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 to the 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
*
Expand Down
46 changes: 2 additions & 44 deletions htdocs/comm/propal/class/propal.class.php
Expand Up @@ -1505,48 +1505,6 @@ function fetch_lines($only_product=0)
}
}

/**
* 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
*
Expand Down Expand Up @@ -2258,7 +2216,7 @@ function reopen($user, $statut, $note='', $notrigger=0)
* @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 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)
Expand Down Expand Up @@ -2297,7 +2255,7 @@ function cloture($user, $statut, $note, $notrigger=0)
return -2;
}
}
if ($statut == self::STATUS_BILLED)
if ($statut == self::STATUS_BILLED) // Why this ?
{
$trigger_name='PROPAL_CLASSIFY_BILLED';
}
Expand Down
47 changes: 3 additions & 44 deletions htdocs/commande/class/commande.class.php
Expand Up @@ -1077,11 +1077,12 @@ function createFromClone($socid=0)
* 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');

Expand Down Expand Up @@ -3048,48 +3049,6 @@ function update($user=null, $notrigger=0)
}
}

/**
* 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
*
Expand Down
7 changes: 4 additions & 3 deletions htdocs/compta/facture/class/facture.class.php
Expand Up @@ -747,7 +747,7 @@ function create($user,$notrigger=0,$forceduedate=0)
* @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;

Expand Down Expand Up @@ -948,11 +948,12 @@ function createFromClone($socid=0)
* 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;

Expand Down
Expand Up @@ -65,7 +65,7 @@ public function runTrigger($action, $object, User $user, Translate $langs, Conf
$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;
}
Expand All @@ -84,7 +84,7 @@ public function runTrigger($action, $object, User $user, Translate $langs, Conf
$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;
}
Expand Down Expand Up @@ -117,11 +117,11 @@ public function runTrigger($action, $object, User $user, Translate $langs, Conf
}
}

// 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))
{
Expand All @@ -144,7 +144,7 @@ public function runTrigger($action, $object, User $user, Translate $langs, Conf
}
return $ret;
}

// Second classify billed the proposal.
if (! empty($conf->propal->enabled) && ! empty($conf->global->WORKFLOW_INVOICE_CLASSIFY_BILLED_PROPAL))
{
Expand All @@ -167,7 +167,7 @@ public function runTrigger($action, $object, User $user, Translate $langs, Conf
}
return $ret;
}

}

// Invoice classify billed order
Expand Down Expand Up @@ -234,7 +234,7 @@ public function runTrigger($action, $object, User $user, Translate $langs, Conf
}
}
}

//Build array of quantity ordered by product
if (is_array($order->lines) && count($order->lines)>0) {
foreach($order->lines as $orderline) {
Expand Down
38 changes: 0 additions & 38 deletions htdocs/supplier_proposal/class/supplier_proposal.class.php
Expand Up @@ -1304,44 +1304,6 @@ function fetch($rowid,$ref='')
}
}

/**
* 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
*
Expand Down

0 comments on commit d40dda8

Please sign in to comment.