public without sharing class PrintConsumblePDFController {
|
/*****************検索用******************/
|
public Consumable_order__c coc { get; set; }
|
public String gestName{get;set;}
|
//供货商名称
|
public String addressName {get;set;}
|
/** 1ページに表示する明細の数です。 */
|
private Integer rowSize = 32;
|
|
/** 最終ページに表示する明細の数です。 */
|
private Integer lastRowSize = 24;
|
|
/** 製品名を開業する文字数です。 */
|
private Integer nameMax = 23;
|
/** 印刷するページ数です。 */
|
public Integer maxPageNumber { get; set; }
|
/** 印刷対象の見積の配下にある見積品目データです。 */
|
public List<ConsumableorderdetailsInfo[]> printRecords {get; private set;}
|
public String baseUrl {get;private set;}
|
|
// 产品 ID
|
private String ESetId = '';
|
private String userName = '';
|
|
//经销商管理编码 -- 电子签收ID号
|
public String idName{get;set;}
|
|
public PrintConsumblePDFController(){
|
//Apexpages.currentPage().getHeaders().put('X-UA-Compatible', 'IE=8');
|
baseUrl = URL.getSalesforceBaseUrl().toExternalForm();
|
ESetId = ApexPages.currentPage().getParameters().get('esetId');
|
}
|
public void init(){
|
userName = UserInfo.getUserId();
|
List<user> Useracc = New List<user>();
|
Useracc = [select name,accountid from user where id =:userName];
|
String accountid = Useracc[0].accountid;
|
//update by rentx 2020-11-11 start CHAN-BV2677
|
// List<account> accountInfo = [SELECT name FROM account WHERE id =:accountid];
|
List<account> accountInfo = [SELECT name,Management_FormulaCode__c FROM account WHERE id =:accountid];
|
gestName = accountInfo[0].name;
|
idName = accountInfo[0].Management_FormulaCode__c;
|
//update by rentx 2020-11-11 end CHAN-BV2677
|
|
coc = new Consumable_order__c();
|
List<ConsumableorderdetailsInfo> ConsumableorderdetailsRecords = new List<ConsumableorderdetailsInfo>();
|
List<Consumable_Orderdetails__c> CountSet = new List<Consumable_Orderdetails__c>();
|
if(ESetId== NULL || ESetId==''){
|
}else{
|
List<Consumable_order__c> qs = New List<Consumable_order__c>();
|
qs = [select Id,Name,Order_status__c,Dealer_Info__c,
|
Order_ForHospital__c,Deliver_date__c,Order_Reason__c,
|
Order_date__c,Total_amount__c,Order_ProType__c,
|
Offers_Price__c,Order_effective_contact__r.Business_Assistant__r.Province_Text__c
|
From Consumable_order__c
|
Where Id =:ESetId];
|
if (qs.size()>0){
|
coc = qs[0];
|
}
|
this.rowSize = 42;
|
this.lastRowSize = 42;
|
this.nameMax = 18;
|
// 選択済みの明细を取得
|
bindQuoteLineData();
|
this.getShipmentaddress();
|
}
|
}
|
|
/**
|
* 見積品目データを取得して、インスタンス変数にセットします。
|
*/
|
private void bindQuoteLineData(){
|
System.debug('ESetId +++++' + ESetId);
|
this.maxPageNumber = 0;
|
String nowId = coc.Id;
|
Integer repeatCount = null;
|
String nowName = null, nowRightAsstModelNo = null;
|
//String nowCompany = null;
|
boolean hasEnglish = false;
|
Consumable_Orderdetails__c work = null;
|
List<String> nameStringArray = null;
|
Consumable_Orderdetails__c[] itemsOrg = [select Id, Name,
|
Consumable_order__c,
|
Consumable_Product__c,
|
Consumable_Product__r.Name,
|
Consumable_Product__r.Name__c,
|
CFDA_Status__c,
|
Consumable_Count__c,
|
Consumable_Product__r.Intra_Trade_List_RMB__c,
|
Consumable_Product__r.Asset_Model_No__c,
|
Consumable_Product__r.Product2__r.SalesPackagingUnit_Chinese__c,
|
Consumable_Product__r.Product2__r.ProduceCompany_F__c,
|
Consumable_Product__r.Product2__r.ProduceCompany__c,
|
Sum_of_money__c,
|
Dealer_Custom_Price__c,
|
Lose_reason__c,
|
ProduceCompany__c,
|
ProductPacking_list_manual__c,
|
CFDA_No__c,
|
Intra_Trade_List_RMB__c,
|
Qty_Unit__c,
|
Asset_Model_No__c
|
from Consumable_Orderdetails__c
|
where Consumable_order__c = :ESetId
|
order by Name];
|
System.debug('itemsOrg+++++' + itemsOrg.size());
|
Consumable_Orderdetails__c[] items = new List<Consumable_Orderdetails__c>();
|
for (Integer i = 0; i < itemsOrg.size(); i++) {
|
nowName = itemsOrg[i].Consumable_Product__r.Name__c == null ? '' : itemsOrg[i].Consumable_Product__r.Name__c;
|
//CHAN-B368WS 当产品编号为:N/A时,打印报价单/合同配置单/系统合同配置单时,打印的产品型号处空白(现在显示产品CODE)
|
if(itemsOrg[i].Asset_Model_No__c == '' || itemsOrg[i].Asset_Model_No__c == 'N/A'){
|
nowRightAsstModelNo = '';
|
}else if( nowName.indexOf( ':') >= 0) {
|
nowRightAsstModelNo = nowName.subString( 0, nowName.indexOf( ':'));
|
nowName = nowName.subString( nowName.indexOf( ':')+1);
|
}
|
else if( nowName.indexOf( ':') >= 0) {
|
nowRightAsstModelNo = nowName.subString( 0, nowName.indexOf( ':'));
|
nowName = nowName.subString( nowName.indexOf( ':')+1);
|
}
|
else {
|
nowRightAsstModelNo = '';
|
}
|
nameStringArray = new List<String>();
|
// 20220824 ljh SWAG-CHKAMM update start
|
// repeatCount = (nowName.length() / nameMax) + ( Math.mod( nowName.length(), nameMax) > 0 ? 1 : 0);
|
if(String.isBlank(nowName)){
|
repeatCount = 1;
|
}else{
|
repeatCount = (nowName.length() / nameMax) + ( Math.mod( nowName.length(), nameMax) > 0 ? 1 : 0);
|
}
|
// 20220824 ljh SWAG-CHKAMM update end
|
//ApexPages.addmessage(new ApexPages.message(ApexPages.severity.WARNING, 'repeatCount!' + repeatCount));
|
// 生产企业 注释原代码
|
// nowCompany = itemsOrg[i].Consumable_Product__r.Product2__r.ProduceCompany_F__c;
|
String nowCompany = null;
|
if(itemsOrg[i].Consumable_Product__r.Product2__r.ProduceCompany__c !=null){
|
nowCompany = getProduceCompanyName(itemsOrg[i].Consumable_Product__r.Product2__r.ProduceCompany__c);
|
}
|
if (nowCompany == null) nowCompany = '';
|
//hasEnglish = Pattern.matches('.*[a-zA-Z]+.*', nowCompany);
|
//Integer companyMax = hasEnglish ? 16 : 12;
|
//Integer repeatCount2 = (nowCompany.length() / companyMax) + ( Math.mod( nowCompany.length(), companyMax) > 0 ? 1 : 0);
|
//String descri = itemsOrg[i].Description == null ? '' : itemsOrg[i].Description;
|
//Integer repeetCount3 = (descri.length() / 12) + (Math.mod(descri.length(), 12) > 0 ? 1 : 0);
|
|
|
|
for ( Integer j = 0; j < repeatCount; j++) {
|
if (( j + 1) == repeatCount) {
|
nameStringArray.add( nowName.substring( j * nameMax));
|
}
|
else {
|
nameStringArray.add( nowName.substring( j * nameMax, (j+1) * nameMax));
|
}
|
}
|
//ApexPages.addmessage(new ApexPages.message(ApexPages.severity.WARNING, 'nameStringArray!' + nameStringArray));
|
for ( Integer k = 0; k < repeatCount; k++) {
|
if ( k == 0) {
|
work = itemsOrg[i];
|
work.Remarks__c = ':';
|
work.Product_code__c = nowRightAsstModelNo;
|
work.AgencyName_text1__c = nowCompany.trim();
|
work.Shipment_Count__c = i + 1;
|
}
|
else {
|
work = new Consumable_Orderdetails__c();
|
work.Remarks__c = '';
|
work.Product_code__c = '';
|
}
|
work.Lose_reason__c = nameStringArray[k];
|
items.add(work);
|
}
|
}
|
|
printRecords = new List<ConsumableorderdetailsInfo[]>();
|
|
ConsumableorderdetailsInfo[] pageItems = new ConsumableorderdetailsInfo[]{};
|
Integer counter = 0;
|
|
for (Integer i = 0; i < items.size(); i++) {
|
|
if ( counter <= rowSize) {
|
pageItems.add(new ConsumableorderdetailsInfo(items[i]));
|
counter++;
|
}
|
if ( counter == rowSize) {
|
counter = 0;
|
printRecords.add( pageItems);
|
pageItems = new ConsumableorderdetailsInfo[]{};
|
this.maxPageNumber += 1;
|
}
|
}
|
if ( !pageItems.isEmpty()) {
|
printRecords.add( pageItems);
|
this.maxPageNumber += 1;
|
}
|
|
if ( printRecords.size() > 0) {
|
List<ConsumableorderdetailsInfo> lastList = printRecords[printRecords.size()-1];
|
if ( lastList.size() > lastRowSize) {
|
printRecords.add( new List<ConsumableorderdetailsInfo>());
|
this.maxPageNumber += 1;
|
}
|
}
|
System.debug('printRecords +++++' + printRecords);
|
}
|
|
public class ConsumableorderdetailsInfo {
|
public Consumable_Orderdetails__c esd { get; set; }
|
public Product2__c Prod { get; set; }
|
public Integer lineNo { get; set; }
|
public String unit { get; set; }
|
|
// 订单明细用
|
public ConsumableorderdetailsInfo(Consumable_Orderdetails__c e) {
|
esd = e;
|
Prod = e.Consumable_Product__r;
|
lineNo = Integer.valueOf(e.Shipment_Count__c);
|
if(Prod != null){
|
unit = Prod.Product2__r.SalesPackagingUnit_Chinese__c;
|
if(String.isBlank(unit)){
|
unit = '件';
|
}
|
}
|
//unit = Prod.Product2__r.SalesPackagingUnit_Chinese__c;
|
//if(String.isBlank(unit)){
|
// unit = '件';
|
//}
|
}
|
}
|
|
private static Map<String, String> addressNameApiMap = new Map<String, String> {
|
'湖南省' => '奥林巴斯(北京)销售服务有限公司广州分公司',
|
'四川省' => '奥林巴斯(北京)销售服务有限公司广州分公司',
|
'广东省' => '奥林巴斯(北京)销售服务有限公司广州分公司',
|
'贵州省' => '奥林巴斯(北京)销售服务有限公司广州分公司',
|
'云南省' => '奥林巴斯(北京)销售服务有限公司广州分公司',
|
'广西自治区' => '奥林巴斯(北京)销售服务有限公司广州分公司',
|
'深圳市' => '奥林巴斯(北京)销售服务有限公司广州分公司',
|
'湖北省' => '奥林巴斯(北京)销售服务有限公司广州分公司',
|
'重庆市' => '奥林巴斯(北京)销售服务有限公司广州分公司',
|
'北京市' => '奥林巴斯(北京)销售服务有限公司',
|
'吉林省' => '奥林巴斯(北京)销售服务有限公司',
|
'大连市' => '奥林巴斯(北京)销售服务有限公司',
|
'黑龙江省' => '奥林巴斯(北京)销售服务有限公司',
|
'内蒙古' => '奥林巴斯(北京)销售服务有限公司',
|
'山东省' => '奥林巴斯(北京)销售服务有限公司',
|
'甘肃省' => '奥林巴斯(北京)销售服务有限公司',
|
'青岛市' => '奥林巴斯(北京)销售服务有限公司',
|
'辽宁省' => '奥林巴斯(北京)销售服务有限公司',
|
'河北省' => '奥林巴斯(北京)销售服务有限公司',
|
'山西省' => '奥林巴斯(北京)销售服务有限公司',
|
'天津市' => '奥林巴斯(北京)销售服务有限公司',
|
'新疆自治区' => '奥林巴斯(北京)销售服务有限公司',
|
'陕西省' => '奥林巴斯(北京)销售服务有限公司',
|
'青海省' => '奥林巴斯(北京)销售服务有限公司',
|
'宁夏自治区' => '奥林巴斯(北京)销售服务有限公司',
|
'河南省' => '奥林巴斯(北京)销售服务有限公司',
|
'浙江省' => '奥林巴斯(北京)销售服务有限公司上海分公司',
|
'安徽省' => '奥林巴斯(北京)销售服务有限公司上海分公司',
|
'江西省' => '奥林巴斯(北京)销售服务有限公司上海分公司',
|
'福建省' => '奥林巴斯(北京)销售服务有限公司上海分公司',
|
'江苏省' => '奥林巴斯(北京)销售服务有限公司上海分公司',
|
'上海市' => '奥林巴斯(北京)销售服务有限公司上海分公司'
|
};
|
//获取办事处地址
|
private void getShipmentaddress(){
|
//CHAN-B42D6F 安徽ET特约经销商来的询价 SAP上传省 紧急对应为北京 以后会修改 TODO
|
//CHAN-BTF64C 安徽ENG经销商的询价默认SAP上传省修改 update by rentongxiao 2020-09-14 start
|
// String province = coc.Order_effective_contact__r.Business_Assistant__r.Province_Text__c == '安徽省' ? '北京市' : coc.Order_effective_contact__r.Business_Assistant__r.Province_Text__c;
|
String province = coc.Order_effective_contact__r.Business_Assistant__r.Province_Text__c == '安徽省' && coc.Order_ProType__c == 'ET' ? '北京市' : coc.Order_effective_contact__r.Business_Assistant__r.Province_Text__c;
|
//CHAN-BTF64C 安徽ENG经销商的询价默认SAP上传省修改 update by rentongxiao 2020-09-14 end
|
|
|
if(addressNameApiMap.get(province) != null){
|
this.addressName = addressNameApiMap.get(province);
|
}else{
|
this.addressName = ' ';
|
}
|
}
|
|
//产品主数据生产企业 获取企业名称
|
private String getProduceCompanyName(String produceCompany){
|
//获取企业名称 (生产企业,注册证状态)
|
//getProduceCompanyName(String produceCompany,String sfdaApprobatedStatus)
|
//取前一部分 eg: 生产企业名称 :
|
//String firstHalf = '';
|
|
//①统一中英文符号 找不到就返回原数据
|
String tempProduceCompany = produceCompany.replace(';', ';');
|
tempProduceCompany = tempProduceCompany.replace(':', ':');
|
|
//②先截取第一个分号前的数据
|
if(tempProduceCompany.indexOf(';')>0){
|
tempProduceCompany = tempProduceCompany.substring(0, tempProduceCompany.indexOf(';'));
|
}
|
|
|
//③截取第一个分号前 冒号后 分号前的数据
|
if(tempProduceCompany.indexOf(':') > 0){
|
//如果需要传入注册证状态的话 再拼接前一部分
|
//firstHalf = tempProduceCompany.substring(0, tempProduceCompany.indexOf(':')+1);
|
|
tempProduceCompany = tempProduceCompany.substring(tempProduceCompany.indexOf(':')+1, tempProduceCompany.length());
|
}
|
|
|
//④正则 只取出中文 不包括 全角符号 # % 不包括英文名
|
//[\u4E00-\u9FA5\\s]+ 多个汉字,包括空格
|
//[\u4E00-\u9FA5]+ 多个汉字,不包括空格
|
//[\u4E00-\u9FA5] 一个汉字
|
///u0800-/u4e00 日文
|
//输出中日文
|
Pattern p = Pattern.compile('([\u0800-\u9fa5()()]+)');
|
Matcher pm = p.matcher(tempProduceCompany);
|
if( pm.find() ){
|
system.debug('123');
|
tempProduceCompany = pm.group(0);
|
}
|
//如果注册证等于不要 拼接前一部分
|
// if(sfdaApprobatedStatus == '不要'){
|
// //如果前半部分不为空 则拼接上前半部分
|
// if(firstHalf!= ''){
|
// tempProduceCompany = firstHalf +tempProduceCompany;
|
// }
|
// }
|
return tempProduceCompany;
|
}
|
}
|