public without sharing class LoanerStockDownCheckController {
 // 基础Url
    public String baseUrl { get; private set; }
    // 样机借出申请ID
    public String laId { get; private set; }
    public loaner_application__c la { get; private set; }
    /* 画面步骤
     * 下架:StockDown
     *
     */
    public String step { get; private set; }
    // 明细Bean
    public List<DataLineBean> dataLines { get; set; }
    // 明细行数
    public Integer getDatalineSize() {
        return dataLines == null ? 0 : dataLines.size();
    }

    public LoanerStockDownCheckController() {
        laId = System.currentPageReference().getParameters().get('id');
        step = System.currentPageReference().getParameters().get('step');
    }

    public PageReference init() {

        // 基础Url
        baseUrl = URL.getSalesforceBaseUrl().toExternalForm();
        String path = URL.getCurrentRequestUrl().getPath();
        if (path.indexOf('/apex') > 0) {
            baseUrl += path.substring(0,path.indexOf('/apex'));
        } else if (path.indexOf('production/') > 0) {
            baseUrl += '/production';
        }
        // 明细Bean
        dataLines = new List<DataLineBean>();

        if (String.isBlank(laId) == true) {
            return null;
        }
        if (String.isBlank(step) == true) {
            return null;
        }
        // 样机借出申请取得
        List<loaner_application__c> laList = [select Id,Status__c from loaner_application__c where Id = :laId];
        if (laList.size() == 0) {
            return null;
        }
        la = laList[0];
        // 样机借出申请明细取得
        String sql_select = 'select Id,StockDownRemark__c, SerialNumber__c, Internal_Asset_number__c, OTCODE__c, ECCode__c , Inspection_result__c,LOANER__c,LOANER__r.RecordType.Id,LOANER__r.Name,LOANER__r.Remarks2__c';
        String sql_where = ' where loaner_application__c = :laId ';
        if (step == 'StockDownCheck') {
            sql_where += ' and RAESD_Status__c in (\'已下架\',\'已出库指示\')';
        } else {
            return null;
        }

        String sql_full = sql_select + ' from loaner_application_detail__c ' + sql_where;
  		
        List<loaner_application_detail__c> lads = Database.query(sql_full);
        if (lads.size() == 0) {
            return null;
        }

        // 明细Bean作成
        Integer cnt = 0;
        for (loaner_application_detail__c lad : lads) {
            cnt += 1;
            DataLineBean dataLine = new DataLineBean(cnt, lad);
            dataLines.add(dataLine);
        }

        return null;
    }

 public PageReference saveBtn() {
       // 根据step更新样机借出申请明细状态
        List<loaner_application_detail__c> updList = new List<loaner_application_detail__c>();
        List<Asset> assList = new List<Asset>();
        if(dataLines.size() > 0){
            for (DataLineBean dataLine : dataLines) {
                if (dataLine.checkFlag == true) {
                    loaner_application_detail__c lad = dataLine.lad;
                    Asset loa = new Asset(id = lad.LOANER__c);
                    lad.StockDown__c = true;
                    lad.StockDown_Date__c = Date.today();
                    if (step == 'StockDownCheck') {
                        lad.Inspection_result__c = dataLine.lad.Inspection_result__c;
                        lad.Pre_inspection_Date__c = Date.today();
                        if('NG-修理' == dataLine.lad.Inspection_result__c){
                            if(lad.StockDownRemark__c == null || lad.StockDownRemark__c == ''){
                                ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, '请填写NG-修理备注'));
                                return null;
                            }
                            lad.RAESD_Status__c = '待修理';
                            //如果是个体管理,则改变样机状态
                            if(lad.LOANER__r.RecordType.Id == System.label.Asset_Record_Type1){
                                loa.status = '待修理';
                            }
                        }else if('NG-废弃' == dataLine.lad.Inspection_result__c){
                            if(lad.StockDownRemark__c == null || lad.StockDownRemark__c == ''){
                                ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, '请填写NG-废弃备注'));
                                return null;
                            }
                            lad.RAESD_Status__c = '待废弃';
                            if(lad.LOANER__r.RecordType.Id == System.label.Asset_Record_Type1){
                                loa.status = '待废弃';                            
                            }
                        }else if('OK' == dataLine.lad.Inspection_result__c){
                            lad.RAESD_Status__c = '出库前已检测';  
                        }else{
                            ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, '请选择下架状态'));
                            return null;
                        }
                    }
                    updList.add(lad);
                    if(lad.LOANER__r.RecordType.Id == System.label.Asset_Record_Type1){
                       assList.add(loa);
                    }
                }
            }
            Savepoint sp = Database.setSavepoint();
            try {
                if (updList.size() > 0) {
                    update updList;
                    update assList;
                    if(la.Status__c != '完毕'){
                        la.Status__c =  LoanerOrderState.getOrderStater(la.Id);
                        update la;
                    }
                }else{
                    ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, '未选择下架检查的样机'));
                    return null;
                }
               
            } catch (Exception ex) {
                Database.rollback(sp);
                ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, ex.getMessage() + ' | Line:' + ex.getLineNumber()));
                return null;
            }
        }
        // 返回样机借出申请画面
        String url = baseUrl;
        url += '\\' + laId;
        return new Pagereference(url);
    }

    public PageReference cancelBtn() {
        // 返回样机借出申请画面
        String url = baseUrl;
        url += '\\' + laId;
        return new Pagereference(url);
        return null;
    }

     public class DataLineBean {
        // 是否选择
        public boolean checkFlag { get; set; }
        // 行号
        public Integer lineNo { get; private set; }
        // 样机借出申请明细
        public loaner_application_detail__c lad { get; set; }

        public DataLineBean(Integer in_no, loaner_application_detail__c in_lad) {
            checkFlag = false;
            lineNo = in_no;
            lad = in_lad;
        }
    }

}