Advertisement
Guest User

Untitled

a guest
Jan 18th, 2018
375
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 31.40 KB | None | 0 0
  1. //Trace.error("CardIssue. Функция обработки.newStatus="+newStatus.Value , Radix::Arte::EventSource:UserFunc);
  2. Tran tran = Tran.currentlyExecutedTran;
  3. Subject subject = null;
  4.  
  5. Trace.event("process. app.data: " + app.dataAsStr, Radix::Arte::EventSource:TestCase);
  6.  
  7. XmlHelper xmlHlp = new  XmlHelper(app.data, "http://schemas.tranzaxis.com/card-issue.xsd");
  8. final Str CardProductId = xmlHlp.getStr("CardIssue/CardProductId",false),
  9.         //Period = xmlHlp.getStr("CardIssue/Period",false),
  10.         DeliveryBranchId = xmlHlp.getStr("CardIssue/DeliveryBranchId",false),
  11.         CourierCityId = xmlHlp.getStr("CardIssue/CourierCityId",false),
  12.         CourierAddressInput = xmlHlp.getStr("CardIssue/CourierAddressInput",false),
  13.         ContractId = xmlHlp.getStr("CardIssue/ContractId",false),
  14.         FeeContractId = xmlHlp.getStr("CardIssue/FeeContractId",false),
  15.         //FeeAmt = xmlHlp.getStr("CardIssue/FeeAmt",false).split(" ")[0],
  16.         TariffPlanGuid = xmlHlp.getStr("CardIssue/CommissionTypeId",false),
  17.         //ThirdPerson = xmlHlp.getStr("CardIssue/ThirdPerson",false),
  18.         ThirdPersonId = xmlHlp.getStr("CardIssue/ThirdPersonId",false),
  19.         FirstNameLat = xmlHlp.getStr("CardIssue/FirstNameLat",false),
  20.         LastNameLat = xmlHlp.getStr("CardIssue/LastNameLat",false),
  21.         BalanceRestriction = xmlHlp.getStr("CardIssue/BalanceRestriction",false),
  22.         //ThirdPersonFIO = xmlHlp.getStr("CardIssue/ThirdPersonFIO",false),
  23.         ThirdPersonBirth = xmlHlp.getStr("CardIssue/ThirdPersonBirth",false),
  24.         ThirdPerson = (ThirdPersonBirth != "" ? "on" : "");
  25.         //ThirdPersonDoc = xmlHlp.getStr("CardIssue/ThirdPersonDoc",false),
  26.         //ThirdPersonReg = xmlHlp.getStr("CardIssue/ThirdPersonReg",false);
  27.        
  28.  
  29. Bool balanceRstr = (BalanceRestriction == "on" ? true : false);
  30. Str DesignIdStr = xmlHlp.getStr("CardIssue/DesignId",false);
  31. Int DesignId = DesignIdStr != null && DesignIdStr.length() > 0 ? Int.valueOf(DesignIdStr) : null;
  32.  
  33. class XXX {
  34.     /* 20.11.17-П.С.С. Метод перестал работать, прикрепление фото перенес в создание карты (SD-7880)
  35.     void attachPhoto(Card card, TypesXsd:Attachment att, Tran tran, TypesXsd:Attachments atts){
  36.         TypesXsd:Attachments attachments = null;
  37.         if(att != null && tran.rqSpecApplication.Attachments != null)
  38.             attachments = tran.rqSpecApplication.Attachments;
  39.         if(att != null && tran.rqSpecApplication.Attachments == null && atts != null){
  40.             //TypesXsd:AttachmentsDocument attDoc = TypesXsd:AttachmentsDocument.Factory.newInstance();
  41.             attachments = TypesXsd:Attachments.Factory.newInstance();
  42.             for(TypesXsd:Attachment at : atts.AttachmentList){
  43.                 at.Id = null;
  44.                 attachments.addNewAttachment().set(at);
  45.             }
  46.         }
  47.         //Trace.warning("CardIssue. rattachments:\n" + attachments.toString(),Radix::Arte::EventSource:App);
  48.         if(attachments != null && attachments.sizeOfAttachmentArray() > 0){
  49.                 TypesXsd:Attachments.Attachment attachment = attachments.getAttachmentArray(0);
  50.                 attachment.TypeId = card.institution.photoAttachTypeId;    // 08.07.2015    Белоус В.И.
  51.                 Attachment.adminModify(card, attachments, null, null);
  52.         }
  53.     }
  54.     */
  55.     void notificator1(Card card, Application app, boolean on3rdCardHoldr){
  56.         //Прикладываем заявление на выпуск карты к карте
  57.         Str RepGuid = app.getTypeParamStr("ReportApplication");
  58.         if(on3rdCardHoldr == true)
  59.             RepGuid = app.getTypeParamStr("ReportApplication3rd");
  60.         Report report = ReportsServerUtils.instantiateReportByClassId(Id.Factory.loadFrom(RepGuid));
  61.         java.util.HashMap<Id , Object> pv = new java.util.HashMap<Id , Object>();
  62.         pv.put(report.ContextParameterId, card);
  63.         java.io.ByteArrayOutputStream bos = new java.io.ByteArrayOutputStream();
  64.         try {
  65.             report.execute(bos, Radix::Reports::ReportExportFormat:PDF , pv);
  66.             bos.flush();
  67.         } catch (Exception e) {
  68.             Trace.warning("CardIssue. report exec error:\n" + e.getMessage().toString(),Radix::Arte::EventSource:App);
  69.             //throw new DeclineException(Tx::Tran::TranResult:Rejected,"Отчёт не сформирован.","CardIssue.", e);
  70.         }
  71.         TypesXsd:Attachments attachments = TypesXsd:Attachments.Factory.newInstance();
  72.         TypesXsd:Attachments.Attachment att = attachments.addNewAttachment();
  73.         att.Title = "Заявление на выпуск карты";
  74.         att.TypeId = 8;
  75.         TypesXsd:Attachment.Pages pages = att.addNewPages();
  76.         TypesXsd:AttachmentPage page = pages.addNewPage();
  77.         page.Format = Radix::Common::MimeType:Pdf;
  78.         page.CreateTime = Arte.getCurrentTime();
  79.         page.Number = 1;
  80.         page.Content = bos.toByteArray();
  81.         Attachment.adminModify(card, attachments, null, null);
  82.     }
  83.     void notificator2(Application app, Branch branch, Tran tran){
  84.         Str email = "";
  85.        
  86.         if (app.getTypeParamStr("email") != null)
  87.             email = app.getTypeParamStr("email") + ";";
  88.        
  89.         // 22.09.2015   grigorjev.d.a    Исправление механизма отправки заявления на выпуск карты на 3-е лицо (отправляется копия на офис получения карты)
  90.         if (branch != null && branch.department != null && branch.department.address != null && branch.department.address.email != null)
  91.             email += branch.department.address.email;
  92.        
  93.         //--26.08.15-П.С.С. - Выбираем кому отправлять в зависимости от города--//
  94.         if (DeliveryBranchId == "777") {
  95.             if (CourierCityId == "208") {
  96.                 email = app.getTypeParamStr("email_GDP_Ekb");    
  97.             } else if (CourierCityId == "228") {
  98.                 email = app.getTypeParamStr("email_GDP_Chlb");
  99.             }
  100.         }
  101.        
  102.         //Str emailAddress = (branch != null ? branch.department.address.email : email);
  103.         //Trace.warning("CardIssue. emailAddressr:\n" + emailAddress,Radix::Arte::EventSource:App);
  104.         //emailAddress = "alivankina.n.m@neyvabank.ru";
  105.  
  106.         if (email != null && email != "") {
  107.             OutMessage om = new OutMessage();
  108.             om.init();
  109.             om.channelKind = Radix::PersoComm::ChannelKind:Email;
  110.             om.dueTime = Arte.getCurrentTime();
  111.             om.importance = Radix::PersoComm::Importance:Normal;
  112.             om.histMode = Radix::PersoComm::HistMode:Audit;
  113.             om.sourceMsgId = tran.id.toString();
  114.             om.sourcePid = tran.getPid().toString();
  115.             om.sourceEntityGuid = "aecRWNQYFPOVBEQTB35ZVSZRHIH7Q";
  116.             om.tranId = tran.id;
  117.             //om.address = emailAddress;
  118.             om.address = email;
  119.             om.subject = "Заявление на выпуск карты №" + app.id + " (через БоЛ)";
  120.             om.body = "Заявление на выпуск карты (через БоЛ).\n\nКлиент: " + app.subject.calcSubjectTitle() + "(" + app.subject.rid + ").";
  121.             if (DeliveryBranchId == "777") {
  122.                 om.body += "\n\nДоставка курьером. \nАдрес доставки: " + CourierAddressInput;
  123.             }
  124.             if(app.status != Tx::Applications::AppStatus:Accepted)
  125.                 om.body += "\n\nНеобходимо обработать заявление(детали во вложении).";
  126.                
  127.             //Формирование отчета по транзакции
  128.             Str RepGuid = app.getTypeParamStr("ReportNotice");
  129.             Report report = ReportsServerUtils.instantiateReportByClassId(Id.Factory.loadFrom(RepGuid));
  130.             java.util.HashMap<Id , Object> pv = new java.util.HashMap<Id , Object>();
  131.             pv.put(report.ContextParameterId, app);
  132.             Attachment attachment = new Attachment();
  133.             attachment.init();
  134.             attachment.messId = om.id;
  135.             attachment.seq = 1;
  136.             attachment.mimeType = Radix::Common::MimeType:Pdf;
  137.             attachment.title = "Application.pdf";
  138.             attachment.data =  Arte.createTemporaryBlob();
  139.    
  140.             java.io.OutputStream attachmentStream = null;
  141.             try{
  142.                 attachmentStream = attachment.data.setBinaryStream(0);
  143.                 report.execute(attachmentStream , Radix::Reports::ReportExportFormat:PDF , pv);
  144.                 attachmentStream.flush();
  145.             }catch(Exception e){
  146.                 Trace.warning("CardIssue. report exec error:\n" + Trace.exceptionStackToString(e),Radix::Arte::EventSource:App);
  147.                 //throw new DeclineException(Tx::Tran::TranResult:Rejected,"report exec error","CardIssue.", e);
  148.             }finally{
  149.                 try{
  150.                     if (attachmentStream != null) attachmentStream.close();
  151.                 } catch(Exception e){
  152.                     Trace.warning("CardIssue. Unable to close file out resource!:\n" + e.getStackTrace().toString(),Radix::Arte::EventSource:App);
  153.                 }
  154.             }
  155.             attachment.create();
  156.         }
  157.     }
  158. }
  159. XXX xxx = new XXX();
  160.  
  161. //--П.С.С.-26.08.15 - Если доставка курьером, то ИД отделения берём из города доставки,--//
  162. //--иначе берем Числовой код из DeliveryBranchId--//
  163. Branch cardDeliveryBranch = Branch.loadByCode(app.instId, 25); // по-умолчанию отделение на Чапаева
  164. if (DeliveryBranchId == "777") {
  165.     cardDeliveryBranch = Branch.loadByPK(Long.valueOf(CourierCityId),true);
  166. } else {
  167.     cardDeliveryBranch = Branch.loadByCode(app.instId,Long.valueOf(DeliveryBranchId));
  168. }
  169.  
  170. TypesXsd:Attachments atts = Attachment.adminRead(app,null);
  171. TypesXsd:Attachment att = null;
  172. if(atts != null && atts.AttachmentList != null && atts.AttachmentList.size() > 0){
  173.     att = atts.AttachmentList.get(0);
  174.     att.TypeId = app.institution.photoAttachTypeId;
  175. }
  176.  
  177.  
  178. if(newStatus == Tx::Applications::AppStatus:Submitted){
  179.     if(ThirdPerson == "on" && ThirdPersonId == null){
  180.         newStatus = Tx::Applications::AppStatus:InProc;    // на ручную обработку (на 3-е лицо)
  181.         xxx.notificator2(app, cardDeliveryBranch, tran);
  182.     } else {
  183.         newStatus = Tx::Applications::AppStatus:Accepted;    // автоматическая обработка
  184.         subject = app.subject;
  185.         xmlHlp.addElement("CardIssue/ThirdPersonId",null);
  186.         xmlHlp.setStr("CardIssue/ThirdPersonId",subject.id.toString());
  187.     }
  188. }
  189.  
  190. // ручная обработка
  191. if(newStatus == Tx::Applications::AppStatus:InProc){
  192.     app.status = newStatus;
  193. }
  194. if(newStatus == Tx::Applications::AppStatus:Rejected){
  195.     app.status = newStatus;
  196. }
  197.  
  198. // уточнение клиента - держателя карты
  199. if(subject == null && app.status == Tx::Applications::AppStatus:InProc && newStatus == Tx::Applications::AppStatus:Accepted){
  200.     Str personRid = tran.rqUserAttrs.getStr("personRid");
  201.     if(personRid == null)
  202.         throw new DeclineException(Tx::Tran::TranResult:SystemError, "Ошибка при обработке заявления, не указан клиент", "CardIssue. Функция обработки.");
  203.     subject = Subject.loadByRid(personRid, 1);
  204.     if(subject == null)
  205.             subject = Subject.loadByRid(personRid,null);
  206.     if(subject == null)
  207.         throw new DeclineException(Tx::Tran::TranResult:SystemError, "Ошибка при обработке заявления, указанный клиент не найден!", "CardIssue. Функция обработки.");
  208.     if(ThirdPerson == "on"){
  209.         xmlHlp.addElement("CardIssue/ThirdPersonId",null);
  210.         xmlHlp.setStr("CardIssue/ThirdPersonId",subject.id.toString());
  211.     }
  212. }
  213.  
  214. if(newStatus == Tx::Applications::AppStatus:Accepted && subject != null){
  215.     /*
  216.     if(ThirdPerson != "on"){
  217.         Person pers = (Person)app.subject;
  218.         pers.firstNameLat = FirstNameLat;
  219.         pers.lastNameLat = LastNameLat;
  220.     }  
  221.     */
  222.     ContractType.Issuing contractType = null;    
  223.     Int contractTypeId = null;
  224.     Int contractLinkProfileId = null;
  225.     CardProduct cardProduct = null;
  226.     Int cardProductId = null;
  227.     Int cardProfileId = null;    
  228.     //Num fee = null;
  229.    
  230.     contractTypeId = (ThirdPerson == "on" ? app.getTypeParamInt("CardProductId3_" + CardProductId) : app.getTypeParamInt("CardProductId_" + CardProductId));
  231.     //contractTypeId = (ThirdPersonBirth != null ? app.getTypeParamInt("CardProductId3_" + CardProductId) : app.getTypeParamInt("CardProductId_" + CardProductId));
  232.         xmlHlp.addElement("CardIssue/ContractTypeId",null);
  233.         xmlHlp.setStr("CardIssue/ContractTypeId",contractTypeId.toString());
  234.     contractType = (ContractType.Issuing)ContractType.get(contractTypeId);
  235.     if(contractType == null)
  236.         throw new DeclineException(Tx::Tran::TranResult:SystemError, "Ошибка при обработке заявления, не найден карточный продукт", "CardIssue. Функция обработки.");
  237.    
  238.     for(TokenProduct tp : contractType.getTokenProductList()){
  239.         if(tp instanceof CardProduct){
  240.             CardProduct cp = (CardProduct)tp;
  241.             if(cp.hasPhoto == true && att != null)
  242.                 cardProduct = cp;
  243.             if(cp.hasPhoto == false && att == null)
  244.                 cardProduct = cp;
  245.         }
  246.     }
  247.     if(cardProduct == null)
  248.          throw new DeclineException(Tx::Tran::TranResult:SystemError, "Ошибка при обработке заявления, не найден карточный продукт.", "CardIssue. Функция обработки.");
  249.    
  250.     cardProductId = cardProduct.id;
  251.     cardProfileId = contractType.tokenProfiles.get(0) != null ? contractType.tokenProfiles.get(0).id : contractType.getUserParamInt("tokenProfile_" + cardProductId.toString()); // 07.11.17-П.С.С. - Отказываемся от параметров в пользу св-в
  252.     //cardProfileId = contractType.getUserParamInt("tokenProfile_" + cardProductId.toString());
  253.     //fee = contractType.getUserParamNum("feeProductId_" + cardProductId.toString());
  254.     contractLinkProfileId = contractType.getUserParamInt("linkProfile_" + cardProductId.toString());
  255.     if(contractLinkProfileId == null)
  256.         contractLinkProfileId = contractType.getUserParamInt("defaultLinkProfile");
  257.    
  258.     //if(!fee.toString().equals(FeeAmt))
  259.     //    throw new DeclineException(Tx::Tran::TranResult:Rejected, "Сумма комиссии в заявлении клиента на выпуск карты не совпадает с суммой комиссии в настройках ТХ.(app:"+FeeAmt+",tx:"+fee.toString()+",contractid:"+contractTypeId.toString()+",cardProductId:"+cardProductId.toString()+")","Функция обработки заявления на выпуск карты через БоЛ.");
  260.    
  261.     // ГРУППОВАЯ ТРАНЗАКЦИЯ
  262.     TranXsd:Request rqG = TranXsd:Request.Factory.newInstance();
  263.     rqG.OriginatorInstId = app.instId;
  264.     rqG.ProcessorInstId = app.instId;
  265.     rqG.Kind = Tx::Tran::TranKind:Group;
  266.     rqG.LifePhase = Tx::Tran::LifePhase:Single;
  267.     rqG.CategoryText = "Обработка заявления клиента на карту, поданное через БоЛ.";
  268.     rqG.addNewSpecific().addNewGroup();
  269.     // КОМИССИЯ, временно не используем, переходим на тарифные планы ТХ.
  270.     /*if(FeeAmt != null && (new Num(FeeAmt)).compareTo(Num.ZERO) != 0){
  271.         TranXsd:Request rq = rqG.Specific.Group.addNewTran().addNewRequest();
  272.         rq.OriginatorInstId = rqG.OriginatorInstId;
  273.         rq.ProcessorInstId = rqG.ProcessorInstId;
  274.         rq.Kind = Tx::Tran::TranKind:Payment;
  275.         rq.LifePhase = Tx::Tran::LifePhase:Single;
  276.         rq.CategoryCode = app.getTypeParamStr("CategoryCode");
  277.         rq.CategoryText = app.getTypeParamStr("CategoryText").replace("product",cardProduct.title).replace("rid",(subject.rid!=null?subject.rid:"-")).replace("fio",subject.calcSubjectTitle());
  278.         rq.addNewParties();
  279.             rq.Parties.addNewCust();
  280.                 rq.Parties.Cust.ContractRid = FeeContractId;
  281.             rq.Parties.addNewPayee();
  282.                 rq.Parties.Payee.InstAcctMapGuid = app.getTypeParamStr("InstAcctMapGuid");
  283.                 rq.Parties.Payee.Type = Tx::Tran::PayeeType:Institution;
  284.                 rq.Parties.Payee.addNewOwner();
  285.                     rq.Parties.Payee.Owner.Rid = cardDeliveryBranch.code.toString();// cardDeliveryBranch.name;
  286.                     rq.Parties.Payee.Owner.Title = cardDeliveryBranch.notes;
  287.         rq.addNewMoneys();
  288.             rq.Moneys.addNewCust();
  289.                 rq.Moneys.Cust.Amt = new Num(FeeAmt);    // ПЕРЕДЕЛАТЬ
  290.                 rq.Moneys.Cust.Ccy = 810;
  291.             rq.Moneys.addNewClear();
  292.                 rq.Moneys.Clear.Amt = fee;
  293.                 rq.Moneys.Clear.Ccy = 810;
  294.     }*/
  295.     // МОДИФИКАЦИЯ КАРТОЧКИ КЛИЕНТА
  296.     if(ThirdPerson != "on"){
  297.         TranXsd:Request rq = rqG.Specific.Group.addNewTran().addNewRequest();
  298.         rq.OriginatorInstId = rqG.OriginatorInstId;
  299.         rq.ProcessorInstId = rqG.ProcessorInstId;
  300.         rq.Kind = Tx::Tran::TranKind:ModifySubject;
  301.         rq.LifePhase = Tx::Tran::LifePhase:Single;
  302.         rq.IsAdvice = true;
  303.         rq.TextMess = "noBankier";
  304.         rq.CategoryText = "Обновление информации в карточке клиента по заявлению клиента на карту через БоЛ.";
  305.         AdminXsd:Person pers = rq.addNewSpecific().addNewAdmin().addNewSubject().addNewPerson();
  306.         pers.Id = subject.id;
  307.         pers.FirstNameLat = FirstNameLat.toUpperCase();
  308.         pers.LastNameLat = LastNameLat.toUpperCase();
  309.     }
  310.     // КАРТОЧНЫЙ КОНТРАКТ
  311.     {
  312.         TranXsd:Request rq = rqG.Specific.Group.addNewTran().addNewRequest();
  313.         rq.OriginatorInstId = rqG.OriginatorInstId;
  314.         rq.ProcessorInstId = rqG.ProcessorInstId;
  315.         rq.Kind = Tx::Tran::TranKind:ModifyContract;
  316.         rq.LifePhase = Tx::Tran::LifePhase:Single;
  317.         rq.CategoryText = "Создание карточного контракта по заявлению клиента через БоЛ.";
  318.        
  319.         AdminXsd:Contract con = rq.addNewSpecific().addNewAdmin().addNewContract();
  320.         rq.Specific.Admin.ObjectMustExist = false;
  321.         con.ClientId = subject.id;
  322.         con.TypeId = contractTypeId;
  323.         con.Status = Tx::Contracts::Status:Active;
  324.        
  325.         AdminXsd:Contract.TariffPlans.TariffPlan tp = con.addNewTariffPlans().addNewTariffPlan();  
  326.         tp.TariffPlanGuid = TariffPlanGuid;
  327.         tp.StartOperDay = Arte.getCurrentLocalDate();
  328.         tp.StartTime = Arte.getCurrentTime();
  329.        
  330.         if(cardDeliveryBranch != null)
  331.             con.BranchId = cardDeliveryBranch.id;
  332.         AdminXsd:Contract.OutLinks links = con.addNewOutLinks();
  333.         AdminXsd:Contract.OutLinks.Link link = null;
  334.         link = links.addNewLink();    // связь на доступ
  335.             link.Kind = Tx::Contracts.Links::LinkKind:Access;
  336.             link.Contract2Rid = ContractId;
  337.             link.Status = Tx::Contracts.Links::LinkStatus:Active;
  338.             link.ProfileId = contractLinkProfileId;
  339.             /*if(contractLinkProfileId != null && BalanceRestriction != null){
  340.                 Profile.Contract2Contract profile =  (Profile.Contract2Contract)Profile.loadByPK(contractLinkProfileId,false);
  341.                 if(profile != null){
  342.                     for(Restriction restr : profile.getAllRestrictions(null)){
  343.                         if(restr.guid == "EXTAIWXGYFBNRE6FAGGIIEM5WE" || restr.guid == "IWL2FHYSFFFYVHRE23GERNBENQ"){
  344.                             AdminXsd:Link.Restrictions rrs = link.Restrictions != null ? link.Restrictions : link.addNewRestrictions();
  345.                             AdminXsd:Restriction rr = rrs.addNewRestriction();
  346.                             rr.Guid = restr.guid;
  347.                             rr.InUse = balanceRstr;
  348.                             rr.ClassGuid = restr.classGuid;
  349.                         }
  350.                     }
  351.                 }
  352.             }*/
  353.         link = links.addNewLink();     // связь на управление
  354.             link.Kind = Tx::Contracts.Links::LinkKind:Charge;
  355.             //link.Contract2Rid = ContractId; изменил на feeContractId
  356.             link.Contract2Rid = FeeContractId;        
  357.             link.Status = Tx::Contracts.Links::LinkStatus:Active;
  358.     }
  359.    
  360.     // КАРТА
  361.                
  362.     {
  363.         TranXsd:Request.Specific.Group.Tran tr = rqG.Specific.Group.addNewTran();
  364.         TranXsd:Request rq = tr.addNewRequest();
  365.         rq.OriginatorInstId = rqG.OriginatorInstId;
  366.         rq.ProcessorInstId = rqG.ProcessorInstId;
  367.         rq.Kind = Tx::Tran::TranKind:ModifyToken;
  368.         rq.LifePhase = Tx::Tran::LifePhase:Single;
  369.         rq.CategoryText = "Создание карты по заявлению клиента через БоЛ.";
  370.        
  371.         TokenAdminXsd:Token token = rq.addNewSpecific().addNewAdmin().addNewToken();
  372.         rq.Specific.Admin.ObjectMustExist = false;
  373.         TokenAdminXsd:Card card = null;
  374.         switch (cardProduct.technology){
  375.             case Tx::Tokens.Card::CardTechnology:Emv : card = token.addNewCardVsdc(); break;
  376.             case Tx::Tokens.Card::CardTechnology:Magnetic : card = token.addNewCardMagnetic(); break;
  377.             case Tx::Tokens.Card::CardTechnology:Virtual : card = token.addNewCardVirtual(); break;
  378.         }
  379.             card.ProductId = cardProductId;
  380.             card.ProfileId = cardProfileId;
  381.             card.DeliveryBranchId = cardDeliveryBranch.id;
  382.             card.Status = Tx::Tokens::TokenStatus:New;
  383.             card.LifePhaseId = 10;
  384.             card.ContractRid = "0";
  385.            
  386.             // 20.11.17-П.С.С. Метод attachPhoto перестал работать, прикрепление фото перенес в создание карты (SD-7880)
  387.             if (atts != null) {
  388.                 TypesXsd:Attachments attachments = TypesXsd:Attachments.Factory.newInstance();
  389.                 for (TypesXsd:Attachment at : atts.AttachmentList) {
  390.                     at.Id = null;
  391.                    
  392.                     for (TypesXsd:Attachment.Pages.Page p : at.Pages.PageList) {
  393.                         p.Id = p.Id.intValue() * 2;
  394.                     }
  395.                     attachments.addNewAttachment().set(at);
  396.                 }
  397.                 card.addNewAttachments().set(attachments);
  398.             }
  399.            
  400.             if (DesignId != null && cardProduct != null){
  401.                 CardDesign cardDesign = CardDesign.loadByPK(DesignId, false);
  402.                
  403.                 if (cardDesign != null){
  404.                     if (cardProduct.designs != null){
  405.                         if (cardProduct.designs.contains(cardDesign) == true){
  406.                             card.DesignId = DesignId;
  407.                         } else {
  408.                             Trace.error("У продукта " + cardProductId + "в настройках ТХ не задан дизайн, но в ТБ задан DesignId = " + DesignId, Radix::Arte::EventSource:App);
  409.                         }
  410.                     } else {
  411.                         Trace.error("У продукта " + cardProductId + "в настройках ТХ не задан дизайн, но в ТБ задан DesignId = " + DesignId, Radix::Arte::EventSource:App);
  412.                     }
  413.                 } else Trace.error("В ТБ указан дизайн, которого нет в ТХ", Radix::Arte::EventSource:App);
  414.             }
  415.             card.EmbossName = (FirstNameLat + " " + LastNameLat).toUpperCase();
  416.             card.TrackName = (LastNameLat + "/" + FirstNameLat).toUpperCase();
  417.              if (balanceRstr == false){
  418.                 AdminXsd:Restriction rqRestriction = card.addNewRestrictions().addNewRestriction();
  419.                 Restriction restr = HelpUs.getRestriction(card.ProfileId, null);
  420.                 if(restr != null){
  421.                     rqRestriction.Guid = HelpUs.getRestriction(card.ProfileId, null).guid;
  422.                     rqRestriction.ClassGuid = HelpUs.getRestriction(card.ProfileId, null).classGuid;
  423.                     rqRestriction.InUse = false;
  424.                 }
  425.          }
  426.            
  427.            
  428.             TypesXsd:ParamValue pv = card.addNewUserAttrs().addNewParamValue();
  429.                         pv.Rid = "CreateAppId";
  430.                         pv.Val = app.id.toString();
  431.  
  432.             //25.09.2015   grigorjev.d.a   Cрок дополнительной карты к грейсу должен быть равен сроку грейса (TX-1675)
  433.             Contract.Current contract = (Contract.Current)Contract.loadByRid(app.instId, ContractId);
  434.             if(contract != null && contract.cachedType.getUserParamStr("isGrace") == "1"){
  435.                 Contract.Overdraft over = (Contract.Overdraft)contract.overdraftContract;
  436.                 card.ExpTime = Timing.endTimeOfMonth(over.tillDay);
  437.             }          
  438.    
  439.                        
  440.         TranXsd:Request.Specific.Group.Tran.Refine refine = tr.addNewRefine();
  441.         refine.SrcTranOffset = 1;
  442.         refine.GetRsTag = "Specific/Admin/Contract/@Rid";
  443.         switch (cardProduct.technology){
  444.             case Tx::Tokens.Card::CardTechnology:Emv : refine.SetTag = "declare namespace tok='http://schemas.tranzaxis.com/tokens-admin.xsd'; Specific/Admin/Token/tok:CardVsdc/tok:ContractRid"; break;
  445.             case Tx::Tokens.Card::CardTechnology:Magnetic : refine.SetTag = "declare namespace tok='http://schemas.tranzaxis.com/tokens-admin.xsd'; Specific/Admin/Token/tok:CardMagnetic/tok:ContractRid"; break;
  446.             case Tx::Tokens.Card::CardTechnology:Virtual : refine.SetTag = "declare namespace tok='http://schemas.tranzaxis.com/tokens-admin.xsd'; Specific/Admin/Token/tok:CardVirtual/tok:ContractRid"; break;
  447.         }
  448.     }
  449.  
  450.      //Балансировка
  451.     {  
  452.         TariffPlan tplan =  TariffPlan.loadByPK(TariffPlanGuid, false);
  453.         if (tplan != null && tplan.userAttrs.getBool("NeedFeeOnCreate") == true){
  454.             Contract chargeC  = Contract.loadByRid(app.instId , FeeContractId);
  455.             TranXsd:Request.Specific.Group.Tran tr = rqG.Specific.Group.addNewTran();
  456.             TranXsd:Request rq = tr.addNewRequest();
  457.             rq.set((Re-)IssueCards::CardIssuingFee(null, null, cardDeliveryBranch.id, chargeC));
  458.            
  459.             TranXsd:Request.Specific.Group.Tran.Refine refine = tr.addNewRefine();
  460.             refine.SrcTranOffset = 2;
  461.             refine.GetRsTag = "Specific/Admin/Contract/@Id";
  462.             refine.SetTag = "declare namespace t='http://schemas.tranzaxis.com/tran.xsd'; t:Specific/t:Admin/t:Contract/@Id";
  463.            
  464.             /*rq.Kind = Tx::Tran::TranKind:BalanceContract;
  465.             rq.ProcessorInstId = rqG.ProcessorInstId;
  466.             rq.LifePhase = Tx::Tran::LifePhase:Single;
  467.            
  468.             rq.addNewParties().addNewParty().Id = 0;
  469.             rq.CategoryText = "Балансировка контракта для списания комиссии по тарифному плану";
  470.             rq.ClerkName = "998";
  471.             java.util.List<Str> phases = new java.util.ArrayList<Str>();
  472.                 phases.add("Charges");
  473.                
  474.             rq.addNewSpecific().addNewBalance().Phases = phases;
  475.            
  476.             TranXsd:Request.Specific.Group.Tran.Refine refine = tr.addNewRefine();
  477.             refine.SrcTranOffset = 2;
  478.             refine.GetRsTag = "Specific/Admin/Contract/@Id";
  479.             refine.SetTag = "declare namespace t='http://schemas.tranzaxis.com/tran.xsd'; t:Parties/t:Party/@Id";  */
  480.         }
  481.     }
  482.    
  483.     Tran tranG = Tran.execute(rqG); //tran.executeEmbedded(rqG);
  484.     if(tranG.result == Tx::Tran::TranResult:Approved){
  485.         app.status = newStatus;
  486.         java.util.List<Tran> listTrans = tranG.getNextTrans(Tx::Tran::LinkKind:Group2Grouped); //список связанных транз. с групповой
  487.         for(Tran tr : listTrans){
  488.             if(tr.kind == Tx::Tran::TranKind:ModifyToken){
  489.                 Card token = (Card)((Doer.Token)tr.rootDoer).token;
  490.                 //Trace.error("CardIssue. Функция обработки. token=" + token.calcTitle() , Radix::Arte::EventSource:UserFunc);
  491.                 // Прикладываем заявление на выпуск карты к карте
  492.                 xxx.notificator1(token, app, (ThirdPerson == "on" ? true : false));
  493.                 // Прикладываем фотку клиента к карте
  494.                 //xxx.attachPhoto(token, att, tran, atts); // 20.11.17-П.С.С. Метод перестал работать, прикрепление фото перенес в создание карты (SD-7880)
  495.                 // Отправка уведомления об открытии карты в РБ
  496.                 xxx.notificator2(app, null, tran);
  497.                 // отправка информации о созданной карте в TXIB
  498.                 {
  499.                     TranXsd:Response.Specific spec = tran.rs.Specific != null ? tran.rs.Specific : tran.rs.addNewSpecific();
  500.                     /*
  501.                     TranXsd:AdminSpecific adm = spec.Admin != null ? spec.Admin : spec.addNewAdmin();
  502.                     TokenAdminXsd:Token tok = adm.Token != null ? adm.Token : adm.addNewToken();
  503.                     TokenAdminXsd:Card base = TokenAdminXsd:Card.Factory.newInstance();
  504.                     if(token.cardProduct.technology == Tx::Tokens.Card::CardTechnology:Emv) base = tok.addNewCardVsdc();
  505.                     if(token.cardProduct.technology == Tx::Tokens.Card::CardTechnology:Magnetic) base = tok.addNewCardMagnetic();
  506.                     base.Id = token.id;
  507.                     base.Pan = token.maskedPan;
  508.                     base.ExpTime = token.expTime;
  509.                     base.Status = token.status;
  510.                     base.Notes = token.notes;
  511.                     */
  512.                     TranXsd:Response.Specific.CreateVirtualCard crd = spec.addNewCreateVirtualCard();
  513.                     crd.Id = token.id;
  514.                     crd.Pan = token.maskedPan;
  515.                     crd.Expiration = Timing.dateTimeToString(token.expTime, "dd.MM.yyyy");
  516.                 }
  517.                  app.contextTokenId = token.id;
  518.  
  519.                 app.userAttrs.setStr("method", "TXIB");
  520.             }
  521.          else if (tr.kind == Tx::Tran::TranKind:Udt ){
  522.              app.userAttrs.setInt("FeeTranId", tr.id);
  523.              app.userAttrs.setNum("FeeAmount", tr.clearAmt);
  524.              app.userAttrs.setInt("FeeCcy", tr.clearCcy);
  525.          }
  526.         } // for
  527.         app.userAttrs.setStr("user", (doer.tran.clerkName != null ? doer.tran.clerkName : "TXIB"));
  528.         if (doer.tran.clerk != null)
  529.             app.userAttrs.setInt("branch", doer.tran.clerk.branchId);
  530.     } // Approved
  531.     else {
  532.         throw new DeclineException(Tx::Tran::TranResult:SystemError, "Ошибка при обработке заявления, обратитесь к администраторам.", "CardIssue. Функция обработки.");
  533.     }
  534.    
  535.    
  536. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement