package org.mifos.accounting.struts.action; import java.math.BigDecimal; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.mifos.accounting.struts.actionform.ConsolidatedTransactionActionForm; import org.mifos.application.accounting.business.GlDetailBO; import org.mifos.application.accounting.business.GlMasterBO; import org.mifos.application.servicefacade.AccountingServiceFacade; import org.mifos.application.servicefacade.AccountingServiceFacadeWebTier; import org.mifos.application.util.helpers.ActionForwards; import org.mifos.dto.domain.GLCodeDto; import org.mifos.dto.domain.GlDetailDto; import org.mifos.dto.domain.OfficeGlobalDto; import org.mifos.dto.domain.OfficesList; import org.mifos.dto.domain.ViewStageTransactionsDto; import org.mifos.framework.struts.action.BaseAction; import org.mifos.framework.util.helpers.DateUtils; import org.mifos.security.util.UserContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class ConsolidatedTransactionAction extends BaseAction{ private static final Logger logger = LoggerFactory .getLogger(VoucherBranchMappingAction.class); private AccountingServiceFacade accountingServiceFacade = new AccountingServiceFacadeWebTier(); public ActionForward load(ActionMapping mapping, @SuppressWarnings("unused") ActionForm form, HttpServletRequest request, @SuppressWarnings("unused") HttpServletResponse response) throws Exception { logger.debug("start Load method of loan Product Action"); ConsolidatedTransactionActionForm actionForm = (ConsolidatedTransactionActionForm) form; java.util.Date trxnDate = DateUtils.getCurrentDateWithoutTimeStamp(); List<OfficeGlobalDto> officeDetailsDtos = null; UserContext context = getUserContext(request); actionForm.setOfficeLevelId(String.valueOf(context.getOfficeLevelId())); List<OfficesList> offices = new ArrayList<OfficesList>(); short branches=5; officeDetailsDtos = accountingServiceFacade.loadOfficesForLevel(branches); List<GLCodeDto> accountingDtos = accountingServiceFacade.coaBranchAccountHead(); storingSession(request, "viewStageTransactionsDtoCRBRListValues", null); storingSession(request, "viewStageTransactionsDtoCPBPListValues", null); storingSession(request, "viewStageTransactionsDtoCRMisListValues",null); storingSession(request, "viewStageTransactionsDtoCPMisListValues",null); storingSession(request, "viewStageTransactionsDtoInterOfficeList",null); storingSession(request, "OfficesOnHierarchy", null); actionForm.setTransactiondate(""); actionForm.setCptotal("0"); actionForm.setCrtotal("0"); actionForm.setBranch(""); storingSession(request, "OfficesOnHierarchy", officeDetailsDtos); return mapping.findForward(ActionForwards.load_success.toString()); } public ActionForward loadConsolidatedTransaction(ActionMapping mapping, @SuppressWarnings("unused") ActionForm form, HttpServletRequest request, @SuppressWarnings("unused") HttpServletResponse response) throws Exception { logger.debug("start Load method of loan Product Action"); ConsolidatedTransactionActionForm actionForm = (ConsolidatedTransactionActionForm) form; String s[]=null; actionForm.setTransactionCpBpNo(s); actionForm.setTransactionNo(s); String lastupdatedateStringvalue=accountingServiceFacade.getLastProcessUpdatedDate(actionForm.getBranch()); //LocalDate localDate=new LocalDate(lastupdatedateStringvalue).plusDays(1); //Date date=localDate.toDateMidnight().toDate(); DateFormat df = new SimpleDateFormat("dd/mm/yyyy"); String date1 = "01/01/2012"; Date startDate; try { startDate = df.parse(lastupdatedateStringvalue); startDate.setDate(startDate.getDate() + 1); String newDateString = df.format(startDate); Date date2=df.parse(date1); if(date1.equalsIgnoreCase(lastupdatedateStringvalue)) { actionForm.setLastProcessDate(accountingServiceFacade.getLastProcessUpdatedDate(actionForm.getBranch())); actionForm.setTransactiondate(accountingServiceFacade.getLastProcessUpdatedDate(actionForm.getBranch())); } else{ actionForm.setLastProcessDate(newDateString); actionForm.setTransactiondate(newDateString); } } catch (ParseException e) { e.printStackTrace(); } List<ViewStageTransactionsDto> viewStageTransactionsDtos = accountingServiceFacade.getConsolidatedTransactions(actionForm.getBranch()); List<ViewStageTransactionsDto> viewStageTransactionsDtoCRBRList=new ArrayList<ViewStageTransactionsDto>(); List<ViewStageTransactionsDto> viewStageTransactionsDtoCPBPList=new ArrayList<ViewStageTransactionsDto>(); List<ViewStageTransactionsDto> viewStageTransactionsDtoCPMisList=new ArrayList<ViewStageTransactionsDto>(); List<ViewStageTransactionsDto> viewStageTransactionsDtoCRMisList=new ArrayList<ViewStageTransactionsDto>(); List<ViewStageTransactionsDto> viewStageTransactionsDtoInterOfficeList=new ArrayList<ViewStageTransactionsDto>(); //Cash Payment double crbrTotal=0; double cpbpTotal=0; for(ViewStageTransactionsDto viewStageTransactionsDtosvalues:viewStageTransactionsDtos ) { if(viewStageTransactionsDtosvalues.getTransactionType().equalsIgnoreCase("Cash Receipt") ) { if(viewStageTransactionsDtosvalues.getNarration().equalsIgnoreCase("Mis Processing")) { crbrTotal=crbrTotal + Double.parseDouble(viewStageTransactionsDtosvalues.getTransactionAmount()); viewStageTransactionsDtoCRMisList.add(viewStageTransactionsDtosvalues); } }else if (viewStageTransactionsDtosvalues.getTransactionType().equalsIgnoreCase("Cash Payment")) { if(viewStageTransactionsDtosvalues.getNarration().equalsIgnoreCase("Mis Processing")) { cpbpTotal=cpbpTotal + Double.parseDouble(viewStageTransactionsDtosvalues.getTransactionAmount()); viewStageTransactionsDtoCPMisList.add(viewStageTransactionsDtosvalues); } } else if (viewStageTransactionsDtosvalues.getMainAccount().equalsIgnoreCase("Inter office Transfers")) { crbrTotal=crbrTotal + Double.parseDouble(viewStageTransactionsDtosvalues.getTransactionAmount()); viewStageTransactionsDtoInterOfficeList.add(viewStageTransactionsDtosvalues); } } for(ViewStageTransactionsDto viewStageTransactionsDtosvalues:viewStageTransactionsDtos ) { if(viewStageTransactionsDtosvalues.getTransactionType().equalsIgnoreCase("Cash Receipt") || viewStageTransactionsDtosvalues.getTransactionType().equalsIgnoreCase("Bank Receipt")) { if(!viewStageTransactionsDtosvalues.getNarration().equalsIgnoreCase("Mis Processing")) { crbrTotal=crbrTotal + Double.parseDouble(viewStageTransactionsDtosvalues.getTransactionAmount()); viewStageTransactionsDtoCRBRList.add(viewStageTransactionsDtosvalues); } } else if (viewStageTransactionsDtosvalues.getTransactionType().equalsIgnoreCase("Bank Payment") || viewStageTransactionsDtosvalues.getTransactionType().equalsIgnoreCase("Cash Payment")) { if(!viewStageTransactionsDtosvalues.getNarration().equalsIgnoreCase("Mis Processing")) { cpbpTotal=cpbpTotal + Double.parseDouble(viewStageTransactionsDtosvalues.getTransactionAmount()); viewStageTransactionsDtoCPBPList.add(viewStageTransactionsDtosvalues); } } } actionForm.setCrtotal(Double.toString(crbrTotal)); actionForm.setCptotal(Double.toString(cpbpTotal)); storingSession(request, "ConsolidatedTransactionActionForm",actionForm); storingSession(request, "viewStageTransactionsDtoCRBRListValues",viewStageTransactionsDtoCRBRList); storingSession(request, "viewStageTransactionsDtoCPBPListValues",viewStageTransactionsDtoCPBPList); storingSession(request, "viewStageTransactionsDtoCRMisListValues",viewStageTransactionsDtoCRMisList); storingSession(request, "viewStageTransactionsDtoCPMisListValues",viewStageTransactionsDtoCPMisList); storingSession(request, "viewStageTransactionsDtoInterOfficeList",viewStageTransactionsDtoInterOfficeList); return mapping.findForward(ActionForwards.load_success.toString()); } public ActionForward approve(ActionMapping mapping, @SuppressWarnings("unused") ActionForm form, HttpServletRequest request, @SuppressWarnings("unused") HttpServletResponse response) throws Exception { ConsolidatedTransactionActionForm actionForm = (ConsolidatedTransactionActionForm) form; String [] Transactionno=actionForm.getTransactionNo(); if(Transactionno!=null) { for(int i=0;i<Transactionno.length;i++) { String transactionNoValue= Transactionno[i]; approveCRBRTransactions(actionForm,transactionNoValue,request); } } String [] cpbpTransactionNO=actionForm.getTransactionCpBpNo(); if(cpbpTransactionNO != null) { for(int i=0;i<cpbpTransactionNO.length;i++) { String transactioncpbpNoValue=cpbpTransactionNO[i]; approveCPBPTransactions(actionForm,transactioncpbpNoValue,request); } } return mapping.findForward("submit_success"); } public void approveCRBRTransactions(ConsolidatedTransactionActionForm actionForm,String Transactionno,HttpServletRequest request) { ViewStageTransactionsDto viewStageTransactionsDto = accountingServiceFacade .getstagedAccountingTransactions(Transactionno); try{ actionForm.setStageTrxnDate(changeDateFormat(viewStageTransactionsDto.getTransactionDate().toString())); actionForm.setStageOfficeHierarchy(this.getOfficeHierarchy(viewStageTransactionsDto.getOfficeLevel())); actionForm.setStageTrxnType(getTranType(viewStageTransactionsDto.getTransactionType())); actionForm.setStageMainAccount(viewStageTransactionsDto.getMainAccount()); viewStageTransactionsDto.getSubAccount(); actionForm.setStageAccountHead(viewStageTransactionsDto.getSubAccount()); actionForm.setStageOffice(viewStageTransactionsDto.getFromOfficeId()); }catch (Exception e) {e.printStackTrace(); } GlDetailDto glDetailDto = accountingServiceFacade.getChequeDetails(Transactionno); if(glDetailDto!=null){ actionForm.setStageChequeNo(glDetailDto.getChequeNo()); if(glDetailDto.getChequeDate()!=null){ actionForm.setChequeDate(changeDateFormat(glDetailDto.getChequeDate().toString())); } actionForm.setStageBankName(glDetailDto.getBankName()); actionForm.setStageankBranch(glDetailDto.getBankBranch()); } short s = new Integer(actionForm.getStageOfficeHierarchy()).shortValue(); List<OfficeGlobalDto> officeDetailsDtos = null; if (actionForm.getStageOfficeHierarchy()== "0") { officeDetailsDtos = null; // To recognize center } else if (actionForm.getStageOfficeHierarchy()=="6") { officeDetailsDtos = accountingServiceFacade .loadCustomerForLevel(new Short("3")); // to recognize group } else if (actionForm.getStageOfficeHierarchy()=="7") { officeDetailsDtos = accountingServiceFacade .loadCustomerForLevel(new Short("2")); } else { officeDetailsDtos = accountingServiceFacade .loadOfficesForLevel(s); } storingSession(request, "OfficesOnHierarchy", officeDetailsDtos); // load main accounts List<GLCodeDto> accountingDtos = null; if (actionForm.getStageTrxnType().equals("CR") || actionForm.getStageTrxnType().equals("CP") || actionForm.getStageTrxnType().equals("BR") || actionForm.getStageTrxnType().equals("BP") || actionForm.getStageTrxnType().equals("JV")) { accountingDtos = accountingServiceFacade.auditAccountHeads(); } actionForm.setTransactionDetailID(viewStageTransactionsDto.getTransactionID()); actionForm.setStageMainAccount(viewStageTransactionsDto.getMainAccount()); actionForm.setStageAccountHead(viewStageTransactionsDto.getSubAccount()); actionForm.setStageNotes(viewStageTransactionsDto.getNarration()); actionForm.setStageAmount(viewStageTransactionsDto.getTransactionAmount()); String [] Transactionno1=actionForm.getTransactionNo(); String [] cpbpTransactionNO1=actionForm.getTransactionCpBpNo(); for(int j=0;j<Transactionno1.length;j++) { GlMasterBO glMasterBO = new GlMasterBO(); int stage = 1; List<String> amountActionList = getAmountAction(actionForm); List<GlDetailBO> glDetailBOList = getGlDetailBOList(actionForm, amountActionList,Integer.parseInt(actionForm.getTransactionDetailID())); glMasterBO.setTransactionMasterId(Integer.parseInt(Transactionno1[j])); glMasterBO.setTransactionDate(DateUtils.getDate(actionForm .getStageTrxnDate())); glMasterBO.setTransactionType(actionForm.getStageTrxnType()); glMasterBO.setFromOfficeLevel(new Integer(actionForm.getStageOfficeHierarchy())); glMasterBO.setFromOfficeId(actionForm.getStageOffice()); glMasterBO.setToOfficeLevel(new Integer(actionForm.getStageOfficeHierarchy())); glMasterBO.setToOfficeId(actionForm.getStageOffice()); glMasterBO.setMainAccount(actionForm.getStageMainAccount()); glMasterBO.setTransactionAmount(new BigDecimal(actionForm.getStageAmount())); glMasterBO.setAmountAction(amountActionList.get(0)); glMasterBO.setTransactionNarration(actionForm.getStageNotes()); glMasterBO.setStage(stage); glMasterBO.setGlDetailBOList(glDetailBOList); glMasterBO.setStatus("");// default value glMasterBO.setTransactionBy(0); // default value glMasterBO.setCreatedBy(getUserContext(request).getId()); glMasterBO.setCreatedDate(DateUtils.getCurrentDateWithoutTimeStamp()); accountingServiceFacade.savingAccountingTransactions(glMasterBO); } } public void approveCPBPTransactions(ConsolidatedTransactionActionForm actionForm,String TransactioncpbpNoValue,HttpServletRequest request) { ViewStageTransactionsDto viewStageTransactionsDto = accountingServiceFacade .getstagedAccountingTransactions(TransactioncpbpNoValue); try{ if(viewStageTransactionsDto.getTransactionDate().toString()!=null) actionForm.setStageTrxnDate(changeDateFormat(viewStageTransactionsDto.getTransactionDate().toString())); //actionForm.setStageTrxnDate(viewStageTransactionsDto.getTransactionDate().toString()); actionForm.setStageOfficeHierarchy(this.getOfficeHierarchy(viewStageTransactionsDto.getOfficeLevel())); actionForm.setStageTrxnType(getTranType(viewStageTransactionsDto.getTransactionType())); actionForm.setStageMainAccount(viewStageTransactionsDto.getMainAccount()); viewStageTransactionsDto.getSubAccount(); actionForm.setStageAccountHead(viewStageTransactionsDto.getSubAccount()); actionForm.setStageOffice(viewStageTransactionsDto.getFromOfficeId()); }catch (Exception e) {e.printStackTrace(); } GlDetailDto glDetailDto = accountingServiceFacade.getChequeDetails(TransactioncpbpNoValue); if(glDetailDto!=null){ actionForm.setStageChequeNo(glDetailDto.getChequeNo()); if(glDetailDto.getChequeDate()!=null){ actionForm.setChequeDate(changeDateFormat(glDetailDto.getChequeDate().toString())); } actionForm.setStageBankName(glDetailDto.getBankName()); actionForm.setStageankBranch(glDetailDto.getBankBranch()); } short s = new Integer(actionForm.getStageOfficeHierarchy()).shortValue(); List<OfficeGlobalDto> officeDetailsDtos = null; if (actionForm.getStageOfficeHierarchy()== "0") { officeDetailsDtos = null; // To recognize center } else if (actionForm.getStageOfficeHierarchy()=="6") { officeDetailsDtos = accountingServiceFacade .loadCustomerForLevel(new Short("3")); // to recognize group } else if (actionForm.getStageOfficeHierarchy()=="7") { officeDetailsDtos = accountingServiceFacade .loadCustomerForLevel(new Short("2")); } else { officeDetailsDtos = accountingServiceFacade .loadOfficesForLevel(s); } storingSession(request, "OfficesOnHierarchy", officeDetailsDtos); // load main accounts List<GLCodeDto> accountingDtos = null; if (actionForm.getStageTrxnType().equals("CR") || actionForm.getStageTrxnType().equals("CP") || actionForm.getStageTrxnType().equals("BR") || actionForm.getStageTrxnType().equals("BP") || actionForm.getStageTrxnType().equals("JV")) { accountingDtos = accountingServiceFacade.auditAccountHeads(); } actionForm.setTransactionDetailID(viewStageTransactionsDto.getTransactionID()); actionForm.setStageMainAccount(viewStageTransactionsDto.getMainAccount()); actionForm.setStageAccountHead(viewStageTransactionsDto.getSubAccount()); actionForm.setStageNotes(viewStageTransactionsDto.getNarration()); actionForm.setStageAmount(viewStageTransactionsDto.getTransactionAmount()); String [] cpbpTransactionNO1=actionForm.getTransactionCpBpNo(); for(int j=0;j<cpbpTransactionNO1.length;j++) { GlMasterBO glMasterBO = new GlMasterBO(); int stage = 1; List<String> amountActionList = getAmountAction(actionForm); List<GlDetailBO> glDetailBOList = getGlDetailBOList(actionForm, amountActionList,Integer.parseInt(actionForm.getTransactionDetailID())); glMasterBO.setTransactionMasterId(Integer.parseInt(cpbpTransactionNO1[j])); glMasterBO.setTransactionDate(DateUtils.getDate(actionForm .getStageTrxnDate())); glMasterBO.setTransactionType(actionForm.getStageTrxnType()); glMasterBO.setFromOfficeLevel(new Integer(actionForm.getStageOfficeHierarchy())); glMasterBO.setFromOfficeId(actionForm.getStageOffice()); glMasterBO.setToOfficeLevel(new Integer(actionForm.getStageOfficeHierarchy())); glMasterBO.setToOfficeId(actionForm.getStageOffice()); glMasterBO.setMainAccount(actionForm.getStageMainAccount()); glMasterBO.setTransactionAmount(new BigDecimal(actionForm.getStageAmount())); glMasterBO.setAmountAction(amountActionList.get(0)); glMasterBO.setTransactionNarration(actionForm.getStageNotes()); glMasterBO.setStage(stage); glMasterBO.setGlDetailBOList(glDetailBOList); glMasterBO.setStatus("");// default value glMasterBO.setTransactionBy(0); // default value glMasterBO.setCreatedBy(getUserContext(request).getId()); glMasterBO.setCreatedDate(DateUtils.getCurrentDateWithoutTimeStamp()); accountingServiceFacade.savingAccountingTransactions(glMasterBO); } } public ActionForward cancel(ActionMapping mapping, ActionForm form, HttpServletRequest request, @SuppressWarnings("unused") HttpServletResponse response) throws Exception { return mapping.findForward(ActionForwards.cancel_success.toString()); } public ActionForward reject(ActionMapping mapping, @SuppressWarnings("unused") ActionForm form, HttpServletRequest request, @SuppressWarnings("unused") HttpServletResponse response) throws Exception { ConsolidatedTransactionActionForm actionForm = (ConsolidatedTransactionActionForm) form; String [] Transactionno=actionForm.getTransactionNo(); if(Transactionno !=null) { for(int i=0;i<Transactionno.length;i++) { int transactioncrbrNoValue=Integer.parseInt( Transactionno[i]); accountingServiceFacade.approveStageAccountingTransactions( transactioncrbrNoValue, ConsolidatedTransactionActionForm.rejectStage); } } String [] cpbpTransactionNO=actionForm.getTransactionCpBpNo(); if(cpbpTransactionNO !=null) { for(int i=0;i<cpbpTransactionNO.length;i++) { int transactioncpbpNoValue=Integer.parseInt( cpbpTransactionNO[i]); accountingServiceFacade.approveStageAccountingTransactions( transactioncpbpNoValue, ConsolidatedTransactionActionForm.rejectStage); } } return mapping.findForward("submit_success"); } List<GlDetailBO> getGlDetailBOList(ConsolidatedTransactionActionForm actionForm, List<String> amountActionList,int transactionDetailID) { List<GlDetailBO> glDetailBOList = new ArrayList<GlDetailBO>(); glDetailBOList.add(new GlDetailBO(transactionDetailID,actionForm.getStageAccountHead(), new BigDecimal(actionForm.getStageAmount()), amountActionList.get(1), actionForm.getStageChequeNo(), DateUtils .getDate(actionForm.getChequeDate()), actionForm .getStageBankName(), actionForm.getStageankBranch())); return glDetailBOList; } public List<String> getAmountAction(ConsolidatedTransactionActionForm actionForm) { List<String> amountActionList = new ArrayList<String>(); if (actionForm.getStageTrxnType().equals("CR") || actionForm.getStageTrxnType().equals("BR") ) { amountActionList.add("debit");// for MainAccount amountAction amountActionList.add("credit");// for SubAccount amountAction } else if (actionForm.getStageTrxnType().equals("CP") || actionForm.getStageTrxnType().equals("BP")) { amountActionList.add("credit");// for MainAccount amountAction amountActionList.add("debit");// for SubAccount amountAction } else if (actionForm.getStageTrxnType().equals("JV")){ amountActionList.add("debit");// for MainAccount amountAction amountActionList.add("credit");// for SubAccount amountAction } return amountActionList; } public void storingSession(HttpServletRequest httpServletRequest, String s, Object o) { httpServletRequest.getSession().setAttribute(s, o); } public int nullIntconv(String str) { int conv = 0; if (str == null) { str = "0"; } else if ((str.trim()).equals("null")) { str = "0"; } else if (str.equals("")) { str = "0"; } try { conv = Integer.parseInt(str); } catch (Exception e) { } return conv; } public String getOfficeHierarchy(String office){ String returnValue = "1"; if(office.equals("Head Office")){ returnValue = "1"; } if(office.equals("Regional Office")){ returnValue = "2"; } if(office.equals("Divisional Office")){ returnValue = "3"; } if(office.equals("Area Office")){ returnValue = "4"; } if(office.equals("Branch Office")){ returnValue = "5"; } if(office.equals("Center")){ returnValue = "6"; } if(office.equals("Group")){ returnValue = "7"; } return returnValue; } public String getTranType(String tranxnType){ String returntranxn = null; if(tranxnType.equals("Cash Receipt")){ returntranxn = "CR"; } if(tranxnType.equals("Cash Payment")){ returntranxn = "CP"; } if(tranxnType.equals("Bank Receipt")){ returntranxn = "BR"; } if(tranxnType.equals("Bank Payment")){ returntranxn = "BP"; } if (tranxnType.equals("Journal Voucher")) { returntranxn = "JV"; } return returntranxn; } public String bigdecimalToInt(BigDecimal amount){ return new Integer(amount.intValue()).toString(); } public String changeDateFormat(String date){ String[] yymmdds = date.split("-"); return yymmdds[2]+"/"+yymmdds[1]+"/"+yymmdds[0]; } }