public with sharing class SpecialDiscountController {
|
public String accountId { get; set; }
|
//public List<product2Info> productInfoList = new List<product2Info>();
|
public List<product2Info> productInfoListview { get; set; }
|
public Account acc { get; set; }
|
public Dealer_Product__c dpc { get; set; }
|
public Boolean Pro2DealerFlag {get ; set;}
|
public Integer productRecoedsCount { get; set; }
|
//错误信息
|
public String alertMessage {set;get;}
|
//
|
public Boolean productSearch;
|
|
//page
|
Public Integer pagesize{get; set;}
|
Public Integer totalcount{get; set;}
|
Public Integer pagecount{get; set;}
|
Public Integer currentpage{get; set;}
|
public Boolean hasPrevious{get; set;}
|
public Boolean hasNext{get; set;}
|
|
Map<Id,Dealer_Product__c> ExistProdSDMap = new Map<Id,Dealer_Product__c> ();
|
|
//1-5分类选项
|
public String keyword { get; set; }
|
public String category1 { get; set; }
|
public String category2 { get; set; }
|
public String category3 { get; set; }
|
public String category4 { get; set; }
|
public String category5 { get; set; }
|
public String SpecialDiscount{ get; set; }
|
public List<SelectOption> category1OptionList{get;set;}
|
public List<SelectOption> category2OptionList{get;set;}
|
public List<SelectOption> category3OptionList{get;set;}
|
public List<SelectOption> category4OptionList{get;set;}
|
public List<SelectOption> category5OptionList{get;set;}
|
|
public SpecialDiscountController() {
|
productSearch = false;
|
accountId = ApexPages.currentPage().getParameters().get('userid');
|
//page
|
pagesize = Integer.valueof(system.label.orderdetLimitsize);
|
currentpage = 0;
|
}
|
|
public void init(){
|
geCategory();
|
acc = [SELECT Id,Name,Parent.Name,Parent.Management_Code__c FROM Account WHERE Id = :accountId];
|
ExistProdSDMap = new Map<Id,Dealer_Product__c>();
|
List<product2Info> productInfoList = new List<product2Info>();
|
productInfoListview = new List<product2Info>();
|
dpc = new Dealer_Product__c();
|
|
Pro2DealerFlag = false;
|
|
//所有的产品
|
List<Product2__c> product2Selected = [select Id, Name,Name__c,Asset_Model_No__c,Category1__c,Category2__c,Category3__c,Category4__c,Category5__c,SFDA_Status__c FROM Product2__c where Estimation_Entry_Possibility__c = '○' order by Name__c ];
|
for (Integer i = 0; i < product2Selected.size(); i++) {
|
productInfoList.add(new product2Info(product2Selected[i]));
|
}
|
|
//已存在的特殊折扣
|
List<Dealer_Product__c> dealerProductList = [select Id, Special_Discount__c,Dealer_Product2__c
|
FROM Dealer_Product__c
|
WHERE Dealer_Contact__c = :accountId
|
AND Special_Discount__c != null];
|
for(Dealer_Product__c ahlc : dealerProductList){
|
ExistProdSDMap.put(ahlc.Dealer_Product2__c, ahlc);
|
}
|
|
for(product2Info prd : productInfoList){
|
if(ExistProdSDMap.containsKey(prd.pro.Id)){
|
//prd.check = true;
|
prd.dealerPro = ExistProdSDMap.get(prd.pro.Id);
|
prd.specialDiscount = ExistProdSDMap.get(prd.pro.Id).Special_Discount__c;
|
}
|
}
|
productInfoList.sort();
|
|
//总件数
|
totalcount = productInfoList.size();
|
//页数
|
pagecount=(totalcount + pagesize - 1) / pagesize;
|
//显示第一页
|
moveToFirst();
|
makeCurrentPageRecords(productInfoList);
|
}
|
|
|
public void geCategory(){
|
AggregateResult[] categoryList = [select Count(id), Category1_text__c c1c from Product2__c group by Category1_text__c];
|
category1OptionList = new List<SelectOption>();
|
category1OptionList.add(new SelectOption('', '--无--'));
|
for(AggregateResult category3Search : categoryList) {
|
String deliverycnt = String.valueOf(category3Search.get('c1c'));
|
if(String.isNotBlank(deliverycnt)){
|
category1OptionList.add(new SelectOption(deliverycnt,deliverycnt));
|
}
|
}
|
category2OptionList = new List<SelectOption>();
|
category2OptionList.add(new SelectOption('', '--无--'));
|
category3OptionList = new List<SelectOption>();
|
category3OptionList.add(new SelectOption('', '--无--'));
|
category4OptionList = new List<SelectOption>();
|
category4OptionList.add(new SelectOption('', '--无--'));
|
category5OptionList = new List<SelectOption>();
|
category5OptionList.add(new SelectOption('', '--无--'));
|
}
|
|
public void showcategory2() {
|
AggregateResult[] categoryList = [select Count(id), Category2_text__c c2c from Product2__c WHERE Category1_text__c = :category1 group by Category2_text__c];
|
category2OptionList = new List<SelectOption>();
|
category2OptionList.add(new SelectOption('', '--无--'));
|
for(AggregateResult category3Search : categoryList) {
|
String deliverycnt = String.valueOf(category3Search.get('c2c'));
|
if(String.isNotBlank(deliverycnt)){
|
category2OptionList.add(new SelectOption(deliverycnt,deliverycnt));
|
}
|
}
|
|
}
|
|
public void showcategory3() {
|
AggregateResult[] categoryList = [select Count(id), Category3_text__c c3c from Product2__c WHERE Category1_text__c = :category1 AND Category2_text__c = :category2 group by Category3_text__c];
|
category3OptionList = new List<SelectOption>();
|
category3OptionList.add(new SelectOption('', '--无--'));
|
for(AggregateResult category3Search : categoryList) {
|
String deliverycnt = String.valueOf(category3Search.get('c3c'));
|
if(String.isNotBlank(deliverycnt)){
|
category3OptionList.add(new SelectOption(deliverycnt,deliverycnt));
|
}
|
}
|
|
}
|
public void showcategory4() {
|
AggregateResult[] categoryList = [select Count(id), Category4_text__c c4c from Product2__c WHERE Category1_text__c = :category1 AND Category2_text__c = :category2 AND Category3_text__c = :category3 group by Category4_text__c];
|
category4OptionList = new List<SelectOption>();
|
category4OptionList.add(new SelectOption('', '--无--'));
|
for(AggregateResult category3Search : categoryList) {
|
String deliverycnt = String.valueOf(category3Search.get('c4c'));
|
if(String.isNotBlank(deliverycnt)){
|
category4OptionList.add(new SelectOption(deliverycnt,deliverycnt));
|
}
|
}
|
|
}
|
public void showcategory5() {
|
AggregateResult[] categoryList = [select Count(id), Category5_text__c c5c from Product2__c WHERE Category1_text__c = :category1 AND Category2_text__c = :category2 AND Category3_text__c = :category3 AND Category4_text__c = :category4 group by Category5_text__c];
|
category5OptionList = new List<SelectOption>();
|
category5OptionList.add(new SelectOption('', '--无--'));
|
for(AggregateResult category3Search : categoryList) {
|
String deliverycnt = String.valueOf(category3Search.get('c5c'));
|
if(String.isNotBlank(deliverycnt)){
|
category5OptionList.add(new SelectOption(deliverycnt,deliverycnt));
|
}
|
}
|
|
}
|
|
public PageReference save() {
|
List<Dealer_Product__c> Ins = new List<Dealer_Product__c>();
|
List<Dealer_Product__c> Del = new List<Dealer_Product__c>();
|
alertMessage = '';
|
Savepoint sp = Database.setSavepoint();
|
try{
|
for(product2Info proinfo:productInfoListview){
|
if(proinfo.check == true){
|
if(proinfo.dealerPro.Special_discount__c != null &&
|
(proinfo.dealerPro.Special_discount__c <=0 || proinfo.dealerPro.Special_discount__c >=100)){
|
proinfo.dealerPro.Special_discount__c.addError('百分比无效,请输入0~100的数字。');
|
return null;
|
}
|
Dealer_Product__c dpc = new Dealer_Product__c();
|
dpc.Id = proinfo.dealerPro.Id;
|
dpc.Dealer_Contact__c = accountId;
|
dpc.Dealer_Product2__c = proinfo.pro.Id;
|
|
if(proinfo.dealerPro.Special_Discount__c != null && proinfo.dealerPro.Special_Discount__c > 0){
|
dpc.Special_Discount__c = proinfo.dealerPro.Special_Discount__c;
|
Ins.add(dpc);
|
}
|
else{
|
if(proinfo.dealerPro.Id != null){
|
Del.add(dpc);
|
}
|
|
|
|
/*List<Dealer_Product__c> results = [select Id, Special_Discount__c,Dealer_Product2__c
|
FROM Dealer_Product__c
|
WHERE id = :proinfo.dealerPro.Id];
|
if (results !=null && results.size()>0) Del.add(dpc);*/
|
}
|
}
|
else{
|
if(proinfo.dealerPro.Special_Discount__c == null || proinfo.dealerPro.Special_Discount__c==0){
|
if(proinfo.dealerPro.id != null){
|
Dealer_Product__c dpc = new Dealer_Product__c();
|
dpc.Id = proinfo.dealerPro.Id;
|
dpc.Dealer_Contact__c = accountId;
|
dpc.Dealer_Product2__c = proinfo.pro.Id;
|
Del.add(dpc);
|
}
|
|
|
//101 sql 对应注释
|
/*List<Dealer_Product__c> results = [select Id, Special_Discount__c,Dealer_Product2__c
|
FROM Dealer_Product__c
|
WHERE id = :proinfo.dealerPro.Id];
|
if (results !=null && results.size()>0){
|
Dealer_Product__c dpc = new Dealer_Product__c();
|
dpc.Id = proinfo.dealerPro.Id;
|
dpc.Dealer_Contact__c = accountId;
|
dpc.Dealer_Product2__c = proinfo.pro.Id;
|
Del.add(dpc);
|
}*/
|
}
|
}
|
}
|
/*if(Del.size()>0){
|
ApexPages.addmessage(new ApexPages.message(ApexPages.severity.WARNING, 'Del' + Del));
|
return null;
|
delete Del;
|
}*/
|
|
if(Ins.size()>0){
|
upsert Ins;
|
}
|
|
if(Del.size()>0){
|
delete Del;
|
}
|
//alertMessage = '保存成功。';
|
}catch(Exception e){
|
ApexPages.addMessages(e);
|
Database.rollback(sp);
|
return null;
|
}
|
return setpage();
|
//return null;
|
|
}
|
|
public PageReference setpage(){
|
PageReference ref = new Pagereference('/' + acc.Id);
|
ref.setRedirect(true);
|
return ref;
|
}
|
|
// 检索
|
public void searchProduct() {
|
productSearch = true;
|
//所有的产品
|
List<product2Info> productInfoList = new List<product2Info>();
|
//检索产品
|
String soql = this.makeSoql(category1,category2,category3,category4,category5,keyword,Pro2DealerFlag);
|
List<Product2__c> product2Selected = Database.query(soql);
|
for (Integer i = 0; i < product2Selected.size(); i++) {
|
productInfoList.add(new product2Info(product2Selected[i]));
|
}
|
|
//已存在的特殊折扣
|
ExistProdSDMap.clear();
|
List<Dealer_Product__c> DealerProductList = [select Id, Special_Discount__c,Dealer_Product2__c
|
FROM Dealer_Product__c
|
WHERE Dealer_Contact__c = :accountId
|
AND Special_Discount__c != null];
|
for(Dealer_Product__c ahlc : dealerProductList){
|
ExistProdSDMap.put(ahlc.Dealer_Product2__c, ahlc);
|
}
|
|
for(product2Info prd : productInfoList){
|
if(ExistProdSDMap.containsKey(prd.pro.Id)){
|
//prd.check = true;
|
prd.dealerPro = ExistProdSDMap.get(prd.pro.Id);
|
prd.specialDiscount = ExistProdSDMap.get(prd.pro.Id).Special_Discount__c;
|
}
|
}
|
productInfoList.sort();
|
|
//总件数
|
totalcount = productInfoList.size();
|
//页数
|
pagecount=(totalcount + pagesize - 1) / pagesize;
|
//显示第一页
|
moveToFirst();
|
makeCurrentPageRecords(productInfoList);
|
}
|
|
//产品检索
|
public String makeSoql(String category1,String category2,String category3,String category4,String category5,String keyword,Boolean Pro2DealerFlag){
|
String soql = 'select Id, Name,Name__c,Asset_Model_No__c,Category1__c,Category2__c,Category3__c,Category4__c,';
|
soql += ' Category5__c,SFDA_Status__c FROM Product2__c WHERE Estimation_Entry_Possibility__c = \'○\'';
|
if(String.isNotBlank(category1)){
|
soql += ' AND Category1__c = \'' + category1 + '\'';
|
}
|
if(String.isNotBlank(category2)){
|
soql += ' AND Category2__c = \'' + category2 + '\'';
|
}
|
if(String.isNotBlank(category3)){
|
soql += ' AND Category3__c = \'' + category3 + '\'';
|
}
|
if(String.isNotBlank(category4)){
|
soql += ' AND Category4__c = \'' + category4 + '\'';
|
}
|
if(String.isNotBlank(category5)){
|
soql += ' AND Category5__c = \'' + category5 + '\'';
|
}
|
if(String.isNotBlank(keyword)){
|
soql += ' AND Name__c like \'%' + String.escapeSingleQuotes(keyword.replaceAll('%', '\\%')) + '%\'';
|
}
|
if(Pro2DealerFlag){
|
soql += ' AND Pro2_Dealer_Object__c = true';
|
}
|
soql += ' order by Name__c ';
|
|
return soql;
|
}
|
|
//首页
|
public void moveToFirst(){
|
if(currentpage == 1) return;
|
currentpage = 1;
|
canMove();
|
}
|
|
//尾页
|
public void moveToLast(){
|
if(currentpage >= pagecount) return;
|
currentpage = pagecount;
|
canMove();
|
}
|
|
//上一页
|
public void moveToPrevious(){
|
if(currentpage == 1) return;
|
currentpage = currentpage -1;
|
canMove();
|
}
|
|
//下一页
|
public void moveToNext(){
|
if(currentpage >= pagecount) return;
|
|
currentpage = currentpage + 1;
|
canMove();
|
}
|
|
//判断是否可翻页
|
public void canMove(){
|
hasPrevious = false;
|
hasNext = false;
|
if(pagecount > 1 && currentpage > 1) hasPrevious = true;
|
if(pagecount > 1 && currentpage < pagecount) hasNext = true;
|
}
|
|
//获取所有产品
|
public List<product2Info> searchAllProduct(){
|
//所有的产品
|
List<product2Info> allProductList = new List<product2Info>();
|
List<Product2__c> accountInfo = [select Id, Name,
|
Name__c,
|
Asset_Model_No__c,
|
Category1__c,
|
Category2__c,
|
Category3__c,
|
Category4__c,
|
Category5__c,
|
SFDA_Status__c
|
FROM Product2__c
|
where Estimation_Entry_Possibility__c = '○'
|
order by Name__c];
|
for (Integer i = 0; i < accountInfo.size(); i++) {
|
allProductList.add(new product2Info(accountInfo[i]));
|
}
|
return allProductList;
|
}
|
|
//刷新当前页
|
public PageReference refreshPageSize() {
|
//所有的产品
|
List<product2Info> productInfoList = new List<product2Info>();
|
//if(productSearch){
|
//检索产品
|
String soql = this.makeSoql(category1,category2,category3,category4,category5,keyword,Pro2DealerFlag);
|
List<Product2__c> product2Selected = Database.query(soql);
|
for (Integer i = 0; i < product2Selected.size(); i++) {
|
productInfoList.add(new product2Info(product2Selected[i]));
|
}
|
|
//已存在的特殊折扣
|
ExistProdSDMap.clear();
|
List<Dealer_Product__c> DealerProductList = [select Id, Special_Discount__c,Dealer_Product2__c
|
FROM Dealer_Product__c
|
WHERE Dealer_Contact__c = :accountId
|
AND Special_Discount__c != null];
|
for(Dealer_Product__c ahlc : dealerProductList){
|
ExistProdSDMap.put(ahlc.Dealer_Product2__c, ahlc);
|
}
|
|
for(product2Info prd : productInfoList){
|
if(ExistProdSDMap.containsKey(prd.pro.Id)){
|
prd.dealerPro = ExistProdSDMap.get(prd.pro.Id);
|
prd.specialDiscount = ExistProdSDMap.get(prd.pro.Id).Special_Discount__c;
|
}
|
}
|
/*}else{
|
productInfoList = searchAllProduct();
|
//已存在的产品促销信息
|
if(nowContactMap.size() > 0){
|
List<Dealer_Product__c> dealerProductList = [select Id, Dealer_Product2__c,Dealer_Contact__c,
|
Special_Campaign_Price__c,Campaign_StartDate__c,
|
Campaign_EndDate__c,OrderGoods_Limit__c
|
FROM Dealer_Product__c
|
WHERE Dealer_Contact__c in :nowContactMap.keySet()
|
AND Promotion_No__c = :recordId];
|
for(Dealer_Product__c ahlc : dealerProductList){
|
existRecordsMap.put('' + ahlc.Dealer_Contact__c + ahlc.Dealer_Product2__c,ahlc);
|
agencyedHospitalMap.put(ahlc.Dealer_Product2__c, ahlc);
|
}
|
for(product2Info prd : productInfoList){
|
if(agencyedHospitalMap.containsKey(prd.pro.Id)){
|
//prd.check = true;
|
prd.dealerPro = agencyedHospitalMap.get(prd.pro.Id);
|
}
|
}
|
}
|
}*/
|
productInfoList.sort();
|
//总件数
|
totalcount = productInfoList.size();
|
//页数
|
pagecount=(totalcount + pagesize - 1) / pagesize;
|
makeCurrentPageRecords(productInfoList);
|
return null;
|
}
|
|
//编辑当前页内容
|
public void makeCurrentPageRecords(List<product2Info> productInfoList){
|
Integer startIdx;
|
Integer endIdx;
|
productInfoListview = new List<product2Info>();
|
/*
|
List<product2Info> reSet = new List<product2Info>();
|
Map<String, String> selectedIdMap = new Map<String, String>();
|
for(product2Info prd : productInfoListview){
|
if(prd.check == true){
|
selectedIdMap.put(prd.pro.Id,prd.pro.Id);
|
reSet.add(prd);
|
}
|
}
|
|
if(reSet.size() > 0){
|
productInfoListview = reSet;
|
}
|
*/
|
startIdx = (currentpage-1) * pagesize;
|
endIdx = (currentpage-1) * pagesize+ pagesize;
|
if (endIdx > productInfoList.size()){
|
endIdx = productInfoList.size();
|
}
|
|
for(Integer i=startIdx; i < endIdx ; i++){
|
//if(selectedIdMap.containsKey(productInfoList.get(i).pro.Id)){
|
// continue;
|
//}
|
//else{
|
productInfoListview.add(productInfoList.get(i));
|
//}
|
}
|
|
productRecoedsCount = productInfoListview.size();
|
|
}
|
|
|
class product2Info implements Comparable {
|
public Boolean check { get; set; }
|
public Decimal specialDiscount { get; set; }
|
public Product2__c pro { get; set; }
|
public Dealer_Product__c dealerPro { get; set; }
|
|
public product2Info(Product2__c e) {
|
check = false;
|
pro = e;
|
dealerPro = new Dealer_Product__c();
|
specialDiscount = null;
|
}
|
|
public Integer compareTo(Object compareTo) {
|
product2Info compareToesd =(product2Info)compareTo;
|
Integer returnValue = 0;
|
if(check == true){
|
returnValue = -1;
|
}else{
|
if (specialDiscount == null){
|
returnValue = 1;
|
}else{
|
if (specialDiscount > compareToesd.specialDiscount) {
|
returnValue = -1;
|
} else if (specialDiscount < compareToesd.specialDiscount) {
|
returnValue = 1;
|
}
|
}
|
}
|
return returnValue;
|
}
|
}
|
}
|