public without sharing class GuaranteePeriodAlterationController {
|
|
/*****************検索用******************/
|
public String text1 { get; set; } // 对象
|
public String val1 { get; set; } // 值
|
public String Statu_AchievementsId { get; set; }
|
public GuaranteePeriodAlterationApplication__c ambc { get; set; }
|
public static List<SelectOption> textOpts { get; private set; }
|
public static List<SelectOption> changeReasonOpts { get; private set; }
|
|
public Map<String,String> assetIdMap;
|
static {
|
textOpts = new List<SelectOption>();
|
textOpts.add(new SelectOption('','-无-'));
|
//textOpts.add(new SelectOption('Order_No__c' , Schema.SObjectType.Asset.fields.Order_No__c.label));
|
textOpts.add(new SelectOption('Name' , Schema.SObjectType.Asset.fields.Name.label));
|
textOpts.add(new SelectOption('SerialNumber' , Schema.SObjectType.Asset.fields.SerialNumber.label));
|
//textOpts.add(new SelectOption('Installation_Site__c', Schema.SObjectType.Asset.fields.Installation_Site__c.label));
|
//textOpts.add(new SelectOption('Department_Name__c' , Schema.SObjectType.Asset.fields.Department_Name__c.label));
|
|
changeReasonOpts = new List<SelectOption>();
|
changeReasonOpts.add(new SelectOption('' , '-无-'));
|
changeReasonOpts.add(new SelectOption('集中采购,未分配到医院' , '集中采购,未分配到医院'));
|
changeReasonOpts.add(new SelectOption('其他' , '其他'));
|
|
}
|
|
/*****************画面初始化用********************************/
|
|
public Boolean editAble {get;set;}
|
public Boolean spoLinkFlag {get;set;}
|
public String statusEdit {get;set;}
|
/*****************画面表示Bean******************/
|
|
private List<GuaranteePeriodAlterationDetailInfo> guaranteePeriodAlterationDetailRecords = new List<GuaranteePeriodAlterationDetailInfo>();
|
public List<GuaranteePeriodAlterationDetailInfo> guaranteePeriodAlterationDetaiRecordsview { get; set; }
|
public Integer ConsumableorderdetailsCount {
|
get {
|
return guaranteePeriodAlterationDetailRecords == null ? 0 : guaranteePeriodAlterationDetailRecords.size();
|
}
|
}
|
public Integer ConsumableorderdetailsviewCount {
|
get {
|
return guaranteePeriodAlterationDetaiRecordsview == null ? 0 : guaranteePeriodAlterationDetaiRecordsview.size();
|
}
|
}
|
//变更单Id
|
public String Id { get; set; }
|
public Boolean isShow { get; set; }
|
public List<Attachment> attachments { get; set; }
|
|
//分页功能
|
public Integer pageLimit{get;set;}
|
public String soql {get;set;}
|
|
public GuaranteePeriodAlterationController(ApexPages.StandardController stdController) {
|
isShow = false;
|
Statu_AchievementsId = ApexPages.currentPage().getParameters().get('Statu_AchievementsId');
|
Id = ApexPages.currentPage().getParameters().get('Id');
|
|
statusEdit = ApexPages.currentPage().getParameters().get('KeyWords');
|
guaranteePeriodAlterationDetailRecords = new List<GuaranteePeriodAlterationDetailInfo>();
|
guaranteePeriodAlterationDetaiRecordsview = new List<GuaranteePeriodAlterationDetailInfo>();
|
editAble = false;
|
spoLinkFlag = false;
|
pageLimit = Integer.valueOf(System.Label.orderdetPageLimitsize);
|
|
attachments = new List<Attachment>();
|
}
|
|
// 画面初始化
|
public void init() {
|
|
if(Id!=null&&Id!=''&&statusEdit==''&&statusEdit==null){
|
editAble = false;
|
}else if((Id == null||Id=='')&&(statusEdit==''||statusEdit==null)){
|
editAble = true;
|
}else if(Id != null&&Id!=''&&statusEdit!=''&&statusEdit!=null){
|
editAble = true;
|
}
|
ambc = new GuaranteePeriodAlterationApplication__c();
|
guaranteePeriodAlterationDetailRecords = new List<GuaranteePeriodAlterationDetailInfo>();
|
List<Asset> assetListed = new List<Asset>();
|
Map<String,GuaranteePeriodAlterationDetailInfo> MidMap = new Map<String,GuaranteePeriodAlterationDetailInfo>();
|
|
if(Id== NULL || Id==''){
|
List<Statu_Achievements__c> statuAchievements = [select Id,InstallDate__c from Statu_Achievements__c where Id = :Statu_AchievementsId];
|
ambc.WarrantyStartDate__c = statuAchievements[0].InstallDate__c;
|
soql = this.makeSoql1('','');
|
assetListed = Database.query(soql);
|
|
for (Integer i = 0; i < assetListed.size(); i++) {
|
guaranteePeriodAlterationDetailRecords.add(new GuaranteePeriodAlterationDetailInfo(assetListed[i]));
|
|
MidMap.put(assetListed[i].Id, new GuaranteePeriodAlterationDetailInfo(assetListed[i]));
|
}
|
|
for(Integer i = 0; i < guaranteePeriodAlterationDetailRecords.size(); i++){
|
guaranteePeriodAlterationDetaiRecordsview.add(guaranteePeriodAlterationDetailRecords[i]);
|
}
|
}else{
|
List<GuaranteePeriodAlterationDetail__c> changeDetailList = new List<GuaranteePeriodAlterationDetail__c>();
|
List<GuaranteePeriodAlterationApplication__c> assetChangeList = new List<GuaranteePeriodAlterationApplication__c>();
|
|
assetChangeList = [select Id, Name,Change_status__c,
|
ChangeReason__c,WarrantyStartDate__c,
|
ChangeReason_text__c,GpaaStatu_Achievements__c
|
from GuaranteePeriodAlterationApplication__c
|
where Id = :Id];
|
if(assetChangeList.size()>0){
|
ambc = assetChangeList[0];
|
}
|
|
changeDetailList = [select Id,Name,Asset__c,Asset__r.Name,
|
Asset__r.Asset_situation__c,
|
Asset__r.Order_No__c,
|
Asset__r.SerialNumber,
|
Asset__r.Account.Name,
|
Asset__r.Installation_Site__c,
|
Asset__r.CurrentContract__c,
|
Asset__r.Status,
|
Asset__r.guarantee_period__c,
|
Asset__r.RepairQuantity__c
|
from GuaranteePeriodAlterationDetail__c
|
where GuaranteePeriodAlteration__c = :Id] ;
|
for(Integer i = 0; i < changeDetailList.size(); i++){
|
MidMap.put(changeDetailList[i].Id, new GuaranteePeriodAlterationDetailInfo(changeDetailList[i]));
|
}
|
|
for(GuaranteePeriodAlterationDetailInfo ass:MidMap.values()){
|
guaranteePeriodAlterationDetailRecords.add(ass);
|
|
}
|
|
for(GuaranteePeriodAlterationDetailInfo ass : guaranteePeriodAlterationDetailRecords){
|
for(GuaranteePeriodAlterationDetail__c ambcDetail :changeDetailList){
|
if(ass.ast.Id == ambcDetail.Asset__c){
|
ass.check = true;
|
guaranteePeriodAlterationDetaiRecordsview.add(ass);
|
}
|
}
|
|
|
}
|
|
isShow = true;
|
attachments = seekAttachment();
|
}
|
}
|
// 检索
|
public void searchConsumableorderdetails() {
|
|
Map<String,GuaranteePeriodAlterationDetailInfo> MidMap = new Map<String,GuaranteePeriodAlterationDetailInfo>();
|
List<Asset> asListed = new List<Asset>();
|
soql = this.makeSoql1(text1,val1);
|
asListed = Database.query(soql);
|
for (GuaranteePeriodAlterationDetailInfo bss : guaranteePeriodAlterationDetaiRecordsview) {
|
if(bss.check == true){
|
MidMap.put(bss.ast.Id, bss);
|
}
|
}
|
|
for (Integer i = 0; i < asListed.size(); i++) {
|
if(!MidMap.containsKey(asListed[i].Id)){
|
MidMap.put(asListed[i].Id, new GuaranteePeriodAlterationDetailInfo(asListed[i]));
|
}
|
|
}
|
|
|
guaranteePeriodAlterationDetaiRecordsview.clear();
|
for(GuaranteePeriodAlterationDetailInfo bss : MidMap.values()){
|
guaranteePeriodAlterationDetaiRecordsview.add(bss);
|
}
|
}
|
|
private String makeSoql1(String text1,String val1){
|
String statu_AchievementId;
|
if(String.isNotBlank(val1)){
|
val1 = val1.trim();
|
}
|
if (String.isNotBlank(Statu_AchievementsId)) {
|
statu_AchievementId = Statu_AchievementsId;
|
} else {
|
statu_AchievementId = ambc.GpaaStatu_Achievements__c;
|
}
|
String soql = 'select Id,name,SerialNumber,Asset_situation__c,Order_No__c,Account.Name,Status,Installation_Site__c,CurrentContract__c,guarantee_period__c,RepairQuantity__c from Asset where Backorder__c = \'' + statu_AchievementId +'\'';
|
soql += ' AND AssetMark__c != \'耗材\'';
|
if(!String.isBlank(text1)){
|
|
soql += ' AND ('+ text1 +' like \'%' + String.escapeSingleQuotes(val1.replaceAll('%', '\\%')) + '%\' )';
|
}
|
soql += ' limit 200';
|
return soql;
|
}
|
|
// 编辑按钮
|
public PageReference setEditAble(){
|
statusEdit = 'Redirect';
|
PageReference ref = new Pagereference('/apex/AssetGuaranteePeriodAlteration?Id='+Id+'&KeyWords='+statusEdit);
|
ref.setRedirect(true);
|
return ref;
|
}
|
|
// 再申请
|
public PageReference backOrder(){
|
statusEdit = 'Redirect';
|
PageReference ref = new Pagereference('/apex/AssetGuaranteePeriodAlteration?Id='+Id+'&KeyWords='+statusEdit);
|
ref.setRedirect(true);
|
return ref;
|
}
|
|
//删除按钮
|
public PageReference DelConsumable(){
|
GuaranteePeriodAlterationApplication__c ambc = new GuaranteePeriodAlterationApplication__c(Id = Id);
|
List<GuaranteePeriodAlterationDetail__c> changeDetailList = [Select Id,GuaranteePeriodAlteration__r.GpaaStatu_Achievements__c
|
from GuaranteePeriodAlterationDetail__c
|
where GuaranteePeriodAlteration__c = :Id];
|
String rawAccountIded = '';
|
if(changeDetailList.size()> 0){
|
rawAccountIded = changeDetailList[0].GuaranteePeriodAlteration__r.GpaaStatu_Achievements__c;
|
}
|
|
try {
|
delete changeDetailList;
|
delete ambc;
|
//return null;
|
return returnRawAccountPage(rawAccountIded);
|
} catch (Exception e) {
|
ApexPages.addMessages(e);
|
return null;
|
}
|
//return null;
|
}
|
|
// 删除“变更申请单”时,跳转到“注残”页面
|
public PageReference returnRawAccountPage(String rawAccountIded){
|
PageReference ref = new Pagereference('/'+rawAccountIded );
|
ref.setRedirect(true);
|
return ref;
|
}
|
|
//查找当前"保修期限变更申请"所有的附件
|
public List<Attachment> seekAttachment() {
|
return [select Id, ParentId, Name, OwnerId, CreatedDate, BodyLength FROM Attachment where ParentId = :Id];
|
}
|
|
//跳转到上传附件页面
|
public PageReference uploadingAttachment(){
|
PageReference ref = new Pagereference('/p/attach/NoteAttach?pid=' + Id +'&retURL=%2Fapex/AssetGuaranteePeriodAlteration?Id='+Id);
|
ref.setRedirect(true);
|
return ref;
|
}
|
|
//查找"保有设备"是否含有"QIS"和"修理"和"保有设备的保修期限变更过"
|
public Boolean find_QIS_Repair(List<String> assetIdList) {
|
|
assetIdMap = new Map<String,String>();
|
List<Repair__c> repairList = [select Id,Delivered_Product__c,Delivered_Product__r.SerialNumber from Repair__c where Delivered_Product__c In :assetIdList];
|
List<QIS_Report__c> qIS_ReportList = [select Id,nonyushohin__c,nonyushohin__r.SerialNumber from QIS_Report__c where nonyushohin__c In :assetIdList];
|
List<Asset> assets = [Select Id,Name,WarrantyChanges__c,SerialNumber from Asset where WarrantyChanges__c = true And Id In:assetIdList];
|
if (repairList.size() > 0 || qIS_ReportList.size() > 0 || assets.size() > 0) {
|
|
if (repairList.size() > 0) {
|
|
for (Repair__c repair :repairList) {
|
assetIdMap.put(repair.Delivered_Product__c,repair.Delivered_Product__r.SerialNumber+'(含修理)');
|
}
|
}
|
|
if ( qIS_ReportList.size() > 0) {
|
|
for (QIS_Report__c qIS_Report :qIS_ReportList) {
|
assetIdMap.put(qIS_Report.nonyushohin__c,qIS_Report.nonyushohin__r.SerialNumber+'(含QIS)');
|
}
|
}
|
|
if (assets.size() > 0) {
|
|
for (Asset ass: assets) {
|
assetIdMap.put(ass.Id,ass.SerialNumber+'(变更过)');
|
}
|
}
|
|
return true;
|
}
|
return false;
|
}
|
|
// 提交按钮
|
public PageReference Sorder() {
|
PageReference ref = new Pagereference('/'+Id);
|
ref.setRedirect(true);
|
|
Savepoint sp = Database.setSavepoint();
|
GuaranteePeriodAlterationApplication__c agAlteration = new GuaranteePeriodAlterationApplication__c();
|
agAlteration.Id = Id;
|
attachments = seekAttachment();
|
if (ambc.ChangeReason__c == '集中采购,未分配到医院' && attachments.size() == 0) {
|
ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '请上传标书'));
|
return null;
|
}
|
|
try{
|
|
update agAlteration;
|
|
}catch(Exception e){
|
ApexPages.addmessages(e);
|
}
|
try {
|
Approval.ProcessSubmitRequest psr = new Approval.ProcessSubmitRequest();
|
psr.setObjectId(Id);
|
Approval.ProcessResult submitResult = Approval.process(psr);
|
return ref;
|
}
|
catch (Exception e) {
|
//ApexPages.addmessages(e);
|
Database.rollback(sp);
|
return null;
|
}
|
|
//return null;
|
//return UnabletoEdit();
|
}
|
|
//验证字段
|
public Boolean warning() {
|
|
if (String.isBlank(ambc.ChangeReason__c)) {
|
|
ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '请输入变更原因'));
|
return true;
|
} else if (ambc.ChangeReason__c == '其他' && String.isBlank(ambc.ChangeReason_text__c)) {
|
|
ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '变更原因为"其他"时,请输入"变更原因其他"'));
|
return true;
|
} else if (ambc.WarrantyStartDate__c == null) {
|
|
ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '请输入保修开始日'));
|
return true;
|
}
|
|
Integer FLG = 0;
|
Integer Count = 0;
|
for (GuaranteePeriodAlterationDetailInfo CheckCount : guaranteePeriodAlterationDetaiRecordsview) {
|
FLG = FLG + 1;
|
if(CheckCount.check == false){
|
Count = Count + 1;
|
}
|
}
|
|
if (Count == FLG) {
|
ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '请选择要修改的保有设备'));
|
return true;
|
}
|
|
return false;
|
|
}
|
|
// 保存按钮
|
public PageReference save() {
|
//return null;
|
|
GuaranteePeriodAlterationApplication__c agAlteration = new GuaranteePeriodAlterationApplication__c ();
|
List<GuaranteePeriodAlterationDetail__c> Ins = New List<GuaranteePeriodAlterationDetail__c>();
|
|
//新建变更单时
|
Savepoint sp = Database.setSavepoint();
|
try {
|
|
agAlteration.ChangeReason_text__c = ambc.ChangeReason_text__c;
|
agAlteration.WarrantyStartDate__c = ambc.WarrantyStartDate__c;
|
agAlteration.ChangeReason__c = ambc.ChangeReason__c;
|
|
if (warning()) {
|
|
return null;
|
}
|
|
if (String.isBlank(Id)) {
|
|
Integer i = 1;
|
agAlteration.Change_status__c = '草案中';
|
agAlteration.GpaaStatu_Achievements__c = Statu_AchievementsId;
|
|
try {
|
|
insert agAlteration;
|
} catch (Exception e) {
|
|
ApexPages.addMessages(e);
|
}
|
|
|
Map<String,String> assetGuaranteeTimeMap = new Map<String,String>();
|
List<GuaranteePeriodAlterationApplication__c> saveGpaApplicationList =
|
[SELECT Id,Name,WarrantyStartDate__c
|
FROM GuaranteePeriodAlterationApplication__c
|
WHERE id = :agAlteration.id];
|
|
if ( saveGpaApplicationList.size() > 0) {
|
|
List<Asset> assetList = [Select Id,Guarantee_period_for_products__c,guarantee_period__c,RepairQuantity__c,SerialNumber
|
from Asset
|
where Backorder__c = :Statu_AchievementsId];
|
Map<String,Integer> assetMap = new Map<String,Integer>();
|
for (Asset ass :assetList) {
|
assetMap.put(ass.Id,Integer.valueOf(ass.guarantee_period__c));
|
}
|
|
|
List<String> assetIds = new List<String>();
|
for (GuaranteePeriodAlterationDetailInfo ass : guaranteePeriodAlterationDetaiRecordsview) {
|
|
if(ass.check == true){
|
assetGuaranteeTimeMap.put(saveGpaApplicationList[0].Id,ass.ast.Id);
|
GuaranteePeriodAlterationDetail__c gpaDetail = new GuaranteePeriodAlterationDetail__c();
|
String str = string.valueOf(i);
|
if(str.length() == 1){
|
str = '0' + str;
|
}
|
gpaDetail.Name = saveGpaApplicationList[0].Name + '-'+ str;
|
gpaDetail.GuaranteePeriodAlteration__c = saveGpaApplicationList[0].Id;
|
gpaDetail.Asset__c = ass.ast.Id;
|
gpaDetail.GuaranteeTime__c = saveGpaApplicationList[0].WarrantyStartDate__c.addDays(assetMap.get(ass.ast.Id));
|
i++;
|
Ins.add(gpaDetail);
|
assetIds.add(ass.ast.Id);
|
|
}
|
}
|
|
if (find_QIS_Repair(assetIds)) {
|
|
ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '以下保有设备含有"QIS"或"修理"或"保修期限变更过"不适合变更"保修期限"' + assetIdMap.values()));
|
return null;
|
}
|
|
//update saveGpaApplicationList;
|
}
|
|
|
Id = agAlteration.id;
|
|
if(Ins.size()>0){
|
insert Ins;
|
return UnabletoEdit();
|
}
|
}
|
//修改之后 保存订单
|
else if(!String.isBlank(Id)){
|
|
agAlteration.Id = Id;
|
agAlteration.GpaaStatu_Achievements__c = ambc.GpaaStatu_Achievements__c;
|
|
update agAlteration;
|
|
List<GuaranteePeriodAlterationDetail__c> delIns =
|
[select Id from GuaranteePeriodAlterationDetail__c
|
where GuaranteePeriodAlteration__r.Id = :Id];
|
|
if(delIns.size()>0){
|
|
delete delIns;
|
}
|
|
Integer i = 1;
|
List<GuaranteePeriodAlterationApplication__c> saveGpaApplicationList =
|
[SELECT Id,Name
|
FROM GuaranteePeriodAlterationApplication__c
|
WHERE id =:agAlteration.id];
|
|
List<String> assetIds = new List<String>();
|
for (GuaranteePeriodAlterationDetailInfo ass : guaranteePeriodAlterationDetaiRecordsview) {
|
|
if(ass.check == true){
|
|
GuaranteePeriodAlterationDetail__c gpaDetail = new GuaranteePeriodAlterationDetail__c();
|
String str = string.valueOf(i);
|
|
if(str.length() == 1){
|
|
str = '0' + str;
|
}
|
|
gpaDetail.Name = saveGpaApplicationList[0].Name + '-'+ str;
|
gpaDetail.GuaranteePeriodAlteration__c = saveGpaApplicationList[0].Id;
|
gpaDetail.Asset__c = ass.ast.Id;
|
i++;
|
Ins.add(gpaDetail);
|
assetIds.add(ass.ast.Id);
|
}
|
}
|
|
if (find_QIS_Repair(assetIds)) {
|
|
ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '以下保有设备含有"QIS"或"修理"或"保修期限变更过"不适合变更"保修期限"' + assetIdMap.values()));
|
return null;
|
}
|
|
if(Ins.size()>0){
|
|
insert Ins;
|
return UnabletoEdit();
|
}
|
|
}
|
|
}catch(Exception e){
|
|
ApexPages.addMessages(e);
|
Database.rollback(sp);
|
return null;
|
}
|
|
return UnabletoEdit();
|
}
|
|
// 返回不可编辑状态
|
public PageReference UnabletoEdit(){
|
PageReference ref = new Pagereference('/apex/AssetGuaranteePeriodAlteration?Id='+Id);
|
ref.setRedirect(true);
|
return ref;
|
}
|
// Data Bean
|
class GuaranteePeriodAlterationDetailInfo {
|
public Boolean check { get; set; }
|
public Boolean oldCheck { get; set; }
|
public Boolean canSelect { get; set; }
|
|
|
public Asset ast { get; set; }
|
public GuaranteePeriodAlterationDetail__c gpad { get; set; }
|
|
|
|
public GuaranteePeriodAlterationDetailInfo(GuaranteePeriodAlterationDetail__c gpad) {
|
check = false;
|
oldCheck = false;
|
ast = gpad.Asset__r;
|
canSelect = true;
|
|
}
|
|
public GuaranteePeriodAlterationDetailInfo(Asset e) {
|
check = false;
|
oldCheck = false;
|
ast = e;
|
canSelect = true;
|
}
|
|
}
|
}
|