City Square Mall Search Batch Update 的规则

单张voucher 做action的流程是:

1.点击detail后获取该张voucher可做的action( get_voucher_actions($voucher_details) )

function get_voucher_actions( $voucher_details )
 {
  //$this->load->model('access_control', 'vms_acl');
  
  $voucher_id = $voucher_details['voucher_id'];
  
  //we also need to check the stock of the voucher to dertimine the actions.
  //e.g. new voucher in Finance stock cannot be re-issued.
  $actions = array();
  
  //if( $this->vms_acl->is_csa_user())
  //{
   switch($voucher_details['status_id'])
   {
    case $this->voucher_lkup->get_status_id_by_name('new'):
     //the following actions are only available if the voucher is not locked.
     if( $voucher_details['is_locked'] == 'N' )
     {
      if( $voucher_details['stock_id'] != $this->voucher_lkup->get_stock_id_by_name('expiry') )
      {
       $actions[] = 'miss'; //from any stock (except for expiry stock)
      }
      
      if( $voucher_details['stock_id'] == $this->voucher_lkup->get_stock_id_by_name('csa') ) //Cancal should be done on own stock.
      {
       $actions[] = 'cancel';
      }
      
      if( $voucher_details['stock_id'] == $this->voucher_lkup->get_stock_id_by_name('cse') )
      {
       //Re-issue (via scanner or manual input) Physically the voucher was already issued
       //- For Promo, Counter sales, partner  vouchers - From CSE stock
       $actions[] = 'reissue'; //(by CSA only)
      }
      
      //change expiry date, Can only be changed if the voucher has not  expired, Tenant voucher only
      //status must be new.
      $tenant_class_ids = $this->voucher_lkup->get_voucher_class_ids( $this->voucher_api->_class_tenant );
      if( in_array($voucher_details['class_id'], $tenant_class_ids) 
        && strtotime($voucher_details['expiry_date'] . ' 23:59:59') >= strtotime( date('Y-m-d 23:59:59') ) 
       &&  $voucher_details['stock_id'] == $this->voucher_lkup->get_stock_id_by_name('csa') 
      )
      {
       //$actions[] = 'change_expiry';
      }
     }
     
     break;
    
    case $this->voucher_lkup->get_status_id_by_name('cancelled'): 
     //request reinstatement-cancelled,
     //check if someone requested un-cancelled. if so, show approve reinstatement-cancelled
     $rt = $this->voucher_api->voucher_is_pending_approve_uncancel( $voucher_id );
     if(FALSE === $rt && $voucher_details['is_locked'] == 'N')
     {
      $actions[] = 'request_uncancel';
     }
     elseif( !$this->vms_acl->is_same_login_user( $rt['request_user'] ) ) //only if the user is different 
     {
      $actions[] = 'approve_uncancel';
     }  
     break;
     
    
    case $this->voucher_lkup->get_status_id_by_name('missing'):
     //request reinstatement-missing,
     //check if someone requested un-missing. if so, show approve reinstatement-missing
     $rt = $this->voucher_api->voucher_is_pending_approve_unmissing( $voucher_id );
     if(FALSE === $rt && $voucher_details['is_locked'] == 'N')
     {
      $actions[] = 'request_unmissing';
     }
     elseif( !$this->vms_acl->is_same_login_user( $rt['request_user'] ) ) //only if the user is different 
     {
      $actions[] = 'approve_unmissing';
     }
     break;
    
    case $this->voucher_lkup->get_status_id_by_name('issued'):
     //unissue, replace, extend expiry date. (only when the expiry date of voucher set)
     
     //only when the voucher is not expired
     if( strtotime($voucher_details['expiry_date'] . ' 23:59:59') >= strtotime( date('Y-m-d 23:59:59') )  && $voucher_details['is_locked'] == 'N' )
     {
      $actions[] = 'unissue';
      $actions[] = 'replace';
     }
     //$actions[] = 'extend';

     break;
    case $this->voucher_lkup->get_status_id_by_name('reimbursed'):
     $rt = $this->voucher_api->voucher_is_pending_approve_unreimburse( $voucher_id );
     if(FALSE === $rt && $voucher_details['is_locked'] == 'N')
     {
      $actions[] = 'request_unreimburse';
     }
     elseif( !$this->vms_acl->is_same_login_user( $rt['request_user'] ) ) //only if the user is different
     {
      $actions[] = 'approve_unreimburse';
     }
     break;
     //un-reimburse
    
    default:
     break;
   }//end of switch
  //}
  
  
  if( empty($voucher_details['alert_tag']) && $this->vms_acl->is_csa_user() )
  {
   $actions[] = 'tag'; //tag will be available in any status, only csa can tag.
  }
  elseif(!empty($voucher_details['alert_tag']))
  {
   $rt = $this->voucher_api->voucher_is_pending_approve_untag( $voucher_id );
   if(FALSE === $rt && $this->vms_acl->is_csa_user())
   {
    $actions[] = 'request_untag';//un-tag will be available if there is any tags of this voucher.
   }
   elseif( !$this->vms_acl->is_same_login_user( $rt['request_user'] ) && $this->vms_acl->is_cd_user() ) //only if the user is different 
   {
    $actions[] = 'approve_untag'; //only CD can do approve
   }
  }
 
  $rt = array();
  if(!empty($actions))
  {
   foreach($actions as $action_name)
   {
    $action_id = $this->voucher_lkup->get_action_id_by_name ( $action_name );
    
    $rt[$action_name] = $this->voucher_lkup->get_action_desc_by_id ( $action_id );
   }
  }
  
  return $rt;
 }