Advertisement
dahomee_69

MaintainRegHospitalInvoiceSessionEJB

Dec 21st, 2016
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 430.76 KB | None | 0 0
  1. package gosi.business.socialinsurance.occupationalhazards.injury.session;
  2. // Import Statements
  3. import gosi.core.util.beans.FileUploadInfoBean;
  4. import gosi.common.letters.beans.LetterHeaderBean;
  5. import gosi.common.letters.util.LetterUtilities;
  6. import gosi.common.reports.beans.ReportConstants;
  7. import gosi.core.security.beans.UserBean;
  8. import gosi.core.security.common.beans.SecurityAndWorkflowConstants;
  9. import gosi.core.util.ServiceLocator;
  10. import gosi.core.util.GOSIDebug;
  11. import java.sql.Connection;
  12. import java.sql.PreparedStatement;
  13. import java.sql.ResultSet;
  14. import java.sql.Timestamp;
  15. import java.util.ArrayList;
  16. import java.util.Calendar;
  17. import java.util.GregorianCalendar;
  18. import java.util.HashMap;
  19. import java.util.Hashtable;
  20. import java.util.TreeMap;
  21. import java.util.Objects;
  22. import javax.ejb.SessionContext;
  23. import javax.ejb.EJBException;
  24. import java.rmi.RemoteException;
  25.  
  26. import gosi.core.util.CommonTransactions;
  27. import gosi.core.util.GOSIException;
  28. import gosi.core.util.GOSIConstants;
  29. import gosi.core.util.GOSIErrorMessages;
  30. import gosi.core.util.GOSIUtilities;
  31. import gosi.core.util.GOSIDateUtilities;
  32. import gosi.core.util.GOSIApplicationProperties;
  33. import gosi.core.util.beans.AuditBean;
  34. import gosi.core.util.beans.NotificationLetterBean;
  35. import gosi.business.socialinsurance.common.beans.SITables;
  36. import gosi.core.workflow.beans.WorkflowParamBean;
  37.  
  38. import gosi.business.socialinsurance.occupationalhazards.common.beans.OHUtilities;
  39. import gosi.business.socialinsurance.occupationalhazards.common.beans.OHConstants;
  40. import gosi.business.socialinsurance.occupationalhazards.medicalboard.beans.OHDAssessmentHeaderBean;
  41. import gosi.business.socialinsurance.occupationalhazards.injury.beans.AddInjuryHelperBean;
  42. import gosi.business.socialinsurance.occupationalhazards.injury.beans.HospitalListBean;
  43. import gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceHeaderBean;
  44. import gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceDetailBean;
  45. import gosi.business.socialinsurance.occupationalhazards.injury.beans.SFDABean;
  46. import gosi.business.socialinsurance.occupationalhazards.injury.beans.SFDAMapBean;
  47. import gosi.business.socialinsurance.occupationalhazards.injury.beans.SummayEClaimErrorBean;
  48. import gosi.business.socialinsurance.occupationalhazards.injury.beans.SummayEClaimFileResultBean;
  49. import gosi.business.socialinsurance.occupationalhazards.injury.beans.TreatmentPeriodBean;
  50. import gosi.business.socialinsurance.occupationalhazards.injury.beans.TreatmentHeaderBean;
  51. import gosi.business.socialinsurance.occupationalhazards.injury.beans.TreatmentServiceBean;
  52. import gosi.business.socialinsurance.occupationalhazards.injury.beans.InvoiceSearchBean;
  53. import gosi.business.socialinsurance.occupationalhazards.injury.beans.TreatmentInvoiceQueryListBean;
  54. import gosi.business.socialinsurance.occupationalhazards.injury.beans.OHBenefitChequeBean;
  55. import gosi.business.socialinsurance.occupationalhazards.hospital.beans.HospitalDiscountDetailBean;
  56. import gosi.business.socialinsurance.registration.establishment.beans.EstablishmentBean;
  57. import gosi.business.socialinsurance.registration.establishment.beans.EstablishmentUtility;
  58. import gosi.database.socialinsurance.occupationalhazards.injury.entity.RegHospitalInvoiceDetailEntity;
  59. import gosi.database.socialinsurance.occupationalhazards.injury.entity.RegHospitalInvoiceDetailEntityHome;
  60. import gosi.database.socialinsurance.occupationalhazards.injury.entity.RegHospitalInvoiceHeaderEntity;
  61. import gosi.database.socialinsurance.occupationalhazards.injury.entity.RegHospitalInvoiceHeaderEntityHome;
  62. import gosi.database.socialinsurance.occupationalhazards.injury.entity.SFDAMapEntity;
  63. import gosi.database.socialinsurance.occupationalhazards.injury.entity.SFDAMapEntityHome;
  64. import gosi.database.socialinsurance.occupationalhazards.injury.entity.TreatmentServiceDetailEntity;
  65. import gosi.database.socialinsurance.occupationalhazards.injury.entity.TreatmentServiceDetailEntityHome;
  66. import gosi.database.socialinsurance.occupationalhazards.injury.entity.TreatmentServiceHeaderEntity;
  67. import gosi.database.socialinsurance.occupationalhazards.injury.entity.TreatmentServiceHeaderEntityHome;
  68. import gosi.rules.socialinsurance.occupationalhazards.beans.OHRuleBean;
  69. /*  Files imported for finance interface*/
  70. import gosi.business.socialinsurance.occupationalhazards.injury.beans.SickleaveBean;
  71. import gosi.business.interfaces.beans.InvoiceInterfaceBean;
  72. import gosi.business.interfaces.beans.InvoiceInterfaceDetailBean;
  73. import gosi.business.interfaces.beans.FAInterfaceConstants;
  74. import gosi.business.interfaces.beans.CNInterfaceBeanOH;
  75. import gosi.business.interfaces.FinanceImplProxy;
  76. import gosi.business.interfaces.FinancialAccountingInterface;
  77. import gosi.core.dms.beans.DMSRequestHeaderBean;
  78. import gosi.core.dms.beans.DMSConstants;
  79. import gosi.core.dms.util.DMSUtilities;
  80. import gosi.core.batch.beans.BatchParametersBean;
  81. import gosi.core.batch.beans.BatchRequestBean ;
  82.  
  83.  
  84. /**
  85.  * @CLASS NAME          : MaintainRegHospitalInvoiceSessionEJB
  86.  * @TYPE                : SessionEJB
  87.  * @AUTHOR              : TCS
  88.  * @VERSION             : 1
  89.  * @EXTENDS             : Nil
  90.  * @INFORMATION         : Session EJB object is used to calculate registred hospital invoice and related functions
  91.  * @IMPLEMENTS          : SessionBean
  92.  * @TABLES REFERRED     : T_injury,T_trmtserviceshdr,t_trmtservicesdet,T_disbassmt,T_contributor,T_reghospinvoicehdr,T_reghospinvoicedet
  93.  * @LAST MODIFIED BY    :
  94.  * @LAST MODIFIED DATE  :
  95. **/
  96. public class MaintainRegHospitalInvoiceSessionEJB implements
  97.     javax.ejb.SessionBean
  98. {
  99.    
  100.     SessionContext ctx = null;
  101.     Connection con = null;
  102.     /**
  103.     * @METHOD NAME              :   MaintainRegHospitalInvoiceSessionEJB
  104.     * @INFORMATION              :   This method is the constructor$
  105.     * @PARAM                    :   class java.lang.String
  106.     * @RETURN                   :   class java.lang.Class
  107.     * @EXCEPTION                :  
  108.     * @LAST MODIFIED BY         :  
  109.     * @LAST MODIFIED DATE       :  
  110.     **/
  111.     public MaintainRegHospitalInvoiceSessionEJB    ()  
  112.     {
  113.  
  114.     }
  115.    
  116.     /**
  117.     * @METHOD NAME              :   ejbCreate
  118.     * @INFORMATION              :   This method is to  ejb Create
  119.     * @PARAM                    :  
  120.     * @RETURN                   :   void
  121.     * @EXCEPTION                :  
  122.     * @LAST MODIFIED BY         :  
  123.     * @LAST MODIFIED DATE       :  
  124.     **/
  125.     public void ejbCreate    ()  
  126.     {
  127.  
  128.     }
  129.    
  130.     /**
  131.     * @METHOD NAME              :   ejbRemove
  132.     * @INFORMATION              :   This method is to  ejb Remove
  133.     * @PARAM                    :  
  134.     * @RETURN                   :   void
  135.     * @EXCEPTION                :  
  136.     * @LAST MODIFIED BY         :  
  137.     * @LAST MODIFIED DATE       :  
  138.     **/
  139.     public void ejbRemove    ()  
  140.     {
  141.  
  142.     }
  143.    
  144.     /**
  145.     * @METHOD NAME              :   ejbActivate
  146.     * @INFORMATION              :   This method is to  ejb Activate
  147.     * @PARAM                    :  
  148.     * @RETURN                   :   void
  149.     * @EXCEPTION                :  
  150.     * @LAST MODIFIED BY         :  
  151.     * @LAST MODIFIED DATE       :  
  152.     **/
  153.     public void ejbActivate    ()  
  154.     {
  155.  
  156.     }
  157.    
  158.     /**
  159.     * @METHOD NAME              :   ejbPassivate
  160.     * @INFORMATION              :   This method is to  ejb Passivate
  161.     * @PARAM                    :  
  162.     * @RETURN                   :   void
  163.     * @EXCEPTION                :  
  164.     * @LAST MODIFIED BY         :  
  165.     * @LAST MODIFIED DATE       :  
  166.     **/
  167.     public void ejbPassivate    ()  
  168.     {
  169.  
  170.     }
  171.    
  172.     /**
  173.     * @METHOD NAME              :   setSessionContext
  174.     * @INFORMATION              :   This method is to  set Session Context
  175.     * @PARAM                    :   interface javax.ejb.SessionContext
  176.     * @RETURN                   :   void
  177.     * @EXCEPTION                :   class javax.ejb.EJBException,
  178.                                     class java.rmi.RemoteException
  179.     * @LAST MODIFIED BY         :  
  180.     * @LAST MODIFIED DATE       :  
  181.     **/
  182.     public void setSessionContext    (SessionContext sc)
  183.         throws EJBException,RemoteException
  184.     {
  185.         this.ctx = sc;
  186.     }
  187.    
  188.     /**
  189.     * @METHOD NAME              :   getRegisteredHospitalList
  190.     * @INFORMATION              :   This method is to  get all the Registered Hospitals in a field office
  191.     * @PARAM                    :   class java.lang.Short
  192.     * @RETURN                   :   class java.util.ArrayList
  193.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  194.     * @LAST MODIFIED BY         :  
  195.     * @LAST MODIFIED DATE       :  
  196.     **/
  197.     public ArrayList getRegisteredHospitalList(Short location)
  198.         throws GOSIException
  199.     {
  200.         PreparedStatement ps = null;
  201.         ResultSet rs = null;
  202.         ArrayList hospitalList = new ArrayList();
  203.         try
  204.         {
  205.             // query to get all registered hospitals in the field office
  206.             String sqlQuery =  "select distinct a.HOSPITALCODE, HOSPITALNAMEARB,"+
  207.             " a.HOSPITALNAMEENG from "+
  208.             SITables.T_HOSPITAL + " a , "+
  209.             SITables.T_HOSPITALFOASSOCIATION +" b "+
  210.             " where a.HOSPITALCODE = b.HOSPITALCODE "+
  211.             " and a.HOSPITALTYPE = ? "+
  212.             " and b.FIELDOFFICECODE = ? ";
  213.  
  214.             con = GOSIUtilities.getConnection
  215.                 (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  216.             ps = con.prepareStatement(sqlQuery);
  217.             ps.setShort(1,OHConstants.REG_HOSPITAL.shortValue());
  218.             ps.setShort(2,location.shortValue());
  219.             rs = ps.executeQuery();
  220.             while (rs.next())
  221.             {
  222.                 HospitalListBean hospitalBean = new HospitalListBean();
  223.                 hospitalBean.setHospitalCode
  224.                     (new Long(rs.getLong("HOSPITALCODE")));
  225.                 hospitalBean.setHospitalNameArb
  226.                     (rs.getString("HOSPITALNAMEARB"));
  227.                 hospitalBean.setHospitalType(OHConstants.REG_HOSPITAL);
  228.                 hospitalList.add(hospitalBean);
  229.             }
  230.             return hospitalList;
  231.         }
  232.         catch(GOSIException ge)
  233.         {
  234.             //GOSIDebug.debugMessages("session:getRegisteredHospital:ge:"+ge);
  235.             throw ge;
  236.         }
  237.         catch (Exception e)
  238.         {
  239.             //GOSIDebug.debugMessages("session:getRegisteredHospital:e:"+e);
  240.             throw new GOSIException( GOSIConstants.SEVERITY_TWO,
  241.                 GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  242.                 "getInjuryNumber()",e,"CMN_ERR_1000");
  243.         }
  244.         finally
  245.         {
  246.             GOSIUtilities.cleanUp(con,ps,rs);
  247.         }
  248.     }
  249.    
  250.     /**
  251.     * @METHOD NAME              :   validateInvoiceDates
  252.     * @INFORMATION              :   This method is to  validate the Invoice Dates entered
  253.     * @PARAM                    :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceHeaderBean
  254.     * @RETURN                   :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceHeaderBean
  255.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  256.     * @LAST MODIFIED BY         :  
  257.     * @LAST MODIFIED DATE       :  
  258.     **/
  259.     public RegHospInvoiceHeaderBean validateInvoiceDates
  260.         (RegHospInvoiceHeaderBean headerBean ) throws GOSIException
  261.     {
  262.         // validate invoice dates are month start and month end
  263.         try
  264.         {
  265.             String startDateStr = headerBean.getStartDateStr();
  266.             //GOSIDebug.debugMessages("------startDateStr:"+startDateStr);
  267.             if(startDateStr!=null && !"".equals(startDateStr))
  268.             {
  269.                 GOSIDateUtilities.checkDateFormat(startDateStr);
  270.                 String entFmt = OHUtilities.getDateFormat(startDateStr);
  271.                 headerBean.setStartDateEntFmt(entFmt);
  272.                 headerBean.setStartDate
  273.                     (OHUtilities.getGregDate(startDateStr,entFmt));
  274.             }
  275.             String endDateStr = headerBean.getEndDateStr();
  276.             //GOSIDebug.debugMessages("------endDateStr:"+endDateStr);
  277.             if(endDateStr!=null && !"".equals(endDateStr))
  278.             {
  279.                 GOSIDateUtilities.checkDateFormat(endDateStr);
  280.                 String entFmt = OHUtilities.getDateFormat(endDateStr);
  281.                 headerBean.setEndDateEntFmt(entFmt);
  282.                 headerBean.setEndDate
  283.                     (OHUtilities.getGregDate(endDateStr,entFmt));
  284.             }
  285.            
  286.             //GOSIDebug.debugMessages("before InvoiceDateStr");
  287.             String invoiceDateStr = headerBean.getInvoiceDateStr();
  288.             //GOSIDebug.debugMessages("------invoiceDateStr:"+invoiceDateStr);
  289.             if(invoiceDateStr!=null && !"".equals(invoiceDateStr))
  290.             {
  291.                 GOSIDateUtilities.checkDateFormat(invoiceDateStr);
  292.                 String entFmt = OHUtilities.getDateFormat(invoiceDateStr);
  293.                 headerBean.setInvoiceDateEntFmt(entFmt);
  294.                 headerBean.setInvoiceDate
  295.                     (OHUtilities.getGregDate(invoiceDateStr,entFmt));
  296.             }
  297.             if(headerBean.getStartDate()!=null && headerBean.getEndDate()!=null&&
  298.             headerBean.getStartDate().compareTo(headerBean.getEndDate())> 0)
  299.             {
  300.                 //GOSIDebug.debugMessages("startDate After endDate");
  301.              // String message = GOSIErrorMessages.getErrorDesc("SOI_ERR_5110");
  302.                 //"Invoice start Date Should be before invoice end Date";
  303.                 throw new GOSIException(GOSIConstants.SEVERITY_THREE,
  304.                 GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  305.                 "validateInvoiceDates()",null,"SOI_ERR_5110");
  306.             }else
  307.             {
  308.                 //GOSIDebug.debugMessages("startDate before endDate");
  309.             }
  310.             if(headerBean.getStartDate()!=null )
  311.             {
  312.                 Timestamp currentDate = new Timestamp(System.currentTimeMillis());
  313.                 if(currentDate.compareTo(headerBean.getStartDate())<0)
  314.                 {
  315.                 //  String message ="Invoice Start date should not be a future date ";
  316.                     throw new GOSIException(GOSIConstants.SEVERITY_THREE,
  317.                     GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  318.                     "validateInvoiceDates()",null,"SOI_ERR_5311");
  319.                 }
  320.                
  321.                 String startDateGreg = GOSIUtilities.getDateFullString(
  322.                     headerBean.getStartDate());
  323.                 String startDateHij = GOSIDateUtilities.convertToHijra
  324.                     (OHUtilities.getDateStr
  325.                         (headerBean.getStartDate(),OHConstants.GREGORIAN)) ;
  326.                 String endDateHij = GOSIDateUtilities.convertToHijra
  327.                     (OHUtilities.getDateStr
  328.                     (headerBean.getEndDate(),OHConstants.GREGORIAN)) ;
  329.                 if(!(1 == OHUtilities.getDay(startDateHij) ||
  330.                     1 == OHUtilities.getDay(startDateGreg) ))
  331.                 {
  332.                     //String message = "Invoice start date should be the first date of a hijra month";
  333.                     throw new GOSIException(GOSIConstants.SEVERITY_THREE,
  334.                     GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  335.                     "validateInvoiceDates()",null,"SOI_ERR_5183");
  336.                 }
  337.                 String monthEndDateHij  = OHUtilities.getMonthEndDate(startDateHij);
  338.                 String monthEndDateGreg = OHUtilities.getMonthEndDate(startDateGreg);
  339.                
  340.                 Timestamp monthEndDate = OHUtilities.getGregDate
  341.                     (monthEndDateHij,OHConstants.HIJRAH);
  342.                 Timestamp gregMonthEndDate = OHUtilities.getGregDate
  343.                     (monthEndDateGreg,OHConstants.GREGORIAN);
  344.                 //GOSIDebug.debugMessages("month end date greg:"+gregMonthEndDate);    
  345.                
  346.                 if(!(monthEndDate.compareTo(headerBean.getEndDate())== 0 ||
  347.                      gregMonthEndDate.compareTo(headerBean.getEndDate())== 0
  348.                     ))
  349.                 {
  350.                     String entFmt = OHUtilities.getDateFormat(startDateStr);
  351.                     String message =GOSIErrorMessages.getErrorDesc("SOI_ERR_5368");
  352.                         //+" "+
  353.                         //"Invoice end date should be"+" "+
  354.                         //OHUtilities.getDateStr(monthEndDate,entFmt);
  355.                     throw new GOSIException(GOSIConstants.SEVERITY_THREE,
  356.                     GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  357.                     "validateInvoiceDates()",message,null,"SOI_ERR_5368");
  358.                 }
  359.                 if(currentDate.compareTo(headerBean.getEndDate())<0)
  360.                 {
  361.                 //  String message ="Invoice end date should not be a future date ";
  362.                     throw new GOSIException(GOSIConstants.SEVERITY_THREE,
  363.                     GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  364.                     "validateInvoiceDates()",null,"SOI_ERR_5184");
  365.                 }
  366.             }
  367.             return headerBean;
  368.         }
  369.         catch(GOSIException ge)
  370.         {
  371.             //GOSIDebug.debugMessages("session:validateInvoiceDates:ge:"+ge);
  372.             throw ge;
  373.         }
  374.         catch (Exception e)
  375.         {
  376.             //GOSIDebug.debugMessages("session:validateInvoiceDates:e:"+e);
  377.             throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  378.                 GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  379.                 "validateInvoiceDates()",e,"CMN_ERR_1000");
  380.         }
  381.     }
  382.    
  383.     /**
  384.     * @METHOD NAME              :   validateInvoiceDetailDates
  385.     * @INFORMATION              :   This method is to  validate Invoice Detail Dates
  386.     * @PARAM                    :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceDetailBean,
  387.                                     class java.lang.String
  388.     * @RETURN                   :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceDetailBean
  389.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  390.     * @LAST MODIFIED BY         :  
  391.     * @LAST MODIFIED DATE       :  
  392.     **/
  393.     private RegHospInvoiceDetailBean validateInvoiceDetailDates
  394.         (RegHospInvoiceDetailBean detailsBean ,String entFmt) throws GOSIException
  395.     {
  396.         try
  397.         {
  398.             // conveting the time stamp dates to String dates
  399.             detailsBean.setTrmtStartDateStr(OHUtilities.getDateStr
  400.                 (detailsBean.getTrmtStartDate(),entFmt));
  401.             detailsBean.setTrmtStartDateEntFmt(entFmt);
  402.            
  403.             detailsBean.setTrmtEndDateStr(OHUtilities.getDateStr
  404.                 (detailsBean.getTrmtEndDate(),entFmt));
  405.             detailsBean.setTrmtEndDateEntFmt(entFmt);
  406.            
  407.             return detailsBean;
  408.         }
  409.         catch(GOSIException ge)
  410.         {
  411.             //GOSIDebug.debugMessages("session:validateInvoiceDetailDates:ge:"+ge);
  412.             throw ge;
  413.         }
  414.         catch (Exception e)
  415.         {
  416.             //GOSIDebug.debugMessages("session:validateInvoiceDetailDates:e:"+e);
  417.             throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  418.                 GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  419.                 "validateInvoiceDetailDates()",e,"CMN_ERR_1000");
  420.         }
  421.     }
  422.    
  423.     /**
  424.     * @METHOD NAME              :   generateRegHospitalInvoice
  425.     * @INFORMATION              :   This method is to  generate Registered Hospital Invoice
  426.     * @PARAM                    :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceHeaderBean
  427.     * @RETURN                   :   class java.util.HashMap
  428.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  429.     * @LAST MODIFIED BY         :  
  430.     * @LAST MODIFIED DATE       :  
  431.     **/
  432.     public HashMap generateRegHospitalInvoice
  433.         (RegHospInvoiceHeaderBean headerBean ) throws GOSIException
  434.     {
  435.         /*
  436.             first the invoice dates are validated and the treatment
  437.             services entered for the hospital on and before that month
  438.             is listed and summed up
  439.             query hospital to get the discount for applying discount
  440.         */
  441.        
  442.         PreparedStatement ps = null;
  443.         ResultSet rs = null;
  444.         ArrayList hospitalList = new ArrayList();
  445.         HashMap details = new HashMap();
  446.         try
  447.         {
  448.             // validating the invoice dates
  449.             headerBean = validateInvoiceDates(headerBean);
  450.             Timestamp startDate =  headerBean.getStartDate();
  451.             Timestamp endDate   =  headerBean.getEndDate();
  452.             String entFmt = OHConstants.DEFAULT_ENT_FMT;
  453.             if(headerBean.getStartDateEntFmt()!=null &&
  454.                 !"".equals(headerBean.getStartDateEntFmt()))
  455.             {
  456.                 entFmt=headerBean.getStartDateEntFmt();
  457.             }
  458.             Short fieldOffice = headerBean.getFieldOffice();
  459.            
  460.             con = GOSIUtilities.getConnection
  461.                 (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  462.             Long hospitalCode = headerBean.getHospitalCode();
  463.             ArrayList serviceList = new ArrayList();
  464.             //GOSIDebug.debugMessages("fileNumber:"+headerBean.getFileNumber());
  465.            
  466.             //if(headerBean.getFileNumber()!=null)
  467.             //{
  468.             //    serviceList =
  469.             //      getServiceList(headerBean.getFileNumber() ,hospitalCode);
  470.             //}else     {
  471.             //method to get the service list for the hospital and file number for the period
  472.                 serviceList =
  473.                     getServiceList(startDate,endDate,
  474.                         hospitalCode,headerBean.getFileNumber());
  475.             //}
  476.             // getting the discount list for the hospital
  477.             ArrayList discountList = getDiscountList(hospitalCode,fieldOffice);
  478.             // getting the unique injury list for the service list
  479.             ArrayList uniqueInjuryList = getUniqueInjuryList(serviceList);
  480.             //GOSIDebug.debugMessages("uniqueInjuryList::::"+uniqueInjuryList.size());
  481.             // getting the unique disability assessment list for the service list
  482.             ArrayList uniqueDisbAssmtList = getUniqueDisbAssmtList(serviceList);
  483.             //GOSIDebug.debugMessages("uniqueDisbList"+uniqueDisbAssmtList.size());
  484.             ArrayList regHospInvoiceDetailList = new ArrayList();
  485.             // itrating unique injury list to sum up the details
  486.             for(int j=0; j<uniqueInjuryList.size(); j++)
  487.             {
  488.                 Long injuryId=(Long)uniqueInjuryList.get(j);
  489.                 //GOSIDebug.debugMessages(" _______Details (Injury) :"+injuryId);
  490.                 // method to get the sum upped details for the injury
  491.                 RegHospInvoiceDetailBean invoiceDetailBean =
  492.                         getInjuryInvoiceDetails(injuryId,serviceList);
  493.                 regHospInvoiceDetailList.add(invoiceDetailBean);
  494.             }
  495.             // itrating unique disability list to sum up the details
  496.             for(int j=0; j<uniqueDisbAssmtList.size(); j++)
  497.             {
  498.                 Long disbAssmtId=(Long)uniqueDisbAssmtList.get(j);
  499.                 //GOSIDebug.debugMessages("______ Details (Disbassmt) :"+disbAssmtId);
  500.                 // mehtod to get the summed up details for the disability
  501.                 RegHospInvoiceDetailBean invoiceDetailBean =
  502.                         getDisbAssmtInvoiceDetails(disbAssmtId,serviceList);
  503.                 regHospInvoiceDetailList.add(invoiceDetailBean);
  504.             }
  505.                 // setting invoice header details
  506.                 //RegHospInvoiceHeaderBean  headerBean = new RegHospInvoiceHeaderBean()
  507.                 //getRegHospitalInvoiceHeader(regHospInvoiceDetailList);
  508.                 //Long headerId =GOSIUtilities.getPrimaryKey("T_REGHOSPINVOICEHDR",systemId));
  509.                 //Long invoiceNumber = GOSIUtilities.getPrimaryKey("REGHOSPINVOICENUMBER",systemId));
  510.                 Timestamp currentDate = new Timestamp(System.currentTimeMillis());
  511.                 //headerBean.setInvoiceHeaderId(headerId);
  512.                 headerBean.setInvoiceNumber(GOSIUtilities.
  513.                     getPrimaryKey("REGHOSINVOICENUMBER",new Long("1")));
  514.                 //headerBean.setHospitalCode(hospicalCode);
  515.                 //headerBean.setFieldOffice(location);
  516.                 headerBean.setInvoiceDate(currentDate);
  517.                 headerBean.setInvoiceDateEntFmt
  518.                     (headerBean.getStartDateEntFmt());
  519.                 headerBean.setInvoiceDateEntFmt(entFmt);
  520.                 headerBean.setInvoiceDateStr
  521.                     (OHUtilities.getDateStr(currentDate,entFmt));
  522.                 headerBean.setInvoiceStatus
  523.                     (OHConstants.REG_HOSP_INVC_ENTERED);
  524.  
  525.                 //GOSIDebug.debugMessages("Details List size :"+regHospInvoiceDetailList.size());
  526.  
  527.                 for(int j=0; j<regHospInvoiceDetailList.size(); j++)
  528.                 {
  529.                     RegHospInvoiceDetailBean detailBean =
  530.                     (RegHospInvoiceDetailBean)regHospInvoiceDetailList.get(j);
  531.                     // method to convert the invoice detail dates to user entered format
  532.                     detailBean = validateInvoiceDetailDates
  533.                         (detailBean,entFmt);
  534.                 }
  535.                 // formating invoice detail list , adding file number page number etc
  536.                 regHospInvoiceDetailList = formatInvoiceDetailsList
  537.                     (regHospInvoiceDetailList,headerBean);
  538.                 details.put("serviceList",serviceList);
  539.                 details.put("detailsList",regHospInvoiceDetailList);
  540.                 // calculate total amount for the invoice
  541.                 headerBean = calculateTotalAmount
  542.                     (regHospInvoiceDetailList,headerBean,discountList);
  543.                 details.put("headerBean", headerBean);
  544.                 return details;
  545.            
  546.            
  547.         }
  548.         catch(GOSIException ge)
  549.         {
  550.             //GOSIDebug.debugMessages("session:getRegisteredHospital:ge:"+ge);
  551.             throw ge;
  552.         }
  553.         catch (Exception e)
  554.         {
  555.             //GOSIDebug.debugMessages("session:getRegisteredHospital:e:"+e);
  556.             throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  557.                 GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  558.                 "getInjuryNumber()",e,"CMN_ERR_1000");
  559.         }
  560.         finally
  561.         {
  562.             GOSIUtilities.cleanUp(con,ps,rs);
  563.         }
  564.     }
  565.    
  566.     /**
  567.     * @METHOD NAME              :   calculateTotalAmount
  568.     * @INFORMATION              :   This method is to calculate Total Amount
  569.     * @PARAM                    :   class java.util.ArrayList,
  570.                                     class gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceHeaderBean,
  571.                                     class java.util.ArrayList
  572.     * @RETURN                   :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceHeaderBean
  573.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  574.     * @LAST MODIFIED BY         :  
  575.     * @LAST MODIFIED DATE       :  
  576.     **/
  577.     private RegHospInvoiceHeaderBean calculateTotalAmount
  578.         (ArrayList detailsList , RegHospInvoiceHeaderBean headerBean,
  579.             ArrayList discountList) throws GOSIException
  580.     {
  581.         try
  582.         {
  583.             double rejectedAmount = 0.00;
  584.             double medicineAmount = 0.00;
  585.             double serviceAmount  = 0.00;
  586.             double discountAmount = 0.00;
  587.             // itrating the details list
  588.             for(int i=0 ; i<detailsList.size(); i++)
  589.             {
  590.                 RegHospInvoiceDetailBean detailsBean =
  591.                     (RegHospInvoiceDetailBean) detailsList.get(i);
  592.                 // add service amount , medicine amount ,rejected amount seperately
  593.                 if(detailsBean.getMedicinesAmount()!= null)
  594.                 {
  595.                     medicineAmount = medicineAmount+
  596.                         detailsBean.getMedicinesAmount().doubleValue();
  597.                 }
  598.                 if(detailsBean.getServicesAmount()!= null)
  599.                 {
  600.                     serviceAmount = serviceAmount+
  601.                         detailsBean.getServicesAmount().doubleValue();
  602.                 }
  603.                 if(detailsBean.getRejectedAmount()!= null)
  604.                 {
  605.                     rejectedAmount = rejectedAmount+
  606.                         detailsBean.getRejectedAmount().doubleValue();
  607.                 }
  608.                 /*if(detailsBean.getDiscountAmount()!= null)
  609.                 {
  610.                     discountAmount = discountAmount+detailsBean.getDiscountAmount().doubleValue();
  611.                 }*/
  612.             }
  613.             // appply discount for medicine
  614.             if(medicineAmount!=0)
  615.             {
  616.                 discountAmount = getDiscountAmount(discountList,
  617.                     medicineAmount,OHConstants.DISC_MEDICINES);
  618.             }
  619.             // apply discount for service
  620.             if(serviceAmount!=0)
  621.             {
  622.                 discountAmount =discountAmount +
  623.                     getDiscountAmount(discountList,serviceAmount,
  624.                         OHConstants.DISC_SERVICES);
  625.             }
  626.             // setting calculated amount into the header bean
  627.             headerBean.setMedicinesAmount(new Double(medicineAmount));
  628.             headerBean.setServicesAmount(new Double(serviceAmount));
  629.             headerBean.setRejectedAmount(new Double(rejectedAmount));
  630.             headerBean.setDiscountAmount(new Double(discountAmount));
  631.             return headerBean;
  632.         }
  633.         catch (Exception e)
  634.         {
  635.             //GOSIDebug.debugMessages("session:calculateTotalAmount:e:"+e);
  636.             throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  637.                 GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  638.                 "calculateTotalAmount()",e,"CMN_ERR_1000");
  639.         }
  640.     }
  641.    
  642.    
  643.     /**
  644.     * @METHOD NAME              :   getDiscountList
  645.     * @INFORMATION              :   This method is to  get Discount List for a hospital
  646.     * @PARAM                    :   class java.lang.Long,
  647.                                     class java.lang.Short
  648.     * @RETURN                   :   class java.util.ArrayList
  649.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  650.     * @LAST MODIFIED BY         :  
  651.     * @LAST MODIFIED DATE       :  
  652.     **/
  653.     private ArrayList getDiscountList(Long hospitalCode,Short fieldOffice )
  654.             throws GOSIException
  655.     {
  656.         PreparedStatement ps = null;
  657.         ResultSet rs = null;
  658.         ArrayList discountList = new ArrayList();
  659.         try
  660.         {
  661.             // query to get the discount details of hospital from the hospital
  662.             // contract table
  663.             String sqlQuery = " select  " +
  664.                 " HOSPITALDISCOUNTID,"+
  665.                 " HOSPITALCONTRACTID,"+
  666.                 " DISCOUNTTYPE, "+
  667.                 " LOWDISCLIMIT, "+
  668.                 " UPPDISCLIMIT, "+
  669.                 " DISCPERCENTAGE "+
  670.                 " from "+SITables.T_HOSPITALDISCOUNT +
  671.                 " where HOSPITALCONTRACTID = "+
  672.                 " (select HOSPCONTRID  "+
  673.                 " from "+SITables.T_HOSPITALCONTRACT+
  674.                 " where HOSPITALCODE = ? and AGREESTATUS = ?  )";
  675.                // " where HOSPITALCODE = ? and AGREESTATUS = ? and "+
  676.                // " FIELDOFFICECODE = ? )";
  677.             //GOSIDebug.debugMessages("sqlQuery:\n"+sqlQuery);
  678.             ps = con.prepareStatement(sqlQuery);
  679.             ps.setLong(1,hospitalCode.longValue());
  680.             ps.setByte(2,OHConstants.AGREESTATUS_YES.byteValue());
  681.             //ps.setShort(3,fieldOffice.shortValue());
  682.             rs = ps.executeQuery();
  683.             while (rs.next())
  684.             {
  685.                HospitalDiscountDetailBean discountBean =
  686.                    new HospitalDiscountDetailBean();
  687.                discountBean.setDiscountType
  688.                    (new Byte(rs.getByte("DISCOUNTTYPE"))) ;
  689.                discountBean.setLowDiscLimit
  690.                    (new Double(rs.getDouble("LOWDISCLIMIT"))) ;
  691.                discountBean.setUppDiscLimit
  692.                    (new Double(rs.getDouble("UPPDISCLIMIT"))) ;
  693.                discountBean.setDiscPercentage
  694.                    (new Float(rs.getFloat("DISCPERCENTAGE"))) ;
  695.                discountList.add(discountBean);
  696.             }
  697.             return discountList;
  698.            
  699.            
  700.         }
  701.         catch (Exception e)
  702.         {
  703.             //GOSIDebug.debugMessages("session:getDiscountList:e:"+e);
  704.             throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  705.                 GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  706.                 "getDiscountList()",e,"CMN_ERR_1000");
  707.         }
  708.         finally
  709.         {
  710.             GOSIUtilities.cleanUp(ps,rs);
  711.         }
  712.            
  713.        
  714.     }
  715.    
  716.     /**
  717.     * @METHOD NAME              :   getDiscountAmount
  718.     * @INFORMATION              :   This method is to  calculate Discount Amount using discount list
  719.     * @PARAM                    :   class java.util.ArrayList,
  720.                                     double,
  721.                                     class java.lang.Byte
  722.     * @RETURN                   :   double
  723.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  724.     * @LAST MODIFIED BY         :  
  725.     * @LAST MODIFIED DATE       :  
  726.     **/
  727.     private double getDiscountAmount(ArrayList discountList ,
  728.         double amount,Byte discountType  )
  729.             throws GOSIException
  730.     {
  731.         double discountAmount = 0.00;
  732.         try
  733.         {
  734.             // logic for applying the discount
  735.             // if the amount between the discount amount apply the discount percentage
  736.             for(int i=0;i<discountList.size();i++ )
  737.             {
  738.                 HospitalDiscountDetailBean discountBean =
  739.                     (HospitalDiscountDetailBean)discountList.get(i);
  740.                 double upperLimit =
  741.                     discountBean.getUppDiscLimit().doubleValue();
  742.                 double lowerLimit =
  743.                     discountBean.getLowDiscLimit().doubleValue();
  744.                 Byte beanDiscountType = discountBean.getDiscountType();
  745.                 if(discountType.equals(beanDiscountType) ||
  746.                    OHConstants.DISC_TOT_AMOUNT.equals(discountType) )
  747.                 {
  748.                     if(lowerLimit == 0 && upperLimit ==0 )
  749.                     {
  750.                         float discountPercentage =
  751.                         (discountBean.
  752.                         getDiscPercentage().floatValue())/100;
  753.                        
  754.                         discountAmount = amount * discountPercentage;
  755.                         break;
  756.  
  757.                     }else
  758.                     if(amount >= lowerLimit && amount <= upperLimit )
  759.                     {
  760.                        
  761.                         float discountPercentage =
  762.                         (discountBean.
  763.                         getDiscPercentage().floatValue())/100;
  764.                        
  765.                         discountAmount = amount * discountPercentage;
  766.                         break;
  767.                     }
  768.                 }
  769.             }
  770.             return discountAmount;
  771.         }
  772.         catch (Exception e)
  773.         {
  774.             //GOSIDebug.debugMessages("session:getDiscountAmount:e:"+e);
  775.             throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  776.                 GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  777.                 "getDiscountAmount()",e,"CMN_ERR_1000");
  778.         }
  779.    
  780.     }
  781.    
  782.    
  783.     /**
  784.     * @METHOD NAME              :   getServiceList
  785.     * @INFORMATION              :   This method is to  get Service List (approved treatment for the period )
  786.     * @PARAM                    :   class java.sql.Timestamp,
  787.                                     class java.sql.Timestamp,
  788.                                     class java.lang.Long,
  789.                                     class java.lang.Long
  790.     * @RETURN                   :   class java.util.ArrayList
  791.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  792.     * @LAST MODIFIED BY         :  
  793.     * @LAST MODIFIED DATE       :  
  794.     **/
  795.     private ArrayList getServiceList(Timestamp startDate , Timestamp endDate,
  796.         Long hospitalCode,Long fileNumber ) throws GOSIException
  797.     {
  798.         PreparedStatement ps = null;
  799.         ResultSet rs = null;
  800.         ArrayList serviceList = new ArrayList();
  801.         try
  802.         {
  803.             // query to get all treatment service details for the hospital
  804.             // and file number till the end date
  805.             // if file number is not provided get detils only for the month
  806.             String sqlQuery = ""+
  807.             " select a.TRMTSERVICEDETID, b.TRMTSERVICEHDRID, a.TRMTDATE,"+
  808.             " a.TRMTAMT, a.UNITS,"+
  809.             " a.ICD10TRMTDIAGNOSISCODE, a.UNITPRICE, a.APPROVEDUNITS,"+
  810.             " a.FILENUMBER, a.PAGENUMBER , "+
  811.             " a.TRMTSRVCSTATUS, b.INJURYID, b.DISASSMTID " +
  812.             " from "+SITables.T_TRMTSERVICESDET +" a, " +
  813.             SITables.T_TRMTSERVICESHDR +
  814.             " b where a.TRMTSERVICEHDRID = b.TRMTSERVICEHDRID and "+
  815.             " a.TRMTDATE <= ? and ";
  816.             if(fileNumber == null)
  817.             {
  818.                 sqlQuery = sqlQuery +" a.TRMTDATE >=? and ";
  819.             }
  820.             sqlQuery = sqlQuery +
  821.             " a.TRMTSRVCSTATUS = ? "+
  822.             " and (a.PAYMENTSTATUS != ? or a.PAYMENTSTATUS is null ) "+
  823.             " and b.HOSPITALCODE = ? ";
  824.            
  825.             if(fileNumber!=null)
  826.             {
  827.                 sqlQuery = sqlQuery+" and a.FILENUMBER =? ";
  828.             }else
  829.             {
  830.                 sqlQuery = sqlQuery+" and a.FILENUMBER is null ";
  831.             }
  832.            
  833.             sqlQuery = sqlQuery +
  834.             " order by b.DISASSMTID, b.INJURYID,"+
  835.             " b.TRMTSERVICEHDRID,a.TRMTSERVICEDETID ";
  836.            
  837.             //GOSIDebug.debugMessages("sqlQuery::\n"+sqlQuery);
  838.             ps = con.prepareStatement(sqlQuery);
  839.             int i=0;
  840.             ps.setTimestamp(++i,endDate);
  841.             if(fileNumber == null)
  842.             {
  843.                 ps.setTimestamp(++i,startDate);
  844.             }
  845.             ps.setShort(++i,OHConstants.TRMT_SRVC_STS_APPROVED.shortValue());
  846.             ps.setLong(++i,OHConstants.TRMT_SRVC_PAY_STS_PAID.shortValue());
  847.             ps.setLong(++i,hospitalCode.longValue());
  848.             if(fileNumber!=null)
  849.             {
  850.                 ps.setLong(++i,fileNumber.longValue());
  851.             }
  852.             rs= ps.executeQuery();
  853.             while(rs.next())
  854.             {
  855.                 TreatmentServiceBean serviceBean = new TreatmentServiceBean();
  856.                 serviceBean.setTrmtServiceDetId
  857.                     (new Long(rs.getLong("TRMTSERVICEDETID")));
  858.                 serviceBean.setTrmtServiceHdrId
  859.                     (new Long(rs.getLong("TRMTSERVICEHDRID")));
  860.                 serviceBean.setTrmtDateGreg(rs.getTimestamp("TRMTDATE"));
  861.                 serviceBean.setTrmtAmt(new Double(rs.getDouble("TRMTAMT")));
  862.                
  863.                 if(rs.getObject("UNITS")!= null)
  864.                 {
  865.                     serviceBean.setUnits(rs.getFloat("UNITS"));
  866.                 }
  867.                 serviceBean.setTrmtCode(rs.getString("ICD10TRMTDIAGNOSISCODE"));
  868.                
  869.                 if(rs.getObject("UNITPRICE")!= null)
  870.                 {
  871.                     serviceBean.setUnitPrice
  872.                         (new Double(rs.getDouble("UNITPRICE")));
  873.                 }
  874.                 if(rs.getObject("APPROVEDUNITS")!= null)
  875.                 {
  876.                     serviceBean.setApprovedUnits(rs.getFloat("APPROVEDUNITS"));
  877.                 }
  878.                 serviceBean.setTrmtSrvcStatus
  879.                     (new Short(rs.getShort("TRMTSRVCSTATUS")));
  880.                 if(rs.getObject("INJURYID")!=null)
  881.                 {
  882.                     serviceBean.setInjuryId
  883.                         (new Long(rs.getLong("INJURYID")));
  884.                 }
  885.                 if(rs.getObject("DISASSMTID")!=null)
  886.                 {
  887.                     serviceBean.setDisbAssmtId
  888.                         (new Long(rs.getLong("DISASSMTID")));
  889.                 }
  890.                 if (rs.getObject("FILENUMBER")!=null)
  891.                 {
  892.                     serviceBean.setFileNumber(new Long(rs.getLong("FILENUMBER")));
  893.                 }
  894.                 if (rs.getObject("PAGENUMBER")!=null)
  895.                 {
  896.                     serviceBean.setPageNumber(new Long(rs.getLong("PAGENUMBER")));
  897.                 }
  898.                 //GOSIDebug.debugMessages("TrmtServiceDetailId :"+serviceBean.getTrmtServiceDetId()+","+serviceBean.getInjuryId()+","+serviceBean.getTrmtCode()+","+serviceBean.getUnits()+","+serviceBean.getApprovedUnits());
  899.                 serviceList.add(serviceBean);
  900.             }
  901.             // if service list is null throw error message
  902.             if(serviceList.size()==0)
  903.             {
  904.              //String message = GOSIErrorMessages.getErrorDesc("SOI_ERR_5111");
  905.                 //"Invoice cannot be generated as no treatment "+
  906.                 // "expenses found for the given period";
  907.                 throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  908.                 GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  909.                 "getServiceList()",null,"SOI_ERR_5111");
  910.             }
  911.             return serviceList;
  912.         }
  913.         catch (GOSIException ge )
  914.         {
  915.             //GOSIDebug.debugMessages("session:getServiceList:ge:"+ge);
  916.             throw ge;
  917.         }
  918.         catch (Exception e )
  919.         {
  920.             //GOSIDebug.debugMessages("session:getServiceList:e:"+e);
  921.             throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  922.                 GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  923.                 "getServiceList()",e,"CMN_ERR_1000");
  924.            
  925.         }
  926.         finally
  927.         {
  928.             GOSIUtilities.cleanUp(ps,rs);
  929.         }
  930.     }
  931.    
  932.    
  933.     /**
  934.     * @METHOD NAME              :   getServiceList
  935.     * @INFORMATION              :   This method is to  get Service List for a particular file number and hospital
  936.     * @PARAM                    :   class java.lang.Long,
  937.                                     class java.lang.Long
  938.     * @RETURN                   :   class java.util.ArrayList
  939.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  940.     * @LAST MODIFIED BY         :  
  941.     * @LAST MODIFIED DATE       :  
  942.     **/
  943.     private ArrayList getServiceList(Long fileNumber,
  944.         Long hospitalCode) throws GOSIException
  945.     {
  946.         PreparedStatement ps = null;
  947.         ResultSet rs = null;
  948.         ArrayList serviceList = new ArrayList();
  949.         try
  950.         {
  951.             // query to get service details for a hospital and file number
  952.             // method not currenly used
  953.  
  954.             String sqlQuery = ""+
  955.             " select a.TRMTSERVICEDETID, b.TRMTSERVICEHDRID, a.TRMTDATE,"+
  956.             " a.TRMTAMT, a.UNITS,"+
  957.             " a.ICD10TRMTDIAGNOSISCODE, a.UNITPRICE, a.APPROVEDUNITS,"+
  958.             " a.FILENUMBER, a.PAGENUMBER , "+
  959.             " a.TRMTSRVCSTATUS, b.INJURYID, b.DISASSMTID " +
  960.             " from "+SITables.T_TRMTSERVICESDET +" a, " +
  961.               SITables.T_TRMTSERVICESHDR +
  962.             " b where a.TRMTSERVICEHDRID = b.TRMTSERVICEHDRID and "+
  963.             " FILENUMBER =? and "+
  964.             " a.TRMTSRVCSTATUS = ? "+
  965.             " and (a.PAYMENTSTATUS != ? or a.PAYMENTSTATUS is null ) "+
  966.             " and b.HOSPITALCODE = ? "+
  967.             " order by b.DISASSMTID, b.INJURYID,"+
  968.             " b.TRMTSERVICEHDRID,a.TRMTSERVICEDETID ";
  969.            
  970.             //GOSIDebug.debugMessages("sqlQuery::\n"+sqlQuery);
  971.             ps = con.prepareStatement(sqlQuery);
  972.             ps.setLong(1,fileNumber.longValue());
  973.             ps.setShort(2,OHConstants.TRMT_SRVC_STS_APPROVED.shortValue());
  974.             ps.setLong(3,OHConstants.TRMT_SRVC_PAY_STS_PAID.shortValue());
  975.             ps.setLong(4,hospitalCode.longValue());
  976.             rs= ps.executeQuery();
  977.             while(rs.next())
  978.             {
  979.                 TreatmentServiceBean serviceBean = new TreatmentServiceBean();
  980.                 serviceBean.setTrmtServiceDetId
  981.                     (new Long(rs.getLong("TRMTSERVICEDETID")));
  982.                 serviceBean.setTrmtServiceHdrId
  983.                     (new Long(rs.getLong("TRMTSERVICEHDRID")));
  984.                 serviceBean.setTrmtDateGreg(rs.getTimestamp("TRMTDATE"));
  985.                 serviceBean.setTrmtAmt(new Double(rs.getDouble("TRMTAMT")));
  986.                
  987.                 if(rs.getObject("UNITS")!= null)
  988.                 {
  989.                     serviceBean.setUnits(rs.getFloat("UNITS"));
  990.                 }
  991.                 serviceBean.setTrmtCode(rs.getString("ICD10TRMTDIAGNOSISCODE"));
  992.                
  993.                 if(rs.getObject("UNITPRICE")!= null)
  994.                 {
  995.                     serviceBean.setUnitPrice
  996.                         (new Double(rs.getDouble("UNITPRICE")));
  997.                 }
  998.                 if(rs.getObject("APPROVEDUNITS")!= null)
  999.                 {
  1000.                     serviceBean.setApprovedUnits(rs.getFloat("APPROVEDUNITS"));
  1001.                 }
  1002.                 serviceBean.setTrmtSrvcStatus
  1003.                     (new Short(rs.getShort("TRMTSRVCSTATUS")));
  1004.                 if(rs.getObject("INJURYID")!=null)
  1005.                 {
  1006.                     serviceBean.setInjuryId
  1007.                         (new Long(rs.getLong("INJURYID")));
  1008.                 }
  1009.                 if(rs.getObject("DISASSMTID")!=null)
  1010.                 {
  1011.                     serviceBean.setDisbAssmtId
  1012.                         (new Long(rs.getLong("DISASSMTID")));
  1013.                 }
  1014.                 if (rs.getObject("FILENUMBER")!=null)
  1015.                 {
  1016.                     serviceBean.setFileNumber(new Long(rs.getLong("FILENUMBER")));
  1017.                 }
  1018.                 if (rs.getObject("PAGENUMBER")!=null)
  1019.                 {
  1020.                     serviceBean.setPageNumber(new Long(rs.getLong("PAGENUMBER")));
  1021.                 }
  1022.                 //GOSIDebug.debugMessages("TrmtServiceDetailId :"+serviceBean.getTrmtServiceDetId()+","+serviceBean.getInjuryId()+","+serviceBean.getTrmtCode()+","+serviceBean.getUnits()+","+serviceBean.getApprovedUnits());
  1023.                 serviceList.add(serviceBean);
  1024.             }
  1025.             if(serviceList.size()==0)
  1026.             {
  1027.              //String message = GOSIErrorMessages.getErrorDesc("SOI_ERR_5111");
  1028.                 //"Invoice cannot be generated as no treatment "+
  1029.                 // "expenses found for the given period";
  1030.                 throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  1031.                 GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  1032.                 "getServiceList()",null,"SOI_ERR_5111");
  1033.             }
  1034.             return serviceList;
  1035.         }
  1036.         catch (GOSIException ge )
  1037.         {
  1038.             //GOSIDebug.debugMessages("session:getServiceList:ge:"+ge);
  1039.             throw ge;
  1040.         }
  1041.         catch (Exception e )
  1042.         {
  1043.             //GOSIDebug.debugMessages("session:getServiceList:e:"+e);
  1044.             throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  1045.                 GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  1046.                 "getServiceList()",e,"CMN_ERR_1000");
  1047.            
  1048.         }
  1049.         finally
  1050.         {
  1051.             GOSIUtilities.cleanUp(ps,rs);
  1052.         }
  1053.     }
  1054.  
  1055.  
  1056.     /**
  1057.     * @METHOD NAME              :   getUniqueInjuryList
  1058.     * @INFORMATION              :   This method is to  get Unique Injury List
  1059.     * @PARAM                    :   class java.util.ArrayList
  1060.     * @RETURN                   :   class java.util.ArrayList
  1061.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  1062.     * @LAST MODIFIED BY         :  
  1063.     * @LAST MODIFIED DATE       :  
  1064.     **/
  1065.     private ArrayList getUniqueInjuryList(ArrayList serviceList)
  1066.         throws GOSIException
  1067.     {
  1068.         ArrayList uniqueInjuryList = new ArrayList();
  1069.         try
  1070.         {
  1071.             // logic to find the unique injuries in the list
  1072.             for(int i=0 ; i< serviceList.size() ; i++)
  1073.             {
  1074.                 TreatmentServiceBean serviceBean =
  1075.                     (TreatmentServiceBean)serviceList.get(i);
  1076.                 Long injuryId = serviceBean.getInjuryId();
  1077.                 if(uniqueInjuryList.size()==0 && injuryId != null)
  1078.                 {
  1079.                     uniqueInjuryList.add(injuryId);
  1080.                 }else if(injuryId != null)
  1081.                 {
  1082.                     boolean isInjuryIdAbsent = true;
  1083.                     for(int j=0 ; j<uniqueInjuryList.size(); j++)
  1084.                     {
  1085.                         Long uniqueInjuryId = (Long)uniqueInjuryList.get(j);
  1086.                         if(injuryId.equals(uniqueInjuryId))
  1087.                         {
  1088.                             isInjuryIdAbsent = false;
  1089.                             break;
  1090.                         }
  1091.                     }
  1092.                     if(isInjuryIdAbsent)
  1093.                     {
  1094.                         //GOSIDebug.debugMessages("injuryId:"+injuryId);
  1095.                         uniqueInjuryList.add(injuryId);
  1096.                     }
  1097.                 }
  1098.             }
  1099.             return uniqueInjuryList;
  1100.         }
  1101.         catch (Exception e)
  1102.         {
  1103.             //GOSIDebug.debugMessages("session:getUniqueInjuryList:e:"+e);
  1104.             throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  1105.                 GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  1106.                 "getUniqueInjuryList()",e,"CMN_ERR_1000");
  1107.         }
  1108.     }
  1109.  
  1110.     /**
  1111.     * @METHOD NAME              :   getUniqueDisbAssmtList
  1112.     * @INFORMATION              :   This method is to  get Unique Disb Assmt List
  1113.     * @PARAM                    :   class java.util.ArrayList
  1114.     * @RETURN                   :   class java.util.ArrayList
  1115.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  1116.     * @LAST MODIFIED BY         :  
  1117.     * @LAST MODIFIED DATE       :  
  1118.     **/
  1119.     private ArrayList getUniqueDisbAssmtList(ArrayList serviceList)
  1120.         throws GOSIException
  1121.     {
  1122.         ArrayList uniqueDisbAssmtList = new ArrayList();
  1123.         try
  1124.         {
  1125.             // logic to find the unique disability in the list
  1126.             for(int i=0 ; i< serviceList.size() ; i++)
  1127.             {
  1128.                 TreatmentServiceBean serviceBean =
  1129.                     (TreatmentServiceBean)serviceList.get(i);
  1130.                 Long disbAssmtId = serviceBean.getDisbAssmtId();
  1131.                 if(uniqueDisbAssmtList.size()==0 && disbAssmtId != null)
  1132.                 {
  1133.                     uniqueDisbAssmtList.add(disbAssmtId);
  1134.                 }else if(disbAssmtId != null)
  1135.                 {
  1136.                     boolean isDisbAssmtIdAbsent = true;
  1137.                     for(int j=0 ; j<uniqueDisbAssmtList.size(); j++)
  1138.                     {
  1139.                         Long uniqueDisbAssmtId =
  1140.                             (Long)uniqueDisbAssmtList.get(j);
  1141.                         if(disbAssmtId.equals(uniqueDisbAssmtId))
  1142.                         {
  1143.                             isDisbAssmtIdAbsent = false;
  1144.                             break;
  1145.                         }
  1146.                     }
  1147.                     if(isDisbAssmtIdAbsent)
  1148.                     {
  1149.                         uniqueDisbAssmtList.add(disbAssmtId);
  1150.                     }
  1151.                 }
  1152.             }
  1153.             return uniqueDisbAssmtList;
  1154.         }
  1155.         catch (Exception e)
  1156.         {
  1157.             //GOSIDebug.debugMessages("session:getUniqueDisbAssmtList:e:"+e);
  1158.             throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  1159.                 GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  1160.                 "getUniqueInjuryList()",e,"CMN_ERR_1000");
  1161.         }
  1162.     }
  1163.  
  1164.     /**
  1165.     * @METHOD NAME              :   getInjuryInvoiceDetails
  1166.     * @INFORMATION              :   This method is to  calculate the Injury Invoice Details
  1167.     * @PARAM                    :   class java.lang.Long,
  1168.                                     class java.util.ArrayList
  1169.     * @RETURN                   :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceDetailBean
  1170.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  1171.     * @LAST MODIFIED BY         :  
  1172.     * @LAST MODIFIED DATE       :  
  1173.     **/
  1174.     private RegHospInvoiceDetailBean getInjuryInvoiceDetails(Long injuryId ,
  1175.         ArrayList serviceList)throws GOSIException
  1176.     {
  1177.         RegHospInvoiceDetailBean detailBean = null;
  1178.         try
  1179.         {
  1180.            
  1181.             // logic to get the serviceAmount,medicineAmount,rejectedAmount
  1182.             // for a particular injury id
  1183.             double serviceAmount = 0.00;
  1184.             double medicineAmount = 0.00;
  1185.             double rejectedAmount = 0.00;
  1186.             //double discountAmount = 0.00;
  1187.             Long pageNumber = null;
  1188.             Timestamp startDate = null;
  1189.             Timestamp endDate = null;
  1190.             for (int i=0;i<serviceList.size(); i++ )
  1191.             {
  1192.                 TreatmentServiceBean serviceBean =
  1193.                     (TreatmentServiceBean)serviceList.get(i);
  1194.                
  1195.                 Long serviceInjuryId = serviceBean.getInjuryId();
  1196.                 if(serviceInjuryId != null &&
  1197.                     serviceBean.getInjuryId().equals(injuryId))
  1198.                 {
  1199.                     // setting the trmt dates for the injury
  1200.                     if(startDate == null)
  1201.                     {
  1202.                         startDate = serviceBean.getTrmtDateGreg();
  1203.                     }else
  1204.                     {
  1205.                         if(startDate.compareTo(serviceBean.getTrmtDateGreg())>0)
  1206.                         {
  1207.                             startDate = serviceBean.getTrmtDateGreg();
  1208.                         }
  1209.                     }
  1210.                     if(endDate == null)
  1211.                     {
  1212.                         endDate = serviceBean.getTrmtDateGreg();
  1213.                     }else
  1214.                     {
  1215.                         if (endDate.compareTo(serviceBean.getTrmtDateGreg())<0)
  1216.                         {
  1217.                             endDate = serviceBean.getTrmtDateGreg();
  1218.                         }
  1219.                     }
  1220.                     if(serviceBean.getPageNumber()!=null)
  1221.                     {
  1222.                         pageNumber = serviceBean.getPageNumber();
  1223.                     }
  1224.                     //GOSIDebug.debugMessages("PageNumber:"+pageNumber);
  1225.  
  1226.                     String trmtCode = serviceBean.getTrmtCode();
  1227.                     //GOSIDebug.debugMessages("trmtCode:"+trmtCode);
  1228.                     if(OHConstants.ICD_MEDICINE_CODE.equals(trmtCode))
  1229.                     {
  1230.                         medicineAmount=medicineAmount +
  1231.                             serviceBean.getTrmtAmt().doubleValue();
  1232.                        // discountAmount = discountAmount + getDiscountAmount
  1233.                          //   (discountList, medicineAmount, OHConstants.DISC_MEDICINES);                  
  1234.                     }else if(OHConstants.TRMT_SRVC_BULK_ENTRY.equals(trmtCode))
  1235.                     {
  1236.                         serviceAmount=serviceAmount + serviceBean.getTrmtAmt().doubleValue();
  1237.                     }
  1238.                     else
  1239.                     {
  1240.                         int units = serviceBean.getUnits().intValue();
  1241.                         double unitPrice =
  1242.                             serviceBean.getUnitPrice().doubleValue();
  1243.                         int approvedUnits = serviceBean.getUnits().intValue();
  1244.                         if(serviceBean.getApprovedUnits()!=null)
  1245.                         {
  1246.                             approvedUnits =
  1247.                                 serviceBean.getApprovedUnits().intValue();
  1248.                         }
  1249.                         //GOSIDebug.debugMessages("         units:"+units);
  1250.                         //GOSIDebug.debugMessages("Approved units:"+approvedUnits);
  1251.                         if(units != approvedUnits )
  1252.                         {
  1253.                             serviceAmount = serviceAmount +
  1254.                                 (approvedUnits*unitPrice);
  1255.                             rejectedAmount = rejectedAmount +
  1256.                                 ((units - approvedUnits)*unitPrice);
  1257.                             //discountAmount = discountAmount + getDiscountAmount
  1258.                                // (discountList, (approvedUnits*unitPrice), OHConstants.DISC_SERVICES);                
  1259.                         }else
  1260.                         {
  1261.                             serviceAmount = serviceAmount +
  1262.                                 (approvedUnits*unitPrice);
  1263.                             //discountAmount = discountAmount + getDiscountAmount
  1264.                                 //(discountList, (approvedUnits*unitPrice), OHConstants.DISC_SERVICES);                
  1265.                         }
  1266.                         //GOSIDebug.debugMessages("serviceAmount :"+serviceAmount);
  1267.                         //GOSIDebug.debugMessages("rejectedAmount:"+rejectedAmount);
  1268.                     }
  1269.  
  1270.                 }
  1271.             }
  1272.             // setting the details into the detail bean
  1273.             if(serviceAmount !=0  || medicineAmount != 0 || rejectedAmount != 0)
  1274.             {
  1275.                 detailBean = new RegHospInvoiceDetailBean();
  1276.                 detailBean.setInjuryId(injuryId);
  1277.                 detailBean.setServicesAmount(new Double(serviceAmount));
  1278.                 detailBean.setMedicinesAmount(new Double(medicineAmount));
  1279.                 detailBean.setRejectedAmount(new Double(rejectedAmount));
  1280.                 //detailBean.setDiscountAmount(new Double(discountAmount));
  1281.                 detailBean.setTrmtStartDate(startDate);
  1282.                 detailBean.setTrmtEndDate(endDate);
  1283.                 detailBean = getInjuryDetails(detailBean);
  1284.                 detailBean.setPageNumber(pageNumber);
  1285.             }
  1286.             return detailBean;
  1287.            
  1288.         }
  1289.         catch (Exception e)
  1290.         {
  1291.             //GOSIDebug.debugMessages("session:getInjuryInvoiceDetails:e:"+e);
  1292.             throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  1293.                 GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  1294.                 "getUniqueInjuryList()",e,"CMN_ERR_1000");
  1295.         }
  1296.     }
  1297.     /**
  1298.     * @METHOD NAME              :   getDisbAssmtInvoiceDetails
  1299.     * @INFORMATION              :   This method is to  calculate the Disb Assmt Invoice Details
  1300.     * @PARAM                    :   class java.lang.Long,
  1301.                                     class java.util.ArrayList
  1302.     * @RETURN                   :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceDetailBean
  1303.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  1304.     * @LAST MODIFIED BY         :  
  1305.     * @LAST MODIFIED DATE       :  
  1306.     **/
  1307.     private RegHospInvoiceDetailBean getDisbAssmtInvoiceDetails
  1308.         (Long disbAssmtId , ArrayList serviceList)throws GOSIException
  1309.     {
  1310.         RegHospInvoiceDetailBean detailBean = null;
  1311.         try
  1312.         {
  1313.             // logic to get the serviceAmount,medicineAmount,rejectedAmount
  1314.             // for a particular disbassmt id  
  1315.             double serviceAmount = 0.00;
  1316.             double medicineAmount = 0.00;
  1317.             double rejectedAmount = 0.00;
  1318.             Long pageNumber = null;
  1319.             //double discountAmount = 0.00;
  1320.             Timestamp startDate = null;
  1321.             Timestamp endDate = null;
  1322.             for (int i=0;i<serviceList.size(); i++ )
  1323.             {
  1324.                 TreatmentServiceBean serviceBean =
  1325.                     (TreatmentServiceBean)serviceList.get(i);
  1326.                 Long serviceDisbAssmtId = serviceBean.getDisbAssmtId();
  1327.                 if(serviceDisbAssmtId != null &&
  1328.                     serviceBean.getDisbAssmtId().equals(disbAssmtId))
  1329.                 {
  1330.                     // setting the treatment start and end dates
  1331.                     if(startDate == null)
  1332.                     {
  1333.                         startDate = serviceBean.getTrmtDateGreg();
  1334.                     }else
  1335.                     {
  1336.                         if(startDate.compareTo(serviceBean.getTrmtDateGreg())>0)
  1337.                         {
  1338.                             startDate = serviceBean.getTrmtDateGreg();
  1339.                         }
  1340.                     }
  1341.                     if(endDate == null)
  1342.                     {
  1343.                         endDate = serviceBean.getTrmtDateGreg();
  1344.                     }else
  1345.                     {
  1346.                         if (endDate.compareTo(serviceBean.getTrmtDateGreg())<0)
  1347.                         {
  1348.                             endDate = serviceBean.getTrmtDateGreg();
  1349.                         }
  1350.                     }
  1351.                     if(serviceBean.getPageNumber() != null)
  1352.                     {
  1353.                         pageNumber = serviceBean.getPageNumber();
  1354.                     }
  1355.                     // calculating the varios totals
  1356.                     String trmtCode = serviceBean.getTrmtCode();
  1357.                     if(OHConstants.ICD_MEDICINE_CODE.equals(trmtCode))
  1358.                     {
  1359.                         medicineAmount=medicineAmount +
  1360.                             serviceBean.getTrmtAmt().doubleValue();
  1361.                         //discountAmount = discountAmount + getDiscountAmount
  1362.                            // (discountList, medicineAmount, OHConstants.DISC_MEDICINES);                  
  1363.                     }
  1364.                     else if(OHConstants.TRMT_SRVC_BULK_ENTRY.equals(trmtCode))
  1365.                     {
  1366.                         serviceAmount=serviceAmount + serviceBean.getTrmtAmt().doubleValue();
  1367.                     }
  1368.                     else
  1369.                     {
  1370.                         int units = serviceBean.getUnits().intValue();
  1371.                         double unitPrice =
  1372.                             serviceBean.getUnitPrice().doubleValue();
  1373.                         int approvedUnits = serviceBean.getUnits().intValue();
  1374.                         if(serviceBean.getApprovedUnits()!=null)
  1375.                         {
  1376.                             approvedUnits =
  1377.                                 serviceBean.getApprovedUnits().intValue();
  1378.                         }
  1379.                         if(units != approvedUnits )
  1380.                         {
  1381.                             serviceAmount = serviceAmount +
  1382.                                 (approvedUnits*unitPrice);
  1383.                             rejectedAmount = rejectedAmount +
  1384.                                 ((units - approvedUnits)*unitPrice);
  1385.                             //discountAmount = discountAmount + getDiscountAmount
  1386.                               //  (discountList, (approvedUnits*unitPrice), OHConstants.DISC_SERVICES);                
  1387.                         }else
  1388.                         {
  1389.                             serviceAmount = serviceAmount +
  1390.                                 (approvedUnits*unitPrice);
  1391.                             //discountAmount = discountAmount + getDiscountAmount
  1392.                                // (discountList, (approvedUnits*unitPrice), OHConstants.DISC_SERVICES);                
  1393.                         }
  1394.                     }
  1395.                 }
  1396.             }
  1397.             // setting the detail amounts into the detail bean
  1398.             if(serviceAmount !=0  || medicineAmount != 0 || rejectedAmount != 0)
  1399.             {
  1400.                 detailBean = new RegHospInvoiceDetailBean();
  1401.                 detailBean.setDisbAssmtId(disbAssmtId);
  1402.                 detailBean.setServicesAmount(new Double(serviceAmount));
  1403.                 detailBean.setMedicinesAmount(new Double(medicineAmount));
  1404.                 detailBean.setRejectedAmount(new Double(rejectedAmount));
  1405.                 //detailBean.setDiscountAmount (new Double(discountAmount));
  1406.                 detailBean.setTrmtStartDate(startDate);
  1407.                 detailBean.setTrmtEndDate(endDate);
  1408.                 detailBean = getDisbAssmtDetails(detailBean);
  1409.                 detailBean.setPageNumber(pageNumber);
  1410.             }
  1411.             //GOSIDebug.debugMessages("detailsBean:"+detailBean);
  1412.             return detailBean;
  1413.            
  1414.         }
  1415.         catch (Exception e)
  1416.         {
  1417.             //GOSIDebug.debugMessages("session:getDisbAssmtInvoiceDetails:e:"+e);
  1418.             throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  1419.                 GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  1420.                 "getDisbAssmtInvoiceDetails()",e,"CMN_ERR_1000");
  1421.         }
  1422.     }
  1423.    
  1424.     /*   Functions for batch  ends  here */
  1425.    
  1426.     /**
  1427.     * @METHOD NAME              :   saveRegHospitalInvoice
  1428.     * @INFORMATION              :   This method is to  save the Registered Hospital Invoice
  1429.     * @PARAM                    :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceHeaderBean,
  1430.                                     class java.util.ArrayList,
  1431.                                     class java.util.ArrayList,
  1432.                                     class gosi.core.workflow.beans.WorkflowParamBean,
  1433.                                     class gosi.core.dms.beans.DMSRequestHeaderBean
  1434.     * @RETURN                   :   class java.lang.String
  1435.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  1436.     * @LAST MODIFIED BY         :  
  1437.     * @LAST MODIFIED DATE       :  
  1438.     **/
  1439.     public String saveRegHospitalInvoice
  1440.         (RegHospInvoiceHeaderBean headerBean ,ArrayList detailsList ,
  1441.             ArrayList serviceList ,WorkflowParamBean workflowParamBean,
  1442.         DMSRequestHeaderBean dmsHeaderBean)
  1443.                 throws GOSIException
  1444.     {
  1445.         RegHospInvoiceDetailBean detailBean = null;
  1446.         try
  1447.         {
  1448.             Long userId = new Long(workflowParamBean.getUserId());
  1449.             Timestamp currentTime = new Timestamp(System.currentTimeMillis());
  1450.             Long headerId = GOSIUtilities.getPrimaryKey
  1451.                 ("T_REGHOSPINVOICEHDR",userId);
  1452.             Long workflowId = GOSIUtilities.getPrimaryKey
  1453.                 ("TRMTSRVCWRKFLOID",userId);
  1454.            
  1455.             headerBean.setInvoiceHeaderId(headerId);
  1456.             headerBean.setWorkflowId(workflowId);
  1457.             // setting audit information
  1458.             headerBean.setCreatedBy(userId);
  1459.             headerBean.setCreationTimestamp(currentTime);
  1460.             headerBean.setInvoiceStatus(OHConstants.REG_HOSP_INVC_ENTERED);
  1461.             headerBean = validateInvoiceDates(headerBean);
  1462.  
  1463.             // calling DMS interface and setting key values
  1464.             if(dmsHeaderBean != null)
  1465.             {
  1466.                 dmsHeaderBean.setSourceRecordId
  1467.                 ("" + headerBean.getInvoiceHeaderId());
  1468.               dmsHeaderBean.
  1469.                 setSourceTable(SITables.T_REGHOSPINVOICEHDR);
  1470.                 dmsHeaderBean.setCreatedBy
  1471.                 (new Long (workflowParamBean.getUserId()));
  1472.                 //GOSIDebug.debugMessages("invoice number" +headerBean.getInvoiceNumber());
  1473.                 //GOSIDebug.debugMessages("val" + DMSConstants.HOSPITAL_INVOICE_NUMBER);
  1474.                 //GOSIDebug.debugMessages("val length " +DMSConstants.HOSPITAL_INVOICE_NUMBER.length());
  1475.                 //dmsHeaderBean.setKeyList
  1476.                 //(DMSConstants.HOSPITAL_INVOICE_NUMBER,
  1477.                 //"" + headerBean.getInvoiceNumber());
  1478.                 dmsHeaderBean.setKeyList
  1479.                 (DMSConstants.HOSPITAL_INVOICE_NUMBER,"" + headerBean.getInvoiceNumber());
  1480.  
  1481.                 DMSUtilities.startDMS(dmsHeaderBean);
  1482.             }
  1483.            
  1484.             RegHospitalInvoiceHeaderEntityHome headerHome= (RegHospitalInvoiceHeaderEntityHome)
  1485.                 ServiceLocator.getInstance().getRemoteHome(
  1486.                 OHConstants.REG_HOSP_INVOICE_HEADER_ENTITY_JNDI,
  1487.                 RegHospitalInvoiceHeaderEntityHome.class);
  1488.             // inserting header
  1489.             headerHome.create(headerBean);
  1490.            
  1491.             workflowParamBean.setPrimaryKeyOfTherecord(headerId.toString());
  1492.            
  1493.             // calling invoice details entity
  1494.             RegHospitalInvoiceDetailEntityHome detailsHome= (RegHospitalInvoiceDetailEntityHome)
  1495.                 ServiceLocator.getInstance().getRemoteHome(
  1496.                 OHConstants.REG_HOSP_INVOICE_DETAILS_ENTITY_JNDI,
  1497.                 RegHospitalInvoiceDetailEntityHome.class);
  1498.  
  1499.            
  1500.             int detailListSize = detailsList.size();
  1501.             Long detailKey[]= GOSIUtilities.
  1502.                     getPrimaryKeyList("T_REGHOSPINVOICEDET",detailListSize,userId);
  1503.             for(int i=0 ; i< detailListSize ;i++)
  1504.             {
  1505.                 Long primarykey =detailKey[i];
  1506.                 RegHospInvoiceDetailBean detailsBean =
  1507.                     (RegHospInvoiceDetailBean)detailsList.get(i);
  1508.                 detailsBean.setInvoiceDetailsId(primarykey);
  1509.                 detailsBean.setInvoiceHeaderId(headerId);
  1510.                 //setting detials audit information
  1511.                 detailsBean.setCreatedBy(userId);
  1512.                 detailsBean.setCreationTimestamp(currentTime);
  1513.                 detailsBean.setStatus(OHConstants.REG_HOSP_INVC_ENTERED);
  1514.                 // inseting details
  1515.                 detailsHome.create(detailsBean);
  1516.             }
  1517.            
  1518.             // calling treatment service details home
  1519.             TreatmentServiceDetailEntityHome serviceHome= (TreatmentServiceDetailEntityHome)
  1520.                 ServiceLocator.getInstance().getRemoteHome(
  1521.                 OHConstants.TRMT_SRVC_DET_ENTITY_JNDI,
  1522.                 TreatmentServiceDetailEntityHome.class);
  1523.  
  1524.  
  1525.  
  1526.             for(int i=0 ; i<serviceList.size();i++)
  1527.             {
  1528.                 TreatmentServiceBean serviceBean = (TreatmentServiceBean)
  1529.                     serviceList.get(i);
  1530.                 serviceBean.setTrmtSrvcWrkfloId(workflowId);
  1531.                 serviceBean.setPaymentStatus
  1532.                     (OHConstants.TRMT_SRVC_PAY_STS_PAID);
  1533.                 // setting audit information
  1534.                 serviceBean.setLastModifiedBy(userId);
  1535.                 serviceBean.setLastModifiedTimestamp(currentTime);
  1536.                 TreatmentServiceDetailEntity serviceRemote = serviceHome.
  1537.                     findByPrimaryKey(serviceBean.getTrmtServiceDetId());
  1538.                 // modifying treatment service details
  1539.                 serviceRemote.modifyPaymentStatus(serviceBean);
  1540.             }
  1541.             // calling workflow interface
  1542.             String userName = GOSIUtilities.startWorkflow(workflowParamBean);
  1543.             String message = GOSIErrorMessages.getErrorDesc("SOI_ERR_5112") +
  1544.                 userName;
  1545.             //"Treatment service invoice saved and send to the inbox of " +userName;
  1546.             return  message;
  1547.         }
  1548.         catch (GOSIException ge)
  1549.         {
  1550.             ctx.setRollbackOnly();
  1551.             throw ge;
  1552.         }
  1553.         catch (Exception e)
  1554.         {
  1555.             ctx.setRollbackOnly();
  1556.             //GOSIDebug.debugMessages("session:getDisbAssmtInvoiceDetails:e:"+e);
  1557.             throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  1558.                 GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  1559.                 "saveRegHospitalInvoice()",e,"CMN_ERR_1000");
  1560.         }
  1561.     }
  1562.  
  1563.     /**
  1564.     * @METHOD NAME              :   searchRegHospitalInvoice
  1565.     * @INFORMATION              :   This method is to  search Registered Hospital Invoice in workflow
  1566.     * @PARAM                    :   class java.lang.Long
  1567.     * @RETURN                   :   class java.util.HashMap
  1568.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  1569.     * @LAST MODIFIED BY         :  
  1570.     * @LAST MODIFIED DATE       :  
  1571.     **/
  1572.     public HashMap searchRegHospitalInvoice(Long primaryKey)
  1573.         throws GOSIException
  1574.     {
  1575.         PreparedStatement ps = null;
  1576.         ResultSet rs = null;
  1577.         HashMap details = new HashMap();
  1578.         try
  1579.         {
  1580.             GOSIDebug.debugMessages("Starting searchRegHospitalInvoice - MaintainRegHospitalInvoiceSessionEJB");
  1581.             // Query to search reg hospital invoice during workflow
  1582.             String sqlQuery = " "+
  1583.                 " select " +
  1584.                 " INVOICEHEADERID," +
  1585.                 " INVOICENUMBER," +
  1586.                 " HOSPITALCODE," +
  1587.                 " FIELDOFFICE," +
  1588.                 " INVOICEDATE," +
  1589.                 " INVOICEDATEENTFMT," +
  1590.                 " STARTDATE," +
  1591.                 " STARTDATEENTFMT," +
  1592.                 " ENDDATE," +
  1593.                 " ENDDATEENTFMT," +
  1594.                 " PAYMENTMODE," +
  1595.                 " PAYEENAME," +
  1596.                 " BANKCODE," +
  1597.                 " BANKBRANCHCODE," +
  1598.                 " BANKACCOUNTNUMBER," +
  1599.                 " INVOICESTATUS," +
  1600.                 " CREATEDBY," +
  1601.                 " CREATIONTIMESTAMP," +
  1602.                 " LASTMODIFIEDBY," +
  1603.                 " LASTMODIFIEDTIMESTAMP," +
  1604.                 " REJECTIONCODE, "+
  1605.                 " DISCOUNTAMOUNT, "+
  1606.                 " TOTALAMOUNT, "+
  1607.                 " FILENUMBER, "+
  1608.                 " WORKFLOWID, " +
  1609.                 " ROUTINGFLAG,  "+
  1610.                 " JOURNALHEADERID, "+
  1611.                 " APPEALSTARTDATE "+
  1612.                 " from " +
  1613.                 SITables.T_REGHOSPINVOICEHDR +
  1614.                 " where " +
  1615.                 " INVOICEHEADERID = ? ";
  1616.             //GOSIDebug.debugMessages("sqlQuery:\n"+sqlQuery);
  1617.             String entFmt = "";
  1618.             con = GOSIUtilities.getConnection
  1619.                     (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  1620.             ps = con.prepareStatement(sqlQuery);
  1621.             ps.setLong(1, primaryKey.longValue());
  1622.             rs = ps.executeQuery();
  1623.            
  1624.             RegHospInvoiceHeaderBean headerBean = null;
  1625.             while(rs.next())
  1626.             {
  1627.                 //GOSIDebug.debugMessages("inside while");
  1628.                 headerBean = new RegHospInvoiceHeaderBean();
  1629.                 headerBean.setInvoiceHeaderId
  1630.                     (new Long(rs.getLong("INVOICEHEADERID")));
  1631.                 if(rs.getObject("INVOICENUMBER")!=null)
  1632.                 {
  1633.                     headerBean.setInvoiceNumber
  1634.                         (new Long(rs.getLong("INVOICENUMBER"))) ;
  1635.                 }
  1636.                 headerBean.setHospitalCode
  1637.                     (new Long(rs.getLong("HOSPITALCODE"))) ;
  1638.                 headerBean.setFieldOffice
  1639.                     (new Short (rs.getShort ("FIELDOFFICE"))) ;
  1640.                 headerBean.setInvoiceDate (rs.getTimestamp("INVOICEDATE")) ;
  1641.                 headerBean.setInvoiceDateEntFmt
  1642.                     (rs.getString("INVOICEDATEENTFMT"));
  1643.                 headerBean.setStartDate (rs.getTimestamp("STARTDATE")) ;
  1644.                 headerBean.setStartDateEntFmt (rs.getString("STARTDATEENTFMT"));
  1645.                 entFmt = headerBean.getStartDateEntFmt();
  1646.                 headerBean.setEndDate (rs.getTimestamp("ENDDATE"));
  1647.                 headerBean.setEndDateEntFmt (rs.getString("ENDDATEENTFMT"));
  1648.                 headerBean.setInvoiceDateStr(OHUtilities.getDateStr(
  1649.                     headerBean.getInvoiceDate(),
  1650.                     headerBean.getInvoiceDateEntFmt()));
  1651.                    
  1652.                 headerBean.setStartDateStr(OHUtilities.getDateStr(
  1653.                     headerBean.getStartDate(),headerBean.getStartDateEntFmt()));
  1654.                    
  1655.                 headerBean.setEndDateStr(OHUtilities.getDateStr(
  1656.                     headerBean.getEndDate(),headerBean.getEndDateEntFmt()));
  1657.                    
  1658.                
  1659.                 if(rs.getObject("PAYMENTMODE")!= null)
  1660.                 {
  1661.                     headerBean.setPaymentMode
  1662.                         (new Short (rs.getShort ("PAYMENTMODE")));
  1663.                 }
  1664.                 if(rs.getObject("PAYEENAME")!= null)
  1665.                 {
  1666.                     headerBean.setPayeeName (rs.getString("PAYEENAME"));
  1667.                 }
  1668.                 if(rs.getObject("BANKCODE")!= null)
  1669.                 {
  1670.                     headerBean.setBankCode
  1671.                         (new Integer(rs.getInt("BANKCODE")));
  1672.                 }
  1673.                 if(rs.getObject("BANKBRANCHCODE")!= null)
  1674.                 {
  1675.                     headerBean.setBankBranchCode
  1676.                         (rs.getString("BANKBRANCHCODE"));
  1677.                 }
  1678.                 if(rs.getObject("BANKACCOUNTNUMBER")!= null)
  1679.                 {
  1680.                     headerBean.setBankAccountNumber
  1681.                         (rs.getString("BANKACCOUNTNUMBER"));
  1682.                 }
  1683.                 if(rs.getObject("REJECTIONCODE")!=null)
  1684.                 {
  1685.                     headerBean.setRejectionCode
  1686.                         (new Short(rs.getShort("REJECTIONCODE")));
  1687.                 }
  1688.                 if(rs.getObject("FILENUMBER")!=null)
  1689.                 {
  1690.                     headerBean.setFileNumber
  1691.                         (new Long(rs.getLong("FILENUMBER")));
  1692.                 }
  1693.                 headerBean.setInvoiceStatus
  1694.                     (new Short (rs.getShort("INVOICESTATUS")));
  1695.                 if(rs.getObject("DISCOUNTAMOUNT")!= null)
  1696.                 {
  1697.                     headerBean.setDiscountAmount
  1698.                         (new Double(rs.getDouble("DISCOUNTAMOUNT")));
  1699.                 }
  1700.                 if(rs.getObject("TOTALAMOUNT")!= null)
  1701.                 {
  1702.                     //headerBean.setTotalAmount
  1703.                        // (new Double(rs.getDouble("TOTALAMOUNT")));
  1704.                 }
  1705.  
  1706.                 if(rs.getString("routingflag")!=null)
  1707.                 {
  1708.                     headerBean.setRoutingFlag(new Short(rs.getShort("RoutingFlag")));
  1709.                 }
  1710.                 if(rs.getString("JOURNALHEADERID") != null)
  1711.                 {
  1712.                     headerBean.setJournalHeaderId(new Long(rs.getLong("JOURNALHEADERID")));
  1713.                 }      
  1714.                 headerBean.setAppealStartDate(rs.getTimestamp("APPEALSTARTDATE")) ;
  1715.  
  1716.                 headerBean.setWorkflowId( new Long(rs.getLong("WORKFLOWID")));
  1717.                 // method to calculate total amount
  1718.                 headerBean = getTotalAmount(headerBean);
  1719.             }
  1720.             GOSIUtilities.cleanUp(con,ps,rs);
  1721.             InvoiceSearchBean searchBean = new InvoiceSearchBean();
  1722.             searchBean.setHeaderId(primaryKey);
  1723.             searchBean.setEntFmt(entFmt);
  1724.             searchBean.setButtonClicked(searchBean.BUTTON_SEARCH);
  1725.             // getting details list for invoice header
  1726.             ArrayList detailsList = searchDetailsList(searchBean);
  1727.             Long detailsSize=getNumberOfTrmtInvoiceDetails(primaryKey);
  1728.            
  1729.             details.put("detailsList", detailsList);
  1730.             details.put("headerBean", headerBean);
  1731.             details.put("detailsSize",detailsSize);
  1732.             GOSIDebug.debugMessages("Ending searchRegHospitalInvoice - MaintainRegHospitalInvoiceSessionEJB");
  1733.             return details;
  1734.         }
  1735.         catch (GOSIException ge)
  1736.         {
  1737.             ctx.setRollbackOnly();
  1738.             throw ge;
  1739.         }
  1740.         catch (Exception e)
  1741.         {
  1742.             ctx.setRollbackOnly();
  1743.             //GOSIDebug.debugMessages("session:getDisbAssmtInvoiceDetails:e:"+e);
  1744.             throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  1745.                 GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  1746.                 "saveRegHospitalInvoice()",e,"CMN_ERR_1000");
  1747.         }
  1748.         finally
  1749.         {
  1750.             GOSIUtilities.cleanUp(con,ps,rs);
  1751.         }
  1752.     }
  1753.  
  1754.     /**
  1755.     * @METHOD NAME              :   modifyRegHospitalInvoice
  1756.     * @INFORMATION              :   This method is to  modify Registered Hospital Invoice
  1757.     * @PARAM                    :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceHeaderBean,
  1758.                                     class java.util.ArrayList,
  1759.                                     class gosi.core.workflow.beans.WorkflowParamBean,
  1760.                                     class gosi.core.dms.beans.DMSRequestHeaderBean
  1761.     * @RETURN                   :   class java.lang.String
  1762.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  1763.     * @LAST MODIFIED BY         :  
  1764.     * @LAST MODIFIED DATE       :  
  1765.     **/
  1766.     public String  modifyRegHospitalInvoice
  1767.         (RegHospInvoiceHeaderBean headerBean,ArrayList detailsList ,
  1768.             WorkflowParamBean workflowParamBean,
  1769.         DMSRequestHeaderBean dmsheaderBean)throws GOSIException
  1770.     {
  1771.         try
  1772.         {
  1773.             Long workflowId = headerBean.getWorkflowId();
  1774.             Long userId = new Long (workflowParamBean.getUserId());
  1775.             Long headerId = headerBean.getInvoiceHeaderId();
  1776.             Short invoiceStatus = null;
  1777.             workflowParamBean.setPrimaryKeyOfTherecord(headerId.toString());
  1778.             // setting invoice status based on user input
  1779.             if(GOSIConstants.CANCELLED.equals
  1780.                 (workflowParamBean.getRoutingCriterion()))
  1781.             {
  1782.                 invoiceStatus = OHConstants.REG_HOSP_INVC_CANCELLED;
  1783.                 ArrayList serviceList = getServiceList(workflowId);
  1784.                 modifyServiceList(serviceList,userId);
  1785.             }else if(GOSIConstants.REJECTED.equals
  1786.                 (workflowParamBean.getRoutingCriterion()))
  1787.             {
  1788.                 invoiceStatus = OHConstants.REG_HOSP_INVC_PENDING_APPROVED;
  1789.                 if("REG_HOS_INVC_APP_OH_SUP".equals
  1790.                     (workflowParamBean.getStepShortName()))
  1791.                 {
  1792.                     invoiceStatus = OHConstants.REG_HOSP_INVC_REJECTED;
  1793.                     ArrayList serviceList = getServiceList(workflowId);
  1794.                     modifyServiceList(serviceList,userId);
  1795.                 }
  1796.             }
  1797.             else if(headerBean.getIsSaveAsRejected())
  1798.             {
  1799.                 invoiceStatus = OHConstants.REG_HOSP_INVC_REJECTED;
  1800.                 ArrayList serviceList = getServiceList(workflowId);
  1801.                 modifyServiceList(serviceList,userId);
  1802.             }
  1803.             else
  1804.             {
  1805.                 invoiceStatus = OHConstants.REG_HOSP_INVC_PENDING_APPROVED;
  1806.                 if(headerBean.getIsFinalApproval())
  1807.                 {
  1808.                     invoiceStatus = OHConstants.REG_HOSP_INVC_APPROVED;
  1809.                 }
  1810.             }
  1811.             //setting invoice audit information
  1812.             Timestamp currentTime = new Timestamp(System.currentTimeMillis());
  1813.             headerBean.setInvoiceStatus(invoiceStatus);
  1814.             headerBean.setLastModifiedBy(userId);
  1815.             headerBean.setLastModifiedTimestamp(currentTime);
  1816.             // if final approval call finance interface to raise invoice
  1817.             if(headerBean.getIsFinalApproval())
  1818.             {
  1819.                 Long creditNoteId = null;
  1820.                 creditNoteId = interfaceMethod(headerBean,workflowParamBean);
  1821.                 if(creditNoteId != null)
  1822.                 {
  1823.                     headerBean.setJournalHeaderId(creditNoteId);
  1824.                     //Call the batch for recfrom employer
  1825.                     GOSIDebug.debugMessages("Parameters Passed to createAutomatedRecoveryBatchRequest");
  1826.                     GOSIDebug.debugMessages("\t Param 1 :" + workflowParamBean.getUserId() + ":");
  1827.                     GOSIDebug.debugMessages("\t Param 2 :" + headerId + ":");
  1828.                     GOSIDebug.debugMessages("\t Param 3 :" + OHConstants.RECOVERY_TYPE_REG_HOSP_INVOICE + ":");
  1829.                     Long requestId = createAutomatedRecoveryBatchRequest(
  1830.                                         new Long(workflowParamBean.getUserId()),
  1831.                                         headerId,OHConstants.RECOVERY_TYPE_REG_HOSP_INVOICE);
  1832.                     GOSIDebug.debugMessages("Batch RequestId :" + requestId + ":");
  1833.                 }
  1834.             }
  1835.             if(!isTotalAmountOfInvoiceHeaderCorrect(headerBean)){
  1836.                
  1837.                 throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  1838.                            GOSIConstants.SOCIAL_INSURANCE,
  1839.                            this.getClass().toString(),
  1840.                            "isTotalAmountOfInvoiceHeaderCorrect()",
  1841.                            null,
  1842.                            "CMN_ERR_1000");
  1843.             }
  1844.  
  1845.  
  1846.             RegHospitalInvoiceHeaderEntityHome headerHome= (RegHospitalInvoiceHeaderEntityHome)
  1847.                 ServiceLocator.getInstance().getRemoteHome(
  1848.                 OHConstants.REG_HOSP_INVOICE_HEADER_ENTITY_JNDI,
  1849.                 RegHospitalInvoiceHeaderEntityHome.class);
  1850.             RegHospitalInvoiceHeaderEntity headerRemote =
  1851.                 headerHome.findByPrimaryKey(headerId);
  1852.             headerRemote.modifyRegHospInvoiceHeader(headerBean);
  1853.             // calling DMS interface and setting key balues
  1854.             if(dmsheaderBean != null)
  1855.             {
  1856.                 dmsheaderBean.setSourceRecordId
  1857.                 ("" + headerBean.getInvoiceHeaderId());
  1858.                 dmsheaderBean.
  1859.                 setSourceTable(SITables.T_REGHOSPINVOICEHDR);
  1860.                 dmsheaderBean.setCreatedBy
  1861.                 (new Long (workflowParamBean.getUserId()));
  1862.                 //GOSIDebug.debugMessages("invoice number" +headerBean.getInvoiceNumber());
  1863.                 //dmsheaderBean.setKeyList
  1864.                 //(DMSConstants.HOSPITAL_INVOICE_NUMBER,
  1865.                 //"" + headerBean.getInvoiceNumber());
  1866.                 dmsheaderBean.setKeyList
  1867.                 (DMSConstants.HOSPITAL_INVOICE_NUMBER,"" + headerBean.getInvoiceNumber());
  1868.  
  1869.                 DMSUtilities.startDMS(dmsheaderBean);
  1870.                
  1871.             }
  1872.           //GOSIDebug.debugMessages("IS finalApprova.... "+headerBean.getIsFinalApproval());
  1873.              
  1874.              
  1875.            
  1876.             String name = GOSIUtilities.startWorkflow(workflowParamBean);
  1877.             String msg = GOSIErrorMessages.getErrorDesc("SOI_ERR_5113");
  1878.             //"Registered Hospital Treatment Expence Invoice saved";
  1879.             if(name!= null &&!"".equals(name))
  1880.             {
  1881.                 msg = GOSIErrorMessages.getErrorDesc("SOI_ERR_5112")+
  1882.                     name ;
  1883.                 //"Registered Hospital Treatment Expence Invoice saved and sent to the Inbox of "+ name;
  1884.             }
  1885.             return msg;
  1886.            
  1887.         }
  1888.         catch (GOSIException ge)
  1889.         {
  1890.             ctx.setRollbackOnly();
  1891.             throw ge;
  1892.         }
  1893.         catch (Exception e)
  1894.         {
  1895.             ctx.setRollbackOnly();
  1896.             //GOSIDebug.debugMessages("session:getDisbAssmtInvoiceDetails:e:"+e);
  1897.             throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  1898.                 GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  1899.                 "saveRegHospitalInvoice()",e,"CMN_ERR_1000");
  1900.         }
  1901.     }
  1902.        
  1903.     /**
  1904.     * @METHOD NAME              :   getServiceList
  1905.     * @INFORMATION              :   This method is to  get the Service List used to calculate invoice
  1906.     * @PARAM                    :   class java.lang.Long
  1907.     * @RETURN                   :   class java.util.ArrayList
  1908.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  1909.     * @LAST MODIFIED BY         :  
  1910.     * @LAST MODIFIED DATE       :  
  1911.     **/
  1912.     private ArrayList getServiceList(Long workflowId)throws GOSIException
  1913.     {
  1914.         PreparedStatement ps = null;
  1915.         ResultSet rs = null;
  1916.         ArrayList  serviceList = new ArrayList();
  1917.         try
  1918.         {
  1919.             // Query to get service list for a workflow id
  1920.             con = GOSIUtilities.getConnection
  1921.                 (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  1922.             String sqlQuery =  "select "+
  1923.                 "TRMTSERVICEDETID, TRMTSRVCWRKFLOID, PAYMENTSTATUS " +
  1924.                 " from " +SITables.T_TRMTSERVICESDET +
  1925.                 " where TRMTSRVCWRKFLOID = ? ";
  1926.             ps = con.prepareStatement(sqlQuery);
  1927.             ps.setLong(1,workflowId.longValue());
  1928.             rs = ps.executeQuery();
  1929.             while(rs.next())
  1930.             {
  1931.                 TreatmentServiceBean serviceBean = new TreatmentServiceBean();
  1932.                 serviceBean.setTrmtServiceDetId
  1933.                     (new Long(rs.getLong("TRMTSERVICEDETID")));
  1934.                 serviceBean.setTrmtSrvcWrkfloId
  1935.                     (new Long(rs.getLong("TRMTSRVCWRKFLOID")));
  1936.                 serviceBean.setPaymentStatus
  1937.                     (new Short(rs.getShort("PAYMENTSTATUS")));
  1938.                 serviceList.add(serviceBean);
  1939.             }
  1940.             return serviceList;
  1941.         }
  1942.         catch (GOSIException ge)
  1943.         {
  1944.             ctx.setRollbackOnly();
  1945.             throw ge;
  1946.         }
  1947.         catch (Exception e)
  1948.         {
  1949.             ctx.setRollbackOnly();
  1950.             //GOSIDebug.debugMessages("session:getDisbAssmtInvoiceDetails:e:"+e);
  1951.             throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  1952.                 GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  1953.                 "getServiceList()",e,"CMN_ERR_1000");
  1954.         }
  1955.         finally
  1956.         {
  1957.             GOSIUtilities.cleanUp(con,ps,rs);
  1958.         }
  1959.            
  1960.     }
  1961.    
  1962.    
  1963.     /**
  1964.     * @METHOD NAME              :   modifyServiceList
  1965.     * @INFORMATION              :   This method is to  modify Service List used to calculate invoice
  1966.     * @PARAM                    :   class java.util.ArrayList,
  1967.                                     class java.lang.Long
  1968.     * @RETURN                   :   void
  1969.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  1970.     * @LAST MODIFIED BY         :  
  1971.     * @LAST MODIFIED DATE       :  
  1972.     **/
  1973.     private void modifyServiceList(ArrayList serviceList,Long userId)
  1974.         throws GOSIException
  1975.     {
  1976.         try
  1977.         {
  1978.             Timestamp currentTime = new Timestamp(System.currentTimeMillis());
  1979.             TreatmentServiceDetailEntityHome serviceHome= (TreatmentServiceDetailEntityHome)
  1980.                 ServiceLocator.getInstance().getRemoteHome(
  1981.                 OHConstants.TRMT_SRVC_DET_ENTITY_JNDI,
  1982.                 TreatmentServiceDetailEntityHome.class);
  1983.             // updating the service list in case the invoice is cancelled
  1984.             for(int i=0 ; i<serviceList.size();i++)
  1985.             {
  1986.                 TreatmentServiceBean serviceBean = (TreatmentServiceBean)
  1987.                     serviceList.get(i);
  1988.                 //serviceBean.setTrmtSrvcWrkfloId(workflowId);
  1989.                 serviceBean.setPaymentStatus
  1990.                     (OHConstants.TRMT_SRVC_PAY_STS_NOT_PAID);
  1991.                 serviceBean.setLastModifiedBy(userId);
  1992.                 serviceBean.setLastModifiedTimestamp(currentTime);
  1993.                 TreatmentServiceDetailEntity serviceRemote = serviceHome.
  1994.                     findByPrimaryKey(serviceBean.getTrmtServiceDetId());
  1995.                 serviceRemote.modifyPaymentStatus(serviceBean);
  1996.             }
  1997.         }
  1998.         catch (GOSIException ge)
  1999.         {
  2000.             ctx.setRollbackOnly();
  2001.             throw ge;
  2002.         }
  2003.         catch (Exception e)
  2004.         {
  2005.             ctx.setRollbackOnly();
  2006.             //GOSIDebug.debugMessages("session:getDisbAssmtInvoiceDetails:e:"+e);
  2007.             throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  2008.                 GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  2009.                 "getServiceList()",e,"CMN_ERR_1000");
  2010.         }
  2011.            
  2012.     }
  2013.    
  2014.    
  2015.     /**
  2016.     * @METHOD NAME              :   getInjuryDetails
  2017.     * @INFORMATION              :   This method is to  get Injury Details
  2018.     * @PARAM                    :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceDetailBean
  2019.     * @RETURN                   :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceDetailBean
  2020.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  2021.     * @LAST MODIFIED BY         :  
  2022.     * @LAST MODIFIED DATE       :  
  2023.     **/
  2024.     private RegHospInvoiceDetailBean getInjuryDetails
  2025.         (RegHospInvoiceDetailBean detailsBean)throws GOSIException
  2026.     {
  2027.         PreparedStatement ps = null;
  2028.         ResultSet rs= null;
  2029.         try
  2030.         {
  2031.             // Query to get injury details for each invoice detail
  2032.             Long injuryId = detailsBean.getInjuryId();
  2033.             String sqlQuery = "select "+
  2034.                 " a.INJURYNUMBER, "+
  2035.                 " a.CONTRIBUTORID, "+
  2036.                 " a.INJURYDATE, " +
  2037.                 " a.DATECOMPLICATION, " +
  2038.                 " a.SOCINSNUMBER, "+
  2039.                 " d.firstname || ' ' || NVL(d.secondname,'')|| ' ' || "+
  2040.             " NVL(d.thirdname,'')||' ' || NVL(d.surname,'') CONTRIBUTORNAME "+
  2041.                 " from "+ SITables.T_INJURY + " a ,"+
  2042.                   SITables.T_CONTRIBUTOR +" b, "+
  2043.                   SITables.T_PERSON + " d "+
  2044.                 " where "+
  2045.                 " a.INJURYID =? "+
  2046.                 " and a.CONTRIBUTORID = b.CONTRIBUTORID "+
  2047.                 " and b.PERSONID = d.PERSONID ";
  2048.                
  2049.             //GOSIDebug.debugMessages("SqlQuery:\n"+sqlQuery);
  2050.             ps = con.prepareStatement(sqlQuery);
  2051.             ps.setLong(1,injuryId.longValue());
  2052.             rs = ps.executeQuery();
  2053.             while (rs.next())
  2054.             {
  2055.                 detailsBean.setInjuryNumber
  2056.                     (new Long(rs.getLong("INJURYNUMBER")));
  2057.                 detailsBean.setSocInsNumber
  2058.                     (new Long(rs.getLong("SOCINSNUMBER")));
  2059.                 detailsBean.setInjuryDate
  2060.                     (rs.getTimestamp("INJURYDATE"));
  2061.                 if(rs.getObject("DATECOMPLICATION")!= null)
  2062.                 {
  2063.                     detailsBean.setInjuryDate
  2064.                         (rs.getTimestamp("DATECOMPLICATION"));
  2065.                     detailsBean.setServiceType(OHConstants.SERVICE_TYPE_COMPLICATION_TRMT);
  2066.                 }
  2067.                 detailsBean.setInjuryDateStr(OHUtilities.getDateStr
  2068.                     (detailsBean.getInjuryDate(),"G"));
  2069.                 detailsBean.setName(rs.getString("CONTRIBUTORNAME"));
  2070.             }
  2071.             return detailsBean;
  2072.                
  2073.         }
  2074.         catch (GOSIException ge)
  2075.         {
  2076.             ctx.setRollbackOnly();
  2077.             throw ge;
  2078.         }
  2079.         catch (Exception e)
  2080.         {
  2081.             ctx.setRollbackOnly();
  2082.             //GOSIDebug.debugMessages("session:getInjuryDetails:e:"+e);
  2083.             throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  2084.                 GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  2085.                 "getInjuryDetails()",e,"CMN_ERR_1000");
  2086.         }
  2087.         finally
  2088.         {
  2089.             GOSIUtilities.cleanUp(ps,rs);
  2090.         }
  2091.     }
  2092.    
  2093.     /**
  2094.     * @METHOD NAME              :   getDisbAssmtDetails
  2095.     * @INFORMATION              :   This method is to  get Disb Assmt Details
  2096.     * @PARAM                    :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceDetailBean
  2097.     * @RETURN                   :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceDetailBean
  2098.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  2099.     * @LAST MODIFIED BY         :  
  2100.     * @LAST MODIFIED DATE       :  
  2101.     **/
  2102.     private RegHospInvoiceDetailBean getDisbAssmtDetails
  2103.         (RegHospInvoiceDetailBean detailsBean)throws GOSIException
  2104.     {
  2105.         PreparedStatement ps = null;
  2106.         ResultSet rs= null;
  2107.         try
  2108.         {
  2109.             // query to get disability detail for each disability trmt service
  2110.             Long disbAssmtId = detailsBean.getDisbAssmtId();
  2111.             String sqlQuery = " select "
  2112.                     + " a.SCHEDULEID, "
  2113.                     + " NVL(a.ASSESSMENTDATE,e.SESSIONDATE) ASSESSMENTDATE ,  "
  2114.                     + " NVL(a.SOCIALINSURANCENUMBER,E.SOCINSNUMBER) as SOCIALINSURANCENUMBER, "
  2115.                     + " d.firstname || ' ' || NVL(d.secondname,'')|| ' ' || "
  2116.                     + " NVL(d.thirdname,'')||' ' || NVL(d.surname,'') CONTRIBUTORNAME ,"
  2117.                     + " e.SESSIONNUMBER "
  2118.                     + " from "
  2119.                     + SITables.T_CONTRIBUTOR + " b, "
  2120.                     + SITables.T_PERSON + " d, "
  2121.                     + SITables.T_MBAPPOINTMENT + " e LEFT JOIN  "
  2122.                     + SITables.T_DISBASSMT + "  a ON   a.SCHEDULEID = e.SCHEDULEID"
  2123.                     + " where "
  2124.                     + " e.SCHEDULEID = ? "
  2125.                     + " and b.CONTRIBUTORID = (select CONTRIBUTORID from  "
  2126.                     + SITables.T_CONTRIBUTOR
  2127.                     + " where SOCIALINSURANCENUMBER = NVL(a.SOCIALINSURANCENUMBER,E.SOCINSNUMBER)) "
  2128.                     + " and b.PERSONID = d.PERSONID ";
  2129.                
  2130.             GOSIDebug.debugMessages("SqlQuery:" + sqlQuery + ":");
  2131.             GOSIDebug.debugMessages("\t\t Param 1 :" + disbAssmtId.longValue() + ":");
  2132.             ps = con.prepareStatement(sqlQuery);
  2133.             ps.setLong(1,disbAssmtId.longValue());
  2134.             rs = ps.executeQuery();
  2135.             while (rs.next())
  2136.             {
  2137.                 detailsBean.setInjuryNumber
  2138.                     (new Long(rs.getLong("SCHEDULEID")));
  2139.                 detailsBean.setSocInsNumber
  2140.                     (new Long(rs.getLong("SOCIALINSURANCENUMBER")));
  2141.                 detailsBean.setInjuryDate
  2142.                     (rs.getTimestamp("ASSESSMENTDATE"));
  2143.                 detailsBean.setInjuryDateStr(OHUtilities.getDateStr
  2144.                     (detailsBean.getInjuryDate(),"G"));
  2145.                 detailsBean.setName(rs.getString("CONTRIBUTORNAME"));
  2146.                 detailsBean.setSessionNumber(new Long(rs.getLong("SESSIONNUMBER")));
  2147.             }
  2148.             return detailsBean;
  2149.                
  2150.         }
  2151.         catch (GOSIException ge)
  2152.         {
  2153.             ctx.setRollbackOnly();
  2154.             throw ge;
  2155.         }
  2156.         catch (Exception e)
  2157.         {
  2158.             ctx.setRollbackOnly();
  2159.             //GOSIDebug.debugMessages("session:getInjuryDetails:e:"+e);
  2160.             throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  2161.                 GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  2162.                 "getInjuryDetails()",e,"CMN_ERR_1000");
  2163.         }
  2164.         finally
  2165.         {
  2166.             GOSIUtilities.cleanUp(ps,rs);
  2167.         }
  2168.  
  2169.     }    
  2170.    
  2171.    
  2172.     /**
  2173.     * @METHOD NAME              :   getDetailsSearchQuery
  2174.     * @INFORMATION              :   This method is to  get invoice Details for Search Query
  2175.     * @PARAM                    :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.InvoiceSearchBean
  2176.     * @RETURN                   :   interface java.sql.PreparedStatement
  2177.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  2178.     * @LAST MODIFIED BY         :  
  2179.     * @LAST MODIFIED DATE       :  
  2180.     **/
  2181.     private PreparedStatement getDetailsSearchQuery
  2182.         (InvoiceSearchBean searchBean) throws GOSIException
  2183.     {
  2184.         PreparedStatement ps = null;
  2185.         try
  2186.         {
  2187.             long headerId = searchBean.getHeaderId().longValue();
  2188.             long firstID  = searchBean.getFirstId();
  2189.             long lastID   = searchBean.getLastId();
  2190.            
  2191.             //Query to search registered hospital invoice details from the search screen
  2192.             String sqlQuery = "";
  2193.             byte buttonClicked = searchBean.getButtonClicked();
  2194.            
  2195.             if (buttonClicked == searchBean.BUTTON_SEARCH)
  2196.             {
  2197.                 //GOSIDebug.debugMessages("the value of criteria is inside if" );
  2198.                 sqlQuery=   " select "+
  2199.                         " INVOICEDETAILSID, "+
  2200.                         " INVOICEHEADERID, " +
  2201.                         " INJURYID, " +
  2202.                         " DISBASSMTID, " +
  2203.                         " TRMTSTARTDATE, " +
  2204.                         " TRMTSTARTDATEENTFMT, " +
  2205.                         " TRMTENDDATE, " +
  2206.                         " TRMTENDDATEENTFMT, " +
  2207.                         " SERVICESAMOUNT, " +
  2208.                         " MEDICINESAMOUNT, " +
  2209.                         " NODISCOUNTAMOUNT, " +
  2210.                         " REJECTEDSERVICESAMOUNT, " +
  2211.                         " REJECTEDMEDICINESAMOUNT, " +
  2212.                         " REJECTEDNODISCOUNTAMOUNT, " +
  2213.                         " STATUS, " +
  2214.                         " CREATEDBY, " +
  2215.                         " CREATIONTIMESTAMP, " +
  2216.                         " LASTMODIFIEDBY, " +
  2217.                         " LASTMODIFIEDTIMESTAMP "+
  2218.                         " from " +
  2219.                         SITables.T_REGHOSPINVOICEDET +
  2220.                         " where "+
  2221.                         " INVOICEHEADERID = ? "+
  2222.                         " order by INVOICEDETAILSID ";
  2223.                 ps = con.prepareStatement(sqlQuery);
  2224.                 ps.setLong(1,headerId);
  2225.  
  2226.             }
  2227.             else if (buttonClicked == searchBean.BUTTON_NEXT)
  2228.             {
  2229.                 //GOSIDebug.debugMessages("the value of criteria is inside Forward" );
  2230.                 sqlQuery=   " select "+
  2231.                         " INVOICEDETAILSID, "+
  2232.                         " INVOICEHEADERID, " +
  2233.                         " INJURYID, " +
  2234.                         " DISBASSMTID, " +
  2235.                         " TRMTSTARTDATE, " +
  2236.                         " TRMTSTARTDATEENTFMT, " +
  2237.                         " TRMTENDDATE, " +
  2238.                         " TRMTENDDATEENTFMT, " +
  2239.                         " SERVICESAMOUNT, " +
  2240.                         " MEDICINESAMOUNT, " +
  2241.                         " NODISCOUNTAMOUNT, " +
  2242.                         " REJECTEDSERVICESAMOUNT, " +
  2243.                         " REJECTEDMEDICINESAMOUNT, " +
  2244.                         " REJECTEDNODISCOUNTAMOUNT, " +
  2245.                         " STATUS, " +
  2246.                         " CREATEDBY, " +
  2247.                         " CREATIONTIMESTAMP, " +
  2248.                         " LASTMODIFIEDBY, " +
  2249.                         " LASTMODIFIEDTIMESTAMP "+
  2250.                         " from " +
  2251.                         SITables.T_REGHOSPINVOICEDET +
  2252.                         " where "+
  2253.                         " INVOICEHEADERID = ? "+
  2254.                         " and INVOICEDETAILSID > ?"+
  2255.                         " order by INVOICEDETAILSID ";
  2256.                 ps = con.prepareStatement(sqlQuery);
  2257.                 ps.setLong(1,headerId);
  2258.                 ps.setLong(2,lastID);
  2259.  
  2260.             }
  2261.        
  2262.             else if (buttonClicked == searchBean.BUTTON_PREVIOUS)
  2263.             {
  2264.                 sqlQuery=   " select "+
  2265.                         " INVOICEDETAILSID, "+
  2266.                         " INVOICEHEADERID, " +
  2267.                         " INJURYID, " +
  2268.                         " DISBASSMTID, " +
  2269.                         " TRMTSTARTDATE, " +
  2270.                         " TRMTSTARTDATEENTFMT, " +
  2271.                         " TRMTENDDATE, " +
  2272.                         " TRMTENDDATEENTFMT, " +
  2273.                         " SERVICESAMOUNT, " +
  2274.                         " MEDICINESAMOUNT, " +
  2275.                         " NODISCOUNTAMOUNT, " +
  2276.                         " REJECTEDSERVICESAMOUNT, " +
  2277.                         " REJECTEDMEDICINESAMOUNT, " +
  2278.                         " REJECTEDNODISCOUNTAMOUNT, " +
  2279.                         " STATUS, " +
  2280.                         " CREATEDBY, " +
  2281.                         " CREATIONTIMESTAMP, " +
  2282.                         " LASTMODIFIEDBY, " +
  2283.                         " LASTMODIFIEDTIMESTAMP "+
  2284.                         " from " +
  2285.                         SITables.T_REGHOSPINVOICEDET +
  2286.                         " where "+
  2287.                         " INVOICEHEADERID = ? "+
  2288.                         " and INVOICEDETAILSID < ?"+
  2289.                         " order by INVOICEDETAILSID DESC ";
  2290.  
  2291.                 ps = con.prepareStatement(sqlQuery);
  2292.                 ps.setLong(1,headerId);
  2293.                 ps.setLong(2,firstID);
  2294.  
  2295.             }
  2296.         }catch(Exception e)
  2297.         {
  2298.              throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  2299.                 GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  2300.                 "getDetailsSearchQuery()",e,"CMN_ERR_1000");  
  2301.         }
  2302.  
  2303.         return ps;
  2304.     }
  2305.  
  2306.  
  2307.     /**
  2308.     * @METHOD NAME              :   searchDetailsList
  2309.     * @INFORMATION              :   This method is to  search Invoice details List
  2310.     * @PARAM                    :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.InvoiceSearchBean
  2311.     * @RETURN                   :   class java.util.ArrayList
  2312.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  2313.     * @LAST MODIFIED BY         :  
  2314.     * @LAST MODIFIED DATE       :  
  2315.     **/
  2316.     public ArrayList searchDetailsList(InvoiceSearchBean searchBean)
  2317.         throws GOSIException
  2318.     {
  2319.         PreparedStatement ps = null;
  2320.         ResultSet rs = null;
  2321.         ArrayList detailsList = new ArrayList();
  2322.         try
  2323.         {
  2324.             GOSIDebug.debugMessages("Starting searchDetailsList - MaintainRegHospitalInvoiceSessionEJB");
  2325.             // getting invoice details for a particular invoice header
  2326.             int count=1;
  2327.             byte buttonClicked = searchBean.getButtonClicked();
  2328.             String entFmt = searchBean.getEntFmt();
  2329.             con = GOSIUtilities.getConnection
  2330.                     (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  2331.             ps = getDetailsSearchQuery(searchBean);
  2332.             ps.setMaxRows((GOSIApplicationProperties.MAX_PAGE_SIZE*searchBean.getPageIndex())+1);
  2333.             rs = ps.executeQuery();
  2334.             while(rs.next())
  2335.             {
  2336.                 //GOSIDebug.debugMessages("inside while 2");
  2337.                 RegHospInvoiceDetailBean detailsBean =
  2338.                     new RegHospInvoiceDetailBean();
  2339.                    
  2340.                 detailsBean.setInvoiceDetailsId
  2341.                     (new  Long(rs.getLong("INVOICEDETAILSID")));
  2342.                 detailsBean.setInvoiceHeaderId
  2343.                     (new  Long(rs.getLong("INVOICEHEADERID")));
  2344.                 if(rs.getObject("INJURYID")!= null)
  2345.                 {
  2346.                     detailsBean.setInjuryId
  2347.                         (new  Long(rs.getLong("INJURYID")));
  2348.                 }
  2349.                 if(rs.getObject("DISBASSMTID")!= null)
  2350.                 {
  2351.                     detailsBean.setDisbAssmtId
  2352.                         (new  Long(rs.getLong("DISBASSMTID")));
  2353.                 }
  2354.                 detailsBean.setTrmtStartDate
  2355.                     (rs.getTimestamp("TRMTSTARTDATE"));
  2356.                 detailsBean.setTrmtStartDateEntFmt
  2357.                     (rs.getString("TRMTSTARTDATEENTFMT"));
  2358.                 detailsBean.setTrmtEndDate
  2359.                     (rs.getTimestamp("TRMTENDDATE"));
  2360.                 detailsBean.setTrmtEndDateEntFmt
  2361.                     (rs.getString("TRMTENDDATEENTFMT"));
  2362.                
  2363.                 detailsBean.setTrmtStartDateStr(OHUtilities.getDateStr(
  2364.                     detailsBean.getTrmtStartDate(),entFmt));
  2365.                 detailsBean.setTrmtEndDateStr(OHUtilities.getDateStr(
  2366.                     detailsBean.getTrmtEndDate(),entFmt));
  2367.                
  2368.                 if(rs.getObject("SERVICESAMOUNT")!= null)
  2369.                 {
  2370.                     detailsBean.setServicesAmount
  2371.                         (new  Double(rs.getDouble("SERVICESAMOUNT")));
  2372.                 }
  2373.                 if(rs.getObject("MEDICINESAMOUNT")!= null)
  2374.                 {
  2375.                     detailsBean.setMedicinesAmount
  2376.                         (new  Double(rs.getDouble("MEDICINESAMOUNT")));
  2377.                 }
  2378.                 if(rs.getObject("NODISCOUNTAMOUNT")!= null)
  2379.                 {
  2380.                     detailsBean.setNoDiscountAmount
  2381.                         (new  Double(rs.getDouble("NODISCOUNTAMOUNT")));
  2382.                 }
  2383.                 if(rs.getObject("REJECTEDSERVICESAMOUNT")!= null)
  2384.                 {
  2385.                     detailsBean.setRejectedServiceAmount
  2386.                         (new  Double(rs.getDouble("REJECTEDSERVICESAMOUNT")));
  2387.                 }
  2388.                 if(rs.getObject("REJECTEDMEDICINESAMOUNT")!= null)
  2389.                 {
  2390.                     detailsBean.setRejectedMedicineAmount
  2391.                         (new  Double(rs.getDouble("REJECTEDMEDICINESAMOUNT")));
  2392.                 }
  2393.                 if(rs.getObject("REJECTEDNODISCOUNTAMOUNT")!= null)
  2394.                 {
  2395.                     detailsBean.setRejectedNoDiscountAmount
  2396.                         (new  Double(rs.getDouble("REJECTEDNODISCOUNTAMOUNT")));
  2397.                 }
  2398.                
  2399.                 GOSIDebug.debugMessages("Injuryid in Session :" + detailsBean.getInjuryId() +":");
  2400.                 GOSIDebug.debugMessages("SCHEDULEID in Session :" + detailsBean.getDisbAssmtId() +":");
  2401.                
  2402.                 if(detailsBean.getInjuryId()!= null)
  2403.                 {
  2404.                     detailsBean.setServiceType(OHConstants.SERVICE_TYPE_TRMT);
  2405.                     detailsBean = getInjuryDetails(detailsBean);
  2406.                 }else if(detailsBean.getDisbAssmtId()!= null)
  2407.                 {
  2408.                     detailsBean.setServiceType(OHConstants.SERVICE_TYPE_DISB_TRMT);
  2409.                     detailsBean = getDisbAssmtDetails(detailsBean);
  2410.                 }
  2411.                 detailsBean.setStatus(new  Short (rs.getShort("STATUS")));
  2412.                 GOSIDebug.debugMessages("SessionNumber in Session :" + detailsBean.getSessionNumber() + ":");
  2413.                
  2414.                 detailsList.add(detailsBean);
  2415.                 if(buttonClicked == searchBean.BUTTON_SEARCH ||
  2416.                         buttonClicked == searchBean.BUTTON_NEXT)
  2417.                 {
  2418.                     //GOSIDebug.debugMessages("inside while in search");
  2419.                     if (count ==1)
  2420.                     {
  2421.                         searchBean.setFirstId
  2422.                             (detailsBean.getInvoiceDetailsId().longValue());
  2423.                     }
  2424.                     else if(count < (GOSIApplicationProperties.MAX_PAGE_SIZE*searchBean.getPageIndex())+1)
  2425.                     {
  2426.                         searchBean.setLastId
  2427.                             (detailsBean.getInvoiceDetailsId().longValue());
  2428.                     }
  2429.                     //GOSIDebug.debugMessages("inside while in search after");
  2430.                 }
  2431.  
  2432.                 if(buttonClicked == searchBean.BUTTON_PREVIOUS)
  2433.                 {
  2434.                     //GOSIDebug.debugMessages("inside while in back");
  2435.                     if (count ==1)
  2436.                     {
  2437.                         searchBean.setLastId
  2438.                             (detailsBean.getInvoiceDetailsId().longValue());
  2439.                     }
  2440.                     else if(count < (GOSIApplicationProperties.MAX_PAGE_SIZE*searchBean.getPageIndex())+1)
  2441.                     {
  2442.                         searchBean.setFirstId
  2443.                             (detailsBean.getInvoiceDetailsId().longValue());
  2444.                     }
  2445.                     //GOSIDebug.debugMessages("inside while in back after");
  2446.                 }
  2447.                 count=count+1;
  2448.             }
  2449.             detailsList.add(searchBean);
  2450.             GOSIDebug.debugMessages("Ending searchDetailsList - MaintainRegHospitalInvoiceSessionEJB");
  2451.             return detailsList;
  2452.         }
  2453.         catch (GOSIException ge)
  2454.         {
  2455.             throw ge;
  2456.         }
  2457.         catch (Exception e)
  2458.         {
  2459.             throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  2460.                 GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  2461.                 "searchDetailsList()",e,"CMN_ERR_1000");  
  2462.  
  2463.         }
  2464.         finally
  2465.         {
  2466.             GOSIUtilities.cleanUp(con,ps,rs);
  2467.         }
  2468.     }
  2469.        
  2470.        
  2471.     /**
  2472.     * @METHOD NAME              :   getTotalAmount
  2473.     * @INFORMATION              :   This method is to  get Total Amount of an invoice
  2474.     * @PARAM                    :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceHeaderBean
  2475.     * @RETURN                   :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceHeaderBean
  2476.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  2477.     * @LAST MODIFIED BY         :  
  2478.     * @LAST MODIFIED DATE       :  
  2479.     **/
  2480.      private RegHospInvoiceHeaderBean getTotalAmount
  2481.         (RegHospInvoiceHeaderBean headerBean)throws GOSIException
  2482.      {
  2483.         PreparedStatement ps = null;
  2484.         ResultSet rs = null;
  2485.         try
  2486.         {
  2487.             // query to get the total of amounts for a invoice header
  2488.             // called during workflow
  2489.             double rejectedAmount = 0.00;
  2490.             String sqlQuery = " select "+
  2491.                 " sum(SERVICESAMOUNT)  TOTALSERVICESAMOUNT,  "+
  2492.                 " sum(MEDICINESAMOUNT) TOTALMEDICINESAMOUNT, "+
  2493.                 " sum(NODISCOUNTAMOUNT) TOTALNODISCOUNTAMOUNT, "+
  2494.                 " sum(REJECTEDSERVICESAMOUNT) TOTALREJECTEDSERVICESAMOUNT, "+
  2495.                 " sum(REJECTEDMEDICINESAMOUNT) TOTALREJECTEDMEDICINESAMOUNT, "+
  2496.                 " sum(REJECTEDNODISCOUNTAMOUNT)  TOTALREJECTEDNODISCOUNTAMOUNT,  "+
  2497.                 " sum(REJECTEDAMOUNT)  TOTALREJECTEDAMOUNT  "+
  2498.                 " from "+
  2499.                   SITables.T_REGHOSPINVOICEDET +
  2500.                 " where INVOICEHEADERID = ? "+
  2501.                 " and STATUS != ? ";
  2502.             ps = con.prepareStatement(sqlQuery);
  2503.             ps.setLong(1, headerBean.getInvoiceHeaderId().longValue());
  2504.             ps.setLong(2,OHConstants.REG_HOSP_INVC_DETAILS_CANCELLED.shortValue());
  2505.             rs =ps.executeQuery();
  2506.             while(rs.next())
  2507.             {
  2508.                 if(rs.getObject("TOTALSERVICESAMOUNT")!=null)
  2509.                 {
  2510.                     headerBean.setServicesAmount(new Double
  2511.                         (rs.getDouble("TOTALSERVICESAMOUNT")));
  2512.                 }
  2513.                 if(rs.getObject("TOTALMEDICINESAMOUNT")!=null)
  2514.                 {
  2515.                     headerBean.setMedicinesAmount(new Double
  2516.                         (rs.getDouble("TOTALMEDICINESAMOUNT")));
  2517.                 }
  2518.                 if(rs.getObject("TOTALNODISCOUNTAMOUNT")!= null)
  2519.                 {
  2520.                     headerBean.setNoDiscountAmount(new Double
  2521.                         (rs.getDouble("TOTALNODISCOUNTAMOUNT")));
  2522.                 }
  2523.                 if(rs.getObject("TOTALREJECTEDSERVICESAMOUNT")!= null)
  2524.                 {
  2525.                     headerBean.setRejectedServiceAmount(new Double
  2526.                         (rs.getDouble("TOTALREJECTEDSERVICESAMOUNT")));
  2527.                     rejectedAmount = rejectedAmount +
  2528.                         headerBean.getRejectedServiceAmount().doubleValue();
  2529.                 }
  2530.                 if(rs.getObject("TOTALREJECTEDMEDICINESAMOUNT")!= null)
  2531.                 {
  2532.                     headerBean.setRejectedMedicineAmount(new Double
  2533.                         (rs.getDouble("TOTALREJECTEDMEDICINESAMOUNT")));
  2534.                     rejectedAmount = rejectedAmount +
  2535.                         headerBean.getRejectedMedicineAmount().doubleValue();
  2536.                 }
  2537.                 if(rs.getObject("TOTALREJECTEDNODISCOUNTAMOUNT")!= null)
  2538.                 {
  2539.                     headerBean.setRejectedNoDiscountAmount(new Double
  2540.                         (rs.getDouble("TOTALREJECTEDNODISCOUNTAMOUNT")));
  2541.                     rejectedAmount = rejectedAmount +
  2542.                         headerBean.getRejectedNoDiscountAmount().doubleValue();
  2543.                 }
  2544.                 if(rs.getObject("TOTALREJECTEDAMOUNT")!=null)
  2545.                 {
  2546.                     headerBean.setRejectedAmount(new Double
  2547.                         (rs.getDouble("TOTALREJECTEDAMOUNT")));
  2548.                 }else
  2549.                 {
  2550.                    
  2551.                     headerBean.setRejectedAmount(new Double(rejectedAmount));
  2552.                 }
  2553.             }
  2554.             return headerBean;
  2555.         }catch (Exception e)
  2556.         {
  2557.             throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  2558.                 GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  2559.                 "getTotalAmount()",e,"CMN_ERR_1000");  
  2560.  
  2561.         }
  2562.         finally
  2563.         {
  2564.             GOSIUtilities.cleanUp(ps,rs);
  2565.         }
  2566.      }
  2567.      
  2568.     /**
  2569.     * @METHOD NAME              :   getBankDetails
  2570.     * @INFORMATION              :   This method is to  get Bank Details of hospital
  2571.     * @PARAM                    :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceHeaderBean
  2572.     * @RETURN                   :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceHeaderBean
  2573.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  2574.     * @LAST MODIFIED BY         :  
  2575.     * @LAST MODIFIED DATE       :  
  2576.     **/
  2577.      public RegHospInvoiceHeaderBean getBankDetails
  2578.         ( RegHospInvoiceHeaderBean headerBean) throws GOSIException
  2579.      {
  2580.         PreparedStatement ps = null;
  2581.         ResultSet rs = null;
  2582.         try
  2583.         {
  2584.             // query to get payee details of hospital from hospital contract table
  2585.             String sqlQuery = " select "+
  2586.                 " PAYEENAME, "+
  2587.                 " PAYMENTMODE, "+          
  2588.                 " BANKCODE, "+
  2589.                 " BANKBRANCHCODE, "+
  2590.                 " BANKACCNUMBER "+
  2591.                 " from "+
  2592.                   SITables.T_HOSPITALCONTRACT+
  2593.                 " where HOSPITALCODE = ? "+
  2594.                 " and AGREESTATUS =? ";
  2595.             con = GOSIUtilities.getConnection
  2596.                 (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  2597.             ps = con.prepareStatement(sqlQuery);
  2598.             ps.setLong(1,headerBean.getHospitalCode().longValue());
  2599.             ps.setByte(2,OHConstants.AGREESTATUS_YES.byteValue());
  2600.             rs = ps.executeQuery();
  2601.             while(rs.next())
  2602.             {
  2603.                
  2604.                 if(rs.getObject("PAYMENTMODE")!= null)
  2605.                 {
  2606.                     headerBean.setPaymentMode
  2607.                         (new Short(rs.getString("PAYMENTMODE")));
  2608.                 }
  2609.                 if(rs.getObject("PAYEENAME")!= null)
  2610.                 {
  2611.                     headerBean.setPayeeName(rs.getString("PAYEENAME"));
  2612.                 }
  2613.                 if(rs.getObject("BANKCODE")!= null)
  2614.                 {
  2615.                     headerBean.setBankCode
  2616.                         (new Integer(rs.getInt("BANKCODE")));
  2617.                 }
  2618.                 if(rs.getObject("BANKBRANCHCODE")!= null)
  2619.                 {
  2620.                     headerBean.setBankBranchCode
  2621.                         (rs.getString("BANKBRANCHCODE"));
  2622.                 }
  2623.                 if(rs.getObject("BANKACCNUMBER")!= null)
  2624.                 {
  2625.                     headerBean.setBankAccountNumber
  2626.                         (rs.getString("BANKACCNUMBER"));
  2627.                 }
  2628.             }
  2629.             return headerBean;
  2630.         }
  2631.         catch (GOSIException ge)
  2632.         {
  2633.             throw ge;
  2634.         }
  2635.         catch (Exception e)
  2636.         {
  2637.             throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  2638.                 GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  2639.                 "getBankDetails()",e,"CMN_ERR_1000");  
  2640.  
  2641.         }
  2642.         finally
  2643.         {
  2644.             GOSIUtilities.cleanUp(con,ps,rs);
  2645.         }
  2646.      }
  2647.      
  2648.     /**
  2649.     * @METHOD NAME              :   interfaceMethod
  2650.     * @INFORMATION              :   This method is to  interface Method for generating creditnote in finance
  2651.     * @PARAM                    :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceHeaderBean,
  2652.                                     class gosi.core.workflow.beans.WorkflowParamBean
  2653.     * @RETURN                   :   class java.lang.Long
  2654.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  2655.     * @LAST MODIFIED BY         :  
  2656.     * @LAST MODIFIED DATE       :  
  2657.     **/
  2658.      private Long interfaceMethod
  2659.     (RegHospInvoiceHeaderBean headerBean ,
  2660.      WorkflowParamBean workflowParamBean) throws GOSIException
  2661.     {
  2662.         String  narrationMessage = "";
  2663.         Long creditNoteId = null;
  2664.         InvoiceInterfaceBean interfaceBean = new InvoiceInterfaceBean();
  2665.         try
  2666.         {
  2667.            
  2668.            
  2669.             // finance interface method
  2670.             if(headerBean != null)
  2671.             {
  2672.                 //GOSIDebug.debugMessages("In the interface method not null");
  2673.                 interfaceBean.setInvoiceType(new Integer
  2674.                 (FAInterfaceConstants.HOSPITAL_INVOICE));
  2675.                 interfaceBean.setInvoiceDate
  2676.                 (new Timestamp(System.currentTimeMillis()));
  2677.                
  2678.                  Short fieldOffice = new Short
  2679.                  (workflowParamBean.getUserLocationId());
  2680.                
  2681.                  interfaceBean.setLocation(new Integer
  2682.                  (""+fieldOffice));
  2683.                  
  2684.                                  
  2685.                  //GOSIDebug.debugMessages("user location" + fieldOffice);
  2686.  
  2687.                 // setting party details
  2688.                 interfaceBean.setPartyType(new Integer
  2689.                 (FAInterfaceConstants.HOSPITALS_PARTYTYPE));
  2690.                 interfaceBean.setPartyCode
  2691.                 (headerBean.getHospitalCode());
  2692.                
  2693.                 //GOSIDebug.debugMessages("hosp code ****" +headerBean.getHospitalCode() );
  2694.                 //GOSIDebug.debugMessages("party code ***" +interfaceBean.getPartyCode() );
  2695.                
  2696.                 interfaceBean.setCurrency
  2697.                 (new Integer(FAInterfaceConstants.LC_CURRENCY));
  2698.                
  2699.                 int baseCurrency = GOSIUtilities.getBaseCurrency();
  2700.                 //GOSIDebug.debugMessages("base currency " + baseCurrency );
  2701.                 if(baseCurrency ==
  2702.                 FAInterfaceConstants.LC_CURRENCY)
  2703.                 {
  2704.                     interfaceBean.setExchangeRateType(new Integer
  2705.                     (FAInterfaceConstants.ERT_NONE));
  2706.                     interfaceBean.setExchangeRate
  2707.                     (new Double(FAInterfaceConstants.
  2708.                     LC_EXCHANGERATE));
  2709.                 }
  2710.                 else
  2711.                 {
  2712.                
  2713.                     interfaceBean.setExchangeRateType(new Integer
  2714.                     (FAInterfaceConstants.ERT_CORPORATE));    
  2715.                        
  2716.                 }
  2717.                
  2718.                 //GOSIDebug.debugMessages("exchange rate type " +interfaceBean.getExchangeRateType());
  2719.                                                                
  2720.                 interfaceBean.setInvoiceAmountFC
  2721.                 (headerBean.getTotalAmount());
  2722.                
  2723.                
  2724.                 interfaceBean.setDiscountAmountFC
  2725.                 (headerBean.getDiscountAmount());
  2726.                
  2727.                 interfaceBean.setPartyInvoiceDateHijra
  2728.                 (headerBean.getInvoiceDateStr());
  2729.                
  2730.                 interfaceBean.setPartyInvoiceDateEntFmt
  2731.                 (headerBean.getInvoiceDateEntFmt());
  2732.                
  2733.                 interfaceBean.setPayee(headerBean.getPayeeName());
  2734.                
  2735.                 narrationMessage  = GOSIErrorMessages.getErrorDesc("SOI_ERR_5138");
  2736.                 narrationMessage += " " + headerBean.getTotalAmount();
  2737.                 narrationMessage += " " + GOSIErrorMessages.getErrorDesc("SOI_ERR_5139");
  2738.                 narrationMessage += " " + headerBean.getPayeeName();
  2739.                 narrationMessage += "  " + headerBean.getStartDateStr();
  2740.                 narrationMessage += " - " + headerBean.getEndDateStr();
  2741.                 narrationMessage += " " + GOSIErrorMessages.getErrorDesc("SOI_ERR_5591");
  2742.                 narrationMessage += " " + headerBean.getFileNumber();
  2743.                 GOSIDebug.debugMessages("StartDate: " + headerBean.getStartDateStr());
  2744.                 GOSIDebug.debugMessages("EndDate: " + headerBean.getEndDateStr());
  2745.                 GOSIDebug.debugMessages("Narration Message :" + narrationMessage + ":");                
  2746.                
  2747.                 String narationApp ="";
  2748.                 if(OHConstants.PAYMENT_MODE_CHEQUE.equals(headerBean.getPaymentMode()))
  2749.                 {
  2750.                     narationApp = " "+ GOSIErrorMessages.getErrorDesc("SOI_ERR_5314");
  2751.                     //" by cheque ";
  2752.                 }else
  2753.                 {
  2754.                     narationApp =  " "+ GOSIErrorMessages.getErrorDesc("SOI_ERR_5315");
  2755.                     //" by bank transfer to bank account ";
  2756.                     narationApp = narationApp +" "+headerBean.getBankAccountNumber();
  2757.                     Short shortBankCode = new Short(headerBean.getBankCode().shortValue());
  2758.                     Short shortBranchCode = new Short(headerBean.getBankBranchCode());
  2759.                     //GOSIDebug.debugMessages("shortBranchCode:"+shortBranchCode);
  2760.                     //GOSIDebug.debugMessages("BankName:"+GOSIUtilities.getDomainDesc("Bank",shortBankCode.shortValue()));
  2761.                     //GOSIDebug.debugMessages("BranchName:"+GOSIUtilities.getDependentDomainDesc("BankBranch",shortBankCode.toString(),shortBranchCode.shortValue()));
  2762.                     narationApp = narationApp +" , "+
  2763.                     GOSIUtilities.getDomainDesc("Bank",shortBankCode.shortValue())+" , " +
  2764.                     GOSIUtilities.getDependentDomainDesc("BankBranch",shortBankCode.toString(),shortBranchCode.shortValue());
  2765.                 }
  2766.                
  2767.                 narrationMessage = narrationMessage+narationApp;
  2768.                
  2769.                 //GOSIDebug.debugMessages("\n\n NARATION:"+narrationMessage);
  2770.                
  2771.                
  2772.                                
  2773.                 //GOSIDebug.debugMessages("narration msg" +narrationMessage);
  2774.                
  2775.                 interfaceBean.setNarration(narrationMessage);
  2776.                
  2777.                
  2778.                
  2779.                
  2780.                 if(OHConstants.PAYMENT_MODE_BANK_TRANSFER.
  2781.                 equals(headerBean.getPaymentMode()))
  2782.                 {
  2783.                     interfaceBean.setPaymentMode
  2784.                     (new Integer
  2785.                     (FAInterfaceConstants.ACCOUNT_TRANSFER));
  2786.                 }
  2787.                 else if(OHConstants.PAYMENT_MODE_CHEQUE.
  2788.                 equals(headerBean.getPaymentMode()))
  2789.                 {
  2790.                     interfaceBean.setPaymentMode
  2791.                     (new Integer
  2792.                     (FAInterfaceConstants.LC_CHEQUE));
  2793.                 }
  2794.                
  2795.                 interfaceBean.setPaymentTerm(new Integer
  2796.                 (FAInterfaceConstants.IMMEDIATE_PAYMENTTERM));
  2797.                
  2798.                 interfaceBean.setStatus(new Integer
  2799.                 (FAInterfaceConstants.POSTED));
  2800.                 interfaceBean.setInvoiceInterfaceDetailList
  2801.                 (interfaceDetailMethod(headerBean));
  2802.                 interfaceBean.setModuleId
  2803.                 (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);                                        
  2804.                 interfaceBean.setCreatedBy(headerBean.
  2805.                 getLastModifiedBy());
  2806.                                            
  2807.                 interfaceBean.setCreationTimestamp
  2808.                 (new Timestamp
  2809.                 (System.currentTimeMillis()));
  2810.                 HashMap interfaceHash = new HashMap();
  2811.                 interfaceHash.put("methodDescription",
  2812.                 FAInterfaceConstants.INVOICE_INTERFACE);
  2813.                 interfaceHash.put("interfaceBean",interfaceBean);
  2814.                 FinancialAccountingInterface fai;
  2815.                 // calling finance interface and returning the invoice id
  2816.                 fai = FinanceImplProxy.getFAInterface();
  2817.                 HashMap retVal = fai.invokeService(interfaceHash);
  2818.                 creditNoteId = (Long)retVal.get("invoiceRecId");
  2819.                 GOSIDebug.debugMessages("credit note id *****"+creditNoteId);
  2820.             }
  2821.            
  2822.         }
  2823.         catch(GOSIException ge)
  2824.         {
  2825.             throw ge;
  2826.         }
  2827.         catch(Exception e)
  2828.         {
  2829.             ctx.setRollbackOnly();
  2830.             throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  2831.             GOSIConstants.SOCIAL_INSURANCE,
  2832.             this.getClass().toString(),
  2833.             "interfaceMethod()",e,"CMN_ERR_1000");
  2834.            
  2835.         }
  2836.          return creditNoteId;
  2837.     }
  2838.    
  2839.  
  2840.     /**
  2841.     * @METHOD NAME              :   interfaceDetailMethod
  2842.     * @INFORMATION              :   This method is to  interface Detail Method used to populate the details bean for creditnote
  2843.     * @PARAM                    :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceHeaderBean
  2844.     * @RETURN                   :   class java.util.ArrayList
  2845.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  2846.     * @LAST MODIFIED BY         :  
  2847.     * @LAST MODIFIED DATE       :  
  2848.     **/
  2849.     private ArrayList interfaceDetailMethod
  2850.     (RegHospInvoiceHeaderBean headerBean)
  2851.     throws GOSIException
  2852.     {
  2853.         ArrayList debitDetailsArray = new ArrayList();
  2854.         try
  2855.         {
  2856.             InvoiceInterfaceDetailBean debitDetailBean =
  2857.              new InvoiceInterfaceDetailBean();
  2858.            
  2859.                              
  2860.             // method to set the interface details for the interface method
  2861.            
  2862.             debitDetailBean.setAmountFC(
  2863.             headerBean.getTotalAmount());
  2864.             debitDetailBean.setReasonCode(new Integer
  2865.             (FAInterfaceConstants.TREATMENT_EXPENSE_RC));
  2866.             debitDetailBean.setShortDesc
  2867.             (GOSIErrorMessages.getErrorDesc
  2868.             ("SOI_ERR_4897"));
  2869.             debitDetailBean.setCrDrIndicator(new Integer
  2870.             ("" + FAInterfaceConstants.DR_INDICATOR));
  2871.             debitDetailsArray.add(debitDetailBean);
  2872.            
  2873.         }
  2874.         catch(Exception e)
  2875.         {
  2876.             ctx.setRollbackOnly();
  2877.             throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  2878.             GOSIConstants.SOCIAL_INSURANCE,
  2879.             this.getClass().toString(),"interfaceDetailMethod()",
  2880.             e,"CMN_ERR_1000");
  2881.            
  2882.         }
  2883.         return debitDetailsArray;
  2884.     }
  2885.    
  2886.     /**
  2887.     * @METHOD NAME              :   formatInvoiceDetailsList
  2888.     * @INFORMATION              :   This method is to  format Invoice Details List for display to user using page number
  2889.     * @PARAM                    :   class java.util.ArrayList,
  2890.                                     class gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceHeaderBean
  2891.     * @RETURN                   :   class java.util.ArrayList
  2892.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  2893.     * @LAST MODIFIED BY         :  
  2894.     * @LAST MODIFIED DATE       :  
  2895.     **/
  2896.     private ArrayList formatInvoiceDetailsList(ArrayList detailList,
  2897.         RegHospInvoiceHeaderBean headerBean) throws GOSIException
  2898.     {
  2899.         try
  2900.         {
  2901.             // too set the page number and file number in detail pages
  2902.             int detailListSize = detailList.size();
  2903.             if(headerBean.getFileNumber()==null)
  2904.             {
  2905.                 int recordsPerPage = OHRuleBean.getInvoiceRecordsPerPage();
  2906.                 for(int i = 1; i<=detailListSize ;i++)
  2907.                 {
  2908.                     int pageNumber= (i/recordsPerPage)+1;
  2909.                     RegHospInvoiceDetailBean detailBean =
  2910.                         (RegHospInvoiceDetailBean)detailList.get(i-1);
  2911.                     detailBean.setPageNumber(new Long((long)pageNumber));    
  2912.                 }
  2913.             }
  2914.             return detailList;
  2915.            
  2916.         }catch(Exception e)
  2917.         {
  2918.             ctx.setRollbackOnly();
  2919.             throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  2920.             GOSIConstants.SOCIAL_INSURANCE,
  2921.             this.getClass().toString(),"formatInvoiceDetailsList()",
  2922.             e,"CMN_ERR_1000");
  2923.         }
  2924.     }
  2925.  
  2926.     /**
  2927.     * @METHOD NAME              :   getHospitalDetails
  2928.     * @INFORMATION              :   This method is to  get the hospital details
  2929.     * @PARAM                    :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceHeaderBean
  2930.     * @RETURN                   :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceHeaderBean
  2931.     * @EXCEPTION                :   class gosi.core.util.GOSIException,
  2932.                                     class java.rmi.RemoteException
  2933.     * @LAST MODIFIED BY         :  
  2934.     * @LAST MODIFIED DATE       :  
  2935.     **/
  2936.     public RegHospInvoiceHeaderBean getHospitalDetails
  2937.         (RegHospInvoiceHeaderBean headerBean )
  2938.             throws GOSIException
  2939.     {
  2940.         PreparedStatement ps = null;
  2941.         ResultSet rs = null;
  2942.         try
  2943.         {
  2944.             String sqlQuery = " select HOSPITALCODE, HOSPITALNAMEARB, HOSPITALTYPE , INVOICEPAPERSTOPDATE , INVOICEPAPERSTOPDATEFMT "
  2945.                 + " from "+ SITables.T_HOSPITAL
  2946.                 + " where HOSPITALCODE = ? ";
  2947.            
  2948.             con = GOSIUtilities.getConnection(GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  2949.             ps = con.prepareStatement(sqlQuery);
  2950.             ps.setLong(1,headerBean.getHospitalCode().longValue());
  2951.             rs = ps.executeQuery();
  2952.             if(rs.next())
  2953.             {
  2954.                 headerBean.setHospitalName(rs.getString("HOSPITALNAMEARB"));
  2955.                 if(rs.getObject("INVOICEPAPERSTOPDATE")!=null)
  2956.                 {
  2957.                     headerBean.setInvoicePaperStopDate(rs.getTimestamp("INVOICEPAPERSTOPDATE"));
  2958.                 }
  2959.                 if(rs.getObject("INVOICEPAPERSTOPDATEFMT")!=null)
  2960.                 {
  2961.                     headerBean.setInvoicePaperStopDateFmt(rs.getString("INVOICEPAPERSTOPDATEFMT"));
  2962.                 }
  2963.                 Short hospitalType = new Short(rs.getShort("HOSPITALTYPE"));
  2964.                 if(headerBean.getMode() == headerBean.NEW_MODE && !OHConstants.REG_HOSPITAL.equals(hospitalType))
  2965.                 {
  2966.                     throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  2967.                         GOSIConstants.SOCIAL_INSURANCE,
  2968.                         this.getClass().toString(),
  2969.                         "getHospitalDetails()",null,"SOI_ERR_5200");
  2970.                 }
  2971.                 sqlQuery = "select HOSPITALCODE, PAYEENAME, AGREESTATUS "
  2972.                     + " from "+SITables.T_HOSPITALCONTRACT
  2973.                     + " where HOSPITALCODE = ? and AGREESTATUS = ?   ";
  2974.                    
  2975.                 ps = con.prepareStatement(sqlQuery);
  2976.                 ps.setLong(1,headerBean.getHospitalCode().longValue());
  2977.                 ps.setByte(2,OHConstants.AGREESTATUS_YES.byteValue());
  2978.                 rs = ps.executeQuery();
  2979.                 if(rs.next())
  2980.                 {
  2981.                     headerBean.setPayeeName(rs.getString("PAYEENAME"));
  2982.                     headerBean.setPaymentMode(OHConstants.PAYMENT_MODE_CHEQUE);
  2983.                 }
  2984.             }
  2985.             else
  2986.             {
  2987.                 throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  2988.                     GOSIConstants.SOCIAL_INSURANCE,
  2989.                     this.getClass().toString(),
  2990.                     "getHospitalDetails()",null,"SOI_ERR_4014");
  2991.             }
  2992.         }
  2993.         catch(GOSIException ge)
  2994.         {
  2995.             throw ge;
  2996.         }
  2997.         catch(Exception e)
  2998.         {
  2999.             throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  3000.             GOSIConstants.SOCIAL_INSURANCE,
  3001.             this.getClass().toString(),
  3002.             "getHospitalDetails()",e,"CMN_ERR_1000");
  3003.            
  3004.         }
  3005.         finally
  3006.         {
  3007.             GOSIUtilities.cleanUp(con,ps,rs);
  3008.         }
  3009.         return headerBean;
  3010.     }
  3011.     /**
  3012.     * @METHOD NAME              :   saveInvoiceHeader
  3013.     * @INFORMATION              :   This method is to save the invoice header befor calculating the invoice
  3014.     * @PARAM                    :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceHeaderBean
  3015.     * @RETURN                   :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceHeaderBean
  3016.     * @EXCEPTION                :   class gosi.core.util.GOSIException,
  3017.                                     class java.rmi.RemoteException
  3018.     * @LAST MODIFIED BY         :  
  3019.     * @LAST MODIFIED DATE       :  
  3020.     **/
  3021.     public RegHospInvoiceHeaderBean saveInvoiceHeader
  3022.         (RegHospInvoiceHeaderBean headerBean,DMSRequestHeaderBean dmsHeaderBean)
  3023.             throws GOSIException
  3024.     {
  3025.         try
  3026.         {
  3027.             con = GOSIUtilities.getConnection (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  3028.  
  3029.             GOSIDebug.debugMessages("Starting saveInvoiceHeader - MaintainRegHospitalInvoiceSessionEJB");
  3030.             Long userId = null;
  3031.             Timestamp currentTime = new Timestamp(System.currentTimeMillis());
  3032.  
  3033.             RegHospitalInvoiceHeaderEntityHome headerHome= (RegHospitalInvoiceHeaderEntityHome)
  3034.                 ServiceLocator.getInstance().getRemoteHome(
  3035.                 OHConstants.REG_HOSP_INVOICE_HEADER_ENTITY_JNDI,
  3036.                 RegHospitalInvoiceHeaderEntityHome.class);
  3037.            
  3038.             GOSIDebug.debugMessages("Mode:" + headerBean.getMode() + ":"); 
  3039.             if(headerBean.getMode() == AuditBean.NEW_MODE)
  3040.             {
  3041.                 String startDateGreg = GOSIUtilities.getDateFullString(headerBean.getStartDate());
  3042.                 String monthEndDateGreg = OHUtilities.getMonthEndDate(startDateGreg);
  3043.                 String currentDateStr = GOSIUtilities.getDateFullString(currentTime);
  3044.  
  3045.                 headerBean.setEndDateStr(monthEndDateGreg);
  3046.                 headerBean.setEndDateEntFmt(OHConstants.GREGORIAN);
  3047.                 headerBean.setEndDate(OHUtilities.getGregDate
  3048.                     (headerBean.getEndDateStr(),headerBean.getEndDateEntFmt()));
  3049.                 headerBean = validateInvoiceDates(headerBean);
  3050.                 userId = headerBean.getCreatedBy();
  3051.                
  3052.                 if (! isInvoiceFileNumberUnique (headerBean))
  3053.                 {
  3054.                     throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  3055.                                                GOSIConstants.SOCIAL_INSURANCE,
  3056.                                                this.getClass().toString(),
  3057.                                                "saveInvoiceHeader()",
  3058.                                                null,
  3059.                                                "SOI_ERR_5574");
  3060.                 }
  3061.                
  3062.                 Long headerId = GOSIUtilities.getPrimaryKey
  3063.                     ("T_REGHOSPINVOICEHDR",userId);
  3064.                 Long workflowId = GOSIUtilities.getPrimaryKey
  3065.                     ("TRMTSRVCWRKFLOID",userId);
  3066.                 Long invoiceNumber = GOSIUtilities.getPrimaryKey
  3067.                     ("REGHOSINVOICENUMBER",userId);
  3068.                 headerBean.setInvoiceHeaderId(headerId);
  3069.                 headerBean.setWorkflowId(workflowId);
  3070.                 headerBean.setInvoiceNumber(invoiceNumber);
  3071.                 headerBean.setCreationTimestamp(currentTime);
  3072.                 headerBean.setInvoiceStatus(OHConstants.REG_HOSP_INVC_PENDING_DATA_ENTRY);
  3073.                 headerBean.setInvoiceDate(OHUtilities.getGregDate(currentDateStr,OHConstants.GREGORIAN));
  3074.                 headerBean.setInvoiceDateEntFmt(OHConstants.GREGORIAN);
  3075.  
  3076.                 // inserting header
  3077.                 headerHome.create(headerBean);
  3078.                 headerBean.setMode(AuditBean.MODIFY_MODE);
  3079.             }else
  3080.             if(headerBean.getMode() == AuditBean.MODIFY_MODE)
  3081.             {
  3082.                 headerBean.setLastModifiedTimestamp(currentTime);
  3083.                 RegHospitalInvoiceHeaderEntity headerRemote = headerHome.
  3084.                 findByPrimaryKey(headerBean.getInvoiceHeaderId());
  3085.                 headerRemote.modifyRegHospInvoiceHeader(headerBean);
  3086.  
  3087.             }
  3088.             // calling DMS interface and setting key values
  3089.             if(dmsHeaderBean != null)
  3090.             {
  3091.                 dmsHeaderBean.setSourceRecordId
  3092.                 ("" + headerBean.getInvoiceHeaderId());
  3093.                     dmsHeaderBean.setSourceTable(SITables.T_REGHOSPINVOICEHDR);
  3094.                 dmsHeaderBean.setCreatedBy(userId);
  3095.                 dmsHeaderBean.setKeyList(DMSConstants.HOSPITAL_INVOICE_NUMBER,
  3096.                     ""+headerBean.getInvoiceNumber());
  3097.                 DMSUtilities.startDMS(dmsHeaderBean);
  3098.             }
  3099.         }
  3100.         catch(GOSIException ge)
  3101.         {
  3102.             ctx.setRollbackOnly();
  3103.             throw ge;
  3104.         }
  3105.         catch(Exception e)
  3106.         {
  3107.             ctx.setRollbackOnly();
  3108.             throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  3109.             GOSIConstants.SOCIAL_INSURANCE,
  3110.             this.getClass().toString(),
  3111.             "saveInvoiceHeader()",e,"CMN_ERR_1000");
  3112.            
  3113.         }
  3114.         finally
  3115.         {
  3116.             GOSIUtilities.cleanUp (con);
  3117.         }
  3118.         GOSIDebug.debugMessages("Ending saveInvoiceHeader - MaintainRegHospitalInvoiceSessionEJB");
  3119.         return headerBean;
  3120.     }
  3121.    
  3122.     /**
  3123.     * @METHOD NAME              :   searchaveMapMedicineCodeList
  3124.     * @INFORMATION              :   This method is to Search SFDA Medicine List
  3125.     *                               of hospital in Arraylist
  3126.     * @PARAM                    :   class java.lang.Long
  3127.     *                               class java.lang.String
  3128.     *                               class java.lang.String                             
  3129.                                    
  3130.     * @RETURN                   :   class java.util.ArrayList
  3131.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  3132.     * @LAST MODIFIED BY         :  
  3133.     * @LAST MODIFIED DATE       :  
  3134.     **/
  3135.     public ArrayList searchMapMedicineCodeList(Long hospitalCode, String medCode,String mapCode)throws GOSIException
  3136.     {
  3137.         ArrayList hospitalMapMedicineList=new ArrayList();
  3138.         PreparedStatement ps = null;
  3139.         ResultSet rs = null;
  3140.         int i=1;
  3141.         try
  3142.         {
  3143.             StringBuilder  sqlQuery = new StringBuilder ( "SELECT A.ID , A.HOSPITALCODE , A.SFDACODE , A.MEDICINEMAPCODE , A.STATUS ,")
  3144.             .append(" B.TRADENAME , B.STRENGTHVALUE , B.UNITOFSTRENGTH , B.UNITOFSTRENGTH , ")
  3145.             .append("B.VOLUME , B.UNITOFVOLUME , B.PACKAGETYPE , B.PUBLICPRICE FROM ")
  3146.             .append(SITables.T_SFDAMAP +" A LEFT JOIN "+SITables.T_SFDA + " B ON A.SFDACODE=B.REGISTRATIONNUM")
  3147.             .append(" WHERE A.HOSPITALCODE= ? AND A.STATUS in ( ? , ? ) ");
  3148.            
  3149.             if(medCode!=null && !medCode.equals(""))
  3150.                 sqlQuery.append("AND A.SFDACODE= ? ");
  3151.             if(mapCode!=null && !mapCode.equals(""))
  3152.                 sqlQuery.append("AND A.MEDICINEMAPCODE= ? ");
  3153.            
  3154.             GOSIDebug.debugMessages(sqlQuery.toString());
  3155.             con = GOSIUtilities.getConnection(GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  3156.            
  3157.             ps = con.prepareStatement(sqlQuery.toString());
  3158.             ps.setLong(i++,hospitalCode.longValue());
  3159.             ps.setShort(i++,OHConstants.SFDA_MAP_ENTER);
  3160.             ps.setShort(i++,OHConstants.SFDA_MAP_MODIFIED);
  3161.            
  3162.             if(medCode!=null && !medCode.equals(""))
  3163.                 ps.setString(i++,medCode);
  3164.             if(mapCode!=null && !mapCode.equals(""))
  3165.                 ps.setString(i++,mapCode);
  3166.             rs = ps.executeQuery();
  3167.            
  3168.             while(rs.next())
  3169.             {
  3170.                 SFDAMapBean mapBean=new SFDAMapBean();
  3171.                 mapBean.setId(rs.getLong("ID"));
  3172.                 mapBean.setHospitalCode(rs.getLong("HOSPITALCODE"));
  3173.                 mapBean.setSFDACode(rs.getString("SFDACODE"));
  3174.                 mapBean.setMedicineMapCode(rs.getString("MEDICINEMAPCODE"));
  3175.                 String tradeName=rs.getString("TRADENAME");
  3176.                 String strengthValue=rs.getString("STRENGTHVALUE");
  3177.                 String unitOfStrength=rs.getString("UNITOFSTRENGTH");
  3178.                 String strength= strengthValue!=null &&unitOfStrength!=null?
  3179.                         " "+strengthValue+unitOfStrength:"";
  3180.                 String volumeValue=rs.getString("VOLUME");
  3181.                 String unitOfVolume=rs.getString("UNITOFVOLUME");
  3182.                 String volume=unitOfVolume!=null && !volumeValue.equalsIgnoreCase("null") ?
  3183.                         " Volume:"+volumeValue+unitOfVolume:"";
  3184.                 String name=tradeName+strength+volume;
  3185.                 mapBean.setMedicineDesc(name);
  3186.                 mapBean.setPackageType(rs.getString("PACKAGETYPE"));
  3187.                 mapBean.setPublicPrice(rs.getString("PUBLICPRICE"));
  3188.                 mapBean.setStatus(rs.getShort("STATUS"));
  3189.                
  3190.                 hospitalMapMedicineList.add(mapBean);
  3191.             }
  3192.  
  3193.             return hospitalMapMedicineList;
  3194.         }
  3195.         catch(GOSIException ge)
  3196.         {
  3197.             throw ge;
  3198.         }
  3199.         catch(Exception e)
  3200.         {
  3201.             throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  3202.             GOSIConstants.SOCIAL_INSURANCE,
  3203.             this.getClass().toString(),
  3204.             "searchMapMedicineCodeList()",e,"CMN_ERR_1000");
  3205.         }
  3206.         finally
  3207.         {
  3208.             GOSIUtilities.cleanUp(con,ps,rs);
  3209.         }
  3210.  
  3211.     }
  3212.     /**
  3213.     * @METHOD NAME              :   saveMapMedicineCodeList
  3214.     * @INFORMATION              :   This method is to save the invoice header befor calculating the invoice
  3215.     * @PARAM                    :   class java.util.ArrayList
  3216.     * @RETURN                   :   class java.lang.String
  3217.     * @EXCEPTION                :   class gosi.core.util.GOSIException,
  3218.                                     class java.rmi.RemoteException
  3219.     * @LAST MODIFIED BY         :  
  3220.     * @LAST MODIFIED DATE       :  
  3221.     **/
  3222.     public HashMap saveMapMedicineCodeList(ArrayList mapMedicineCodeList)throws GOSIException
  3223.     {
  3224.         String message="";
  3225.         Long userId=null;
  3226.         String errorCode="";
  3227.         StringBuilder cases=new StringBuilder("");
  3228.         HashMap duplicateList=new HashMap();
  3229.         PreparedStatement ps = null;
  3230.         ResultSet rs = null;
  3231.         HashMap trmtServices=new HashMap();
  3232.         HashMap SFDACodes=new HashMap();
  3233.         HashMap MapCodes=new HashMap();
  3234.         SFDAMapEntityHome mapHome= (SFDAMapEntityHome)
  3235.         ServiceLocator.getInstance().getRemoteHome(
  3236.                 OHConstants.SFDA_MAP_ENTITY_JNDI,
  3237.                 SFDAMapEntityHome.class);
  3238.         Boolean isHasSaved=false;
  3239.         Boolean isHasModified=false;
  3240.        
  3241.         try
  3242.         {
  3243.             duplicateList=validateMapMedicineCodeList(mapMedicineCodeList);
  3244.             trmtServices=(HashMap)duplicateList.get("TreatmentService");
  3245.             SFDACodes=(HashMap)duplicateList.get("SFDACode");
  3246.             MapCodes=(HashMap)duplicateList.get("MapCode");
  3247.             for(int i=0;i<mapMedicineCodeList.size();i++)
  3248.             {
  3249.                 SFDAMapBean mapBean=(SFDAMapBean)mapMedicineCodeList.get(i);
  3250.                 Boolean isModifyMode=mapBean.getId()!=null && mapBean.getMode()==AuditBean.MODIFY_MODE;
  3251.                 if((trmtServices==null || !trmtServices.containsValue(mapBean.getMedicineMapCode()))
  3252.                         && (MapCodes==null || !MapCodes.containsValue(mapBean.getMedicineMapCode()))
  3253.                         && (SFDACodes==null || !SFDACodes.containsValue(mapBean.getSFDACode()) || isModifyMode ) )
  3254.                 {
  3255.  
  3256.                     if(isModifyMode)
  3257.                     {
  3258.                         SFDAMapEntity mapEntity=(SFDAMapEntity)mapHome.findByPrimaryKey(mapBean.getId());
  3259.                         mapEntity.updateSFDAMap(mapBean);
  3260.                         isHasModified=true;
  3261.                     }
  3262.                     else
  3263.                     {
  3264.                         userId=mapBean.getCreatedBy();
  3265.                         Long id= GOSIUtilities.getPrimaryKey("T_SFDAMAP",userId);
  3266.                         mapBean.setId(id);
  3267.                         mapHome.create(mapBean);
  3268.                         isHasSaved=true;
  3269.                          mapBean.setMode(AuditBean.DELETE_MODE);
  3270.                     }
  3271.                 }
  3272.                
  3273.             }
  3274.             for(int i=0;i<mapMedicineCodeList.size();i++)
  3275.             {
  3276.                 SFDAMapBean mapBean=(SFDAMapBean)mapMedicineCodeList.get(i);
  3277.                 if(mapBean.getMode()==AuditBean.DELETE_MODE)
  3278.                     mapMedicineCodeList.remove(i);
  3279.             }
  3280.             duplicateList.put("isHasSaved", isHasSaved);
  3281.             duplicateList.put("isHasModified",isHasModified );
  3282.             duplicateList.put("mapMedicineCodeList", mapMedicineCodeList);
  3283.            
  3284.            
  3285.             return duplicateList;
  3286.            
  3287.         }
  3288.         catch(GOSIException ge)
  3289.         {
  3290.             ctx.setRollbackOnly();
  3291.             throw ge;
  3292.         }
  3293.         catch(Exception e)
  3294.         {
  3295.             ctx.setRollbackOnly();
  3296.             throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  3297.             GOSIConstants.SOCIAL_INSURANCE,
  3298.             this.getClass().toString(),
  3299.             "saveMapMedicineCodeList()",e,"CMN_ERR_1000");
  3300.         }
  3301.         /*finally{
  3302.             return message;
  3303.         }*/
  3304.  
  3305.     }
  3306.     /**
  3307.     * @METHOD NAME              :   validateMapMedicineCodeList
  3308.     * @INFORMATION              :   This method is to validate Map Medicine Code List with SFDA List
  3309.     * @PARAM                    :   class java.util.ArrayList
  3310.     * @RETURN                   :   class java.lang.String
  3311.     * @EXCEPTION                :   class gosi.core.util.GOSIException,
  3312.                                     class java.rmi.RemoteException
  3313.     * @LAST MODIFIED BY         :  
  3314.     * @LAST MODIFIED DATE       :  
  3315.     **/
  3316.     private HashMap validateMapMedicineCodeList(ArrayList mapMedicineCodeList)throws GOSIException
  3317.     {
  3318.         PreparedStatement ps = null;
  3319.         ResultSet rs = null;
  3320.         HashMap duplicateList=new HashMap();
  3321.         HashMap trmtServices=new HashMap();
  3322.         HashMap SFDACodes=new HashMap();
  3323.         HashMap MapCodes=new HashMap();
  3324.         int j=0;
  3325.  
  3326.        
  3327.         try
  3328.         {
  3329.             Long hospitalCode=((SFDAMapBean)mapMedicineCodeList.get(0)).getHospitalCode();
  3330.             StringBuilder  sqlQuery = new StringBuilder ( "select Treatmentcode from ")
  3331.             .append(SITables.T_TRTMSERVICELIST )
  3332.             .append(" where hospitalcode=? and  Treatmentcode in ( ?");
  3333.             for(int i=1;i<mapMedicineCodeList.size();i++){
  3334.                 sqlQuery.append(" , ?");
  3335.             }
  3336.             sqlQuery.append(" )");
  3337.            
  3338.            
  3339.             con = GOSIUtilities.getConnection(GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  3340.             ps = con.prepareStatement(sqlQuery.toString());
  3341.             ps.setLong(1,hospitalCode.longValue());
  3342.             for(int i=1;i<=mapMedicineCodeList.size();i++){
  3343.                 ps.setString(i+1,((SFDAMapBean)mapMedicineCodeList.get(i-1)).getMedicineMapCode());
  3344.             }
  3345.            
  3346.             rs = ps.executeQuery();
  3347.             j=0;
  3348.             while(rs.next())
  3349.             {
  3350.                 trmtServices.put("TreatmentService"+j,rs.getString("TREATMENTCODE"));
  3351.                 j++;
  3352.             }
  3353.            
  3354.        
  3355.             GOSIUtilities.cleanUp(ps,rs);
  3356.              sqlQuery = new StringBuilder ( "select SFDACODE from ")
  3357.             .append(SITables.T_SFDAMAP)
  3358.             .append(" t where hospitalcode=? and  SFDACODE in ( ?");
  3359.             for(int i=1;i<mapMedicineCodeList.size();i++){
  3360.                 sqlQuery.append(" , ?");
  3361.             }
  3362.             sqlQuery.append(" )");
  3363.            
  3364.            
  3365.             ps = con.prepareStatement(sqlQuery.toString());
  3366.             ps.setLong(1,hospitalCode.longValue());
  3367.             for(int i=1;i<=mapMedicineCodeList.size();i++){
  3368.                 ps.setString(i+1,((SFDAMapBean)mapMedicineCodeList.get(i-1)).getSFDACode());
  3369.             }
  3370.             rs = ps.executeQuery();
  3371.             j=0;
  3372.             while(rs.next())
  3373.             {
  3374.                 SFDACodes.put("SFDACode"+j,rs.getString("SFDACODE"));
  3375.                 j++;
  3376.             }
  3377.                
  3378.             GOSIUtilities.cleanUp(ps,rs);
  3379.              sqlQuery = new StringBuilder ( "select MEDICINEMAPCODE from ")
  3380.             .append(SITables.T_SFDAMAP)
  3381.             .append(" t where hospitalcode=? and  MEDICINEMAPCODE in ( ?");
  3382.             for(int i=1;i<mapMedicineCodeList.size();i++){
  3383.                 sqlQuery.append(" , ?");
  3384.             }
  3385.             sqlQuery.append(" )");
  3386.            
  3387.            
  3388.             ps = con.prepareStatement(sqlQuery.toString());
  3389.             ps.setLong(1,hospitalCode.longValue());
  3390.             for(int i=1;i<=mapMedicineCodeList.size();i++){
  3391.                 ps.setString(i+1,((SFDAMapBean)mapMedicineCodeList.get(i-1)).getMedicineMapCode());
  3392.             }
  3393.             rs = ps.executeQuery();
  3394.             j=0;
  3395.             while(rs.next())
  3396.             {
  3397.                 MapCodes.put("MapCode"+j,rs.getString("MEDICINEMAPCODE"));
  3398.                 j++;
  3399.             }
  3400.            
  3401.             if(!trmtServices.isEmpty())
  3402.                 duplicateList.put("TreatmentService", trmtServices);
  3403.             if(!SFDACodes.isEmpty())
  3404.                 duplicateList.put("SFDACode", SFDACodes);
  3405.             if(!MapCodes.isEmpty())
  3406.                 duplicateList.put("MapCode", MapCodes);
  3407.                
  3408.            
  3409.             return duplicateList;
  3410.         }
  3411.         catch(GOSIException ge)
  3412.         {
  3413.             ctx.setRollbackOnly();
  3414.             throw ge;
  3415.         }
  3416.         catch(Exception e)
  3417.         {
  3418.             ctx.setRollbackOnly();
  3419.             throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  3420.             GOSIConstants.SOCIAL_INSURANCE,
  3421.             this.getClass().toString(),
  3422.             "validateMapMedicineCodeList()",e,"CMN_ERR_1000");
  3423.         }
  3424.         finally
  3425.         {
  3426.             GOSIUtilities.cleanUp(con,ps,rs);
  3427.         //  return errorMessage.toString();
  3428.            
  3429.         }
  3430.  
  3431.     }
  3432.  
  3433.    
  3434.     /**
  3435.     * @METHOD NAME              :   getPageList
  3436.     * @INFORMATION              :   This method is to get the number of pages of the invoice details
  3437.     * @PARAM                    :   class java.lang.Long
  3438.     * @RETURN                   :   class java.util.ArrayList
  3439.     * @EXCEPTION                :   class gosi.core.util.GOSIException,
  3440.                                     class java.rmi.RemoteException
  3441.     * @LAST MODIFIED BY         :  
  3442.     * @LAST MODIFIED DATE       :  
  3443.     **/
  3444.     public ArrayList getPageList(Long invoiceHeaderId)
  3445.         throws GOSIException
  3446.     {
  3447.         ArrayList pageList = new ArrayList();
  3448.         PreparedStatement ps = null;
  3449.         ResultSet rs = null;
  3450.         try
  3451.         {
  3452.             String sqlQuery = "select distinct (PAGENUMBER) from "
  3453.                 + SITables.T_REGHOSPINVOICEDET
  3454.                 + " where INVOICEHEADERID = ? " + " and STATUS != ? ORDER BY PAGENUMBER ASC ";
  3455.            
  3456.             con = GOSIUtilities.getConnection(GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  3457.             ps = con.prepareStatement(sqlQuery);
  3458.             ps.setLong(1,invoiceHeaderId.longValue());
  3459.             ps.setShort(2,OHConstants.REG_HOSP_INVC_DETAILS_CANCELLED.shortValue());
  3460.             rs = ps.executeQuery();
  3461.             while(rs.next())
  3462.             {
  3463.                 pageList.add(new Long(rs.getLong("PAGENUMBER")));
  3464.             }
  3465.         }
  3466.         catch(GOSIException ge)
  3467.         {
  3468.             throw ge;
  3469.         }
  3470.         catch(Exception e)
  3471.         {
  3472.             throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  3473.             GOSIConstants.SOCIAL_INSURANCE,
  3474.             this.getClass().toString(),
  3475.             "getPageList()",e,"CMN_ERR_1000");
  3476.         }
  3477.         finally
  3478.         {
  3479.             GOSIUtilities.cleanUp(con,ps,rs);
  3480.         }
  3481.         return pageList;
  3482.     }
  3483.    
  3484.     /**
  3485.     * @METHOD NAME              :   getNumberOfTrmtInvoiceDetails
  3486.     * @INFORMATION              :   This method is to get the number of pages of the invoice details
  3487.     * @PARAM                    :   class java.lang.Long
  3488.     * @RETURN                   :   class java.util.ArrayList
  3489.     * @EXCEPTION                :   class gosi.core.util.GOSIException,
  3490.                                     class java.rmi.RemoteException
  3491.     * @LAST MODIFIED BY         :  
  3492.     * @LAST MODIFIED DATE       :  
  3493.     **/
  3494.     private Long getNumberOfTrmtInvoiceDetails(Long invoiceHeaderId)
  3495.         throws GOSIException
  3496.     {
  3497.         Long count = null;
  3498.         PreparedStatement ps = null;
  3499.         ResultSet rs = null;
  3500.         try
  3501.         {
  3502.             String sqlQuery = "select count (INVOICEDETAILSID) as NUM FROM "
  3503.                 + SITables.T_REGHOSPINVOICEDET
  3504.                 + " where INVOICEHEADERID = ? " + " and STATUS != ? ";
  3505.            
  3506.             if(con.isClosed())
  3507.                 con = GOSIUtilities.getConnection(GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  3508.            
  3509.             ps = con.prepareStatement(sqlQuery);
  3510.             ps.setLong(1,invoiceHeaderId.longValue());
  3511.             ps.setShort(2,OHConstants.REG_HOSP_INVC_DETAILS_CANCELLED.shortValue());
  3512.             rs = ps.executeQuery();
  3513.             if(rs.next())
  3514.             {
  3515.                 count=new Long(rs.getLong("NUM"));
  3516.             }
  3517.         }
  3518.         catch(GOSIException ge)
  3519.         {
  3520.             throw ge;
  3521.         }
  3522.         catch(Exception e)
  3523.         {
  3524.             throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  3525.             GOSIConstants.SOCIAL_INSURANCE,
  3526.             this.getClass().toString(),
  3527.             "getNumberOfTrmtInvoiceDetails()",e,"CMN_ERR_1000");
  3528.         }
  3529.         finally
  3530.         {
  3531.             GOSIUtilities.cleanUp(ps,rs);
  3532.         }
  3533.         return count;
  3534.     }
  3535.  
  3536.  
  3537.         /**
  3538.     * @METHOD NAME              :   searchRegHospitalInvoiceDetails
  3539.     * @INFORMATION              :   This method is to  search Invoice details List
  3540.     * @PARAM                    :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.InvoiceSearchBean
  3541.     * @RETURN                   :   class java.util.ArrayList
  3542.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  3543.     * @LAST MODIFIED BY         :  
  3544.     * @LAST MODIFIED DATE       :  
  3545.     **/
  3546.     public ArrayList searchRegHospitalInvoiceDetails(Long invoiceheaderId,
  3547.         Long pageNumber)throws GOSIException
  3548.     {
  3549.         PreparedStatement ps = null;
  3550.         ResultSet rs = null;
  3551.         ArrayList detailsList = new ArrayList();
  3552.         try
  3553.         {
  3554.             // getting invoice details for a particular invoice header
  3555.             int count=1;
  3556.             con = GOSIUtilities.getConnection
  3557.                     (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  3558.             String sqlQuery = " select "+
  3559.                         " INVOICEDETAILSID, "+
  3560.                         " INVOICEHEADERID, " +
  3561.                         " INJURYID, " +
  3562.                         " DISBASSMTID, " +
  3563.                         " TRMTSTARTDATE, " +
  3564.                         " TRMTSTARTDATEENTFMT, " +
  3565.                         " TRMTENDDATE, " +
  3566.                         " TRMTENDDATEENTFMT, " +
  3567.                         " SERVICESAMOUNT, " +
  3568.                         " MEDICINESAMOUNT, " +
  3569.                         " REJECTEDAMOUNT, " +
  3570.                         " STATUS, " +
  3571.                         " CREATEDBY, " +
  3572.                         " CREATIONTIMESTAMP, " +
  3573.                         " LASTMODIFIEDBY, " +
  3574.                         " LASTMODIFIEDTIMESTAMP, "+
  3575.                         " PAGENUMBER, " +
  3576.                         " REJECTEDMEDICINESAMOUNT, " +
  3577.                         " REJECTEDSERVICESAMOUNT, " +
  3578.                         " NODISCOUNTAMOUNT, " +
  3579.                         " REJECTEDNODISCOUNTAMOUNT, " +
  3580.                         " ROUTINGCRITERIA, " +
  3581.                         " SOCIALINSURANCENUMBER "+
  3582.                         " from " +
  3583.                         SITables.T_REGHOSPINVOICEDET +
  3584.                         " where "+
  3585.                         " INVOICEHEADERID = ? and PAGENUMBER = ? "+
  3586.                         " and STATUS != ? "+
  3587.                         " order by INVOICEDETAILSID ";
  3588.             ps = con.prepareStatement(sqlQuery);
  3589.             ps.setLong(1,invoiceheaderId.longValue());
  3590.             ps.setInt(2,pageNumber.intValue());
  3591.             ps.setShort(3,OHConstants.REG_HOSP_INVC_DETAILS_CANCELLED.shortValue());
  3592.             rs = ps.executeQuery();
  3593.             while(rs.next())
  3594.             {
  3595.                 //GOSIDebug.debugMessages("inside while 2");
  3596.                 RegHospInvoiceDetailBean detailsBean =
  3597.                     new RegHospInvoiceDetailBean();
  3598.                    
  3599.                 detailsBean.setInvoiceDetailsId
  3600.                     (new  Long(rs.getLong("INVOICEDETAILSID")));
  3601.                 detailsBean.setInvoiceHeaderId
  3602.                     (new  Long(rs.getLong("INVOICEHEADERID")));
  3603.                 if(rs.getObject("INJURYID")!= null)
  3604.                 {
  3605.                     detailsBean.setInjuryId
  3606.                         (new  Long(rs.getLong("INJURYID")));
  3607.                 }
  3608.                 if(rs.getObject("DISBASSMTID")!= null)
  3609.                 {
  3610.                     detailsBean.setDisbAssmtId
  3611.                         (new  Long(rs.getLong("DISBASSMTID")));
  3612.                 }
  3613.                 detailsBean.setTrmtStartDate
  3614.                     (rs.getTimestamp("TRMTSTARTDATE"));
  3615.                 if(detailsBean.getTrmtStartDate()!=null)
  3616.                 {
  3617.                     detailsBean.setTrmtStartDateEntFmt
  3618.                         (rs.getString("TRMTSTARTDATEENTFMT"));
  3619.                     detailsBean.setTrmtStartDateStr(OHUtilities.getDateStr(
  3620.                         detailsBean.getTrmtStartDate(),
  3621.                         detailsBean.getTrmtStartDateEntFmt()));
  3622.                 }
  3623.                
  3624.                 detailsBean.setTrmtEndDate
  3625.                     (rs.getTimestamp("TRMTENDDATE"));
  3626.                 if(detailsBean.getTrmtEndDate() != null)
  3627.                 {
  3628.                     detailsBean.setTrmtEndDateEntFmt
  3629.                         (rs.getString("TRMTENDDATEENTFMT"));
  3630.                     detailsBean.setTrmtEndDateStr(OHUtilities.getDateStr(
  3631.                         detailsBean.getTrmtEndDate(),
  3632.                         detailsBean.getTrmtEndDateEntFmt()));
  3633.  
  3634.                 }
  3635.                
  3636.                 if(rs.getObject("SERVICESAMOUNT")!= null)
  3637.                 {
  3638.                     detailsBean.setServicesAmount
  3639.                         (new  Double(rs.getDouble("SERVICESAMOUNT")));
  3640.                 }
  3641.                 if(rs.getObject("MEDICINESAMOUNT")!= null)
  3642.                 {
  3643.                     detailsBean.setMedicinesAmount
  3644.                         (new  Double(rs.getDouble("MEDICINESAMOUNT")));
  3645.                 }
  3646.                 if(rs.getObject("REJECTEDAMOUNT")!= null)
  3647.                 {
  3648.                     detailsBean.setRejectedAmount
  3649.                         (new  Double(rs.getDouble("REJECTEDAMOUNT")));
  3650.                 }
  3651.                 if(rs.getObject("REJECTEDMEDICINESAMOUNT")!= null)
  3652.                 {
  3653.                     detailsBean.setRejectedMedicineAmount
  3654.                         (new  Double(rs.getDouble("REJECTEDMEDICINESAMOUNT")));
  3655.                 }
  3656.                 if(rs.getObject("REJECTEDSERVICESAMOUNT")!= null)
  3657.                 {
  3658.                     detailsBean.setRejectedServiceAmount
  3659.                         (new  Double(rs.getDouble("REJECTEDSERVICESAMOUNT")));
  3660.                 }
  3661.                 if(rs.getObject("NODISCOUNTAMOUNT")!= null)
  3662.                 {
  3663.                     detailsBean.setNoDiscountAmount
  3664.                         (new  Double(rs.getDouble("NODISCOUNTAMOUNT")));
  3665.                 }
  3666.                 if(rs.getObject("REJECTEDNODISCOUNTAMOUNT")!= null)
  3667.                 {
  3668.                     detailsBean.setRejectedNoDiscountAmount
  3669.                         (new  Double(rs.getDouble("REJECTEDNODISCOUNTAMOUNT")));
  3670.                 }
  3671.                 if(rs.getObject("SOCIALINSURANCENUMBER")!= null)
  3672.                 {
  3673.                     detailsBean.setSocInsNumber
  3674.                         (new  Long(rs.getLong("SOCIALINSURANCENUMBER")));
  3675.                 }
  3676.                 if(rs.getObject("ROUTINGCRITERIA")!= null)
  3677.                 {
  3678.                     detailsBean.setRoutingCriteria
  3679.                         (new Short(rs.getShort("ROUTINGCRITERIA")));
  3680.                 }
  3681.                 if(detailsBean.getInjuryId()!= null)
  3682.                 {
  3683.                     detailsBean.setServiceType(OHConstants.SERVICE_TYPE_TRMT);
  3684.                     detailsBean = getInjuryDetails(detailsBean);
  3685.                 }else if(detailsBean.getDisbAssmtId()!= null)
  3686.                 {
  3687.                     detailsBean = getDisbAssmtDetails(detailsBean);
  3688.                     detailsBean.setServiceType(OHConstants.SERVICE_TYPE_DISB_TRMT);
  3689.                 }else if(detailsBean.getSocInsNumber()!= null)
  3690.                 {
  3691.                     detailsBean = getContributorDetails(detailsBean);
  3692.                     detailsBean.setServiceType(OHConstants.SERVICE_TYPE_MISC);
  3693.                 }
  3694.                 detailsBean.setStatus(new  Short (rs.getShort("STATUS")));
  3695.                 detailsBean.setPageNumber(new  Long (rs.getLong("PAGENUMBER")));
  3696.                 detailsBean.setMode(detailsBean.OLD_MODE);
  3697.                 detailsList.add(detailsBean);
  3698.             }
  3699.             return detailsList;
  3700.         }
  3701.         catch (GOSIException ge)
  3702.         {
  3703.             throw ge;
  3704.         }
  3705.         catch (Exception e)
  3706.         {
  3707.             throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  3708.                 GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  3709.                 "searchDetailsList()",e,"CMN_ERR_1000");  
  3710.  
  3711.         }
  3712.         finally
  3713.         {
  3714.             GOSIUtilities.cleanUp(con,ps,rs);
  3715.         }
  3716.     }
  3717.  
  3718.     /**
  3719.     * @METHOD NAME              :   getContributorDetails
  3720.     * @INFORMATION              :   This method is to  get Injury Details
  3721.     * @PARAM                    :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceDetailBean
  3722.     * @RETURN                   :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceDetailBean
  3723.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  3724.     * @LAST MODIFIED BY         :  
  3725.     * @LAST MODIFIED DATE       :  
  3726.     **/
  3727.     private RegHospInvoiceDetailBean getContributorDetails
  3728.         (RegHospInvoiceDetailBean detailsBean)throws GOSIException
  3729.     {
  3730.         PreparedStatement ps = null;
  3731.         ResultSet rs= null;
  3732.         try
  3733.         {
  3734.             // Query to get injury details for each invoice detail
  3735.             String sqlQuery = "select b.SOCIALINSURANCENUMBER, "+
  3736.                 " d.firstname || ' ' || NVL(d.secondname,'')|| ' ' || "+
  3737.             " NVL(d.thirdname,'')||' ' || NVL(d.surname,'') CONTRIBUTORNAME "+
  3738.                 " from "+ SITables.T_CONTRIBUTOR +" b, "+
  3739.                   SITables.T_PERSON + " d "+
  3740.                 " where "+
  3741.                 " b.SOCIALINSURANCENUMBER = ? "+
  3742.                 " and b.PERSONID = d.PERSONID ";
  3743.                
  3744.             GOSIDebug.debugMessages("SqlQuery:\n"+sqlQuery);
  3745.             ps = con.prepareStatement(sqlQuery);
  3746.             ps.setLong(1,detailsBean.getSocInsNumber().longValue());
  3747.             rs = ps.executeQuery();
  3748.             while (rs.next())
  3749.             {
  3750.                 detailsBean.setSocInsNumber(new Long(rs.getLong("SOCIALINSURANCENUMBER")));
  3751.                 detailsBean.setName(rs.getString("CONTRIBUTORNAME"));
  3752.             }
  3753.             return detailsBean;
  3754.                
  3755.         }
  3756.         catch (Exception e)
  3757.         {
  3758.             throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  3759.                 GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  3760.                 "getContributorDetails()",e,"CMN_ERR_1000");
  3761.         }
  3762.         finally
  3763.         {
  3764.             GOSIUtilities.cleanUp(ps,rs);
  3765.         }
  3766.     }
  3767.  
  3768.     /**
  3769.     * @METHOD NAME              :   saveInvoiceServiceDetails
  3770.     * @INFORMATION              :   This method is save the entered invoice service details for the invoice header
  3771.     * @PARAM                    :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceDetailBean
  3772.     * @RETURN                   :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceDetailBean
  3773.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  3774.     * @LAST MODIFIED BY         :  
  3775.     * @LAST MODIFIED DATE       :  
  3776.     **/
  3777.  
  3778.     public String saveInvoiceServiceDetails(RegHospInvoiceDetailBean invoiceDetailBean,
  3779.         DMSRequestHeaderBean dmsHeaderBean)throws GOSIException
  3780.     {
  3781.  
  3782.         PreparedStatement ps = null;
  3783.         ResultSet rs= null;
  3784.         String message = "";
  3785.         try
  3786.         {
  3787.             GOSIDebug.debugMessages("Starting saveInvoiceServiceDetails - MaintainRegHospitalInvoiceSessionEJB");
  3788.  
  3789.             String sqlQuery  = "";
  3790.             Long userId = null;
  3791.             if(invoiceDetailBean.getMode()==invoiceDetailBean.NEW_MODE)
  3792.             {
  3793.                 userId = invoiceDetailBean.getCreatedBy();
  3794.             }else
  3795.             {
  3796.                 userId = invoiceDetailBean.getLastModifiedBy();
  3797.             }
  3798.             Timestamp currentDate = new Timestamp(System.currentTimeMillis());
  3799.  
  3800.            
  3801.             GOSIDebug.debugMessages("Service Type:"+invoiceDetailBean.getServiceType());
  3802.  
  3803.             con = GOSIUtilities.getConnection(GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  3804.             if(OHConstants.SERVICE_TYPE_TRMT.equals(invoiceDetailBean.getServiceType()))
  3805.             {
  3806.                 sqlQuery  = "select INJURYID from "
  3807.                 + SITables.T_INJURY
  3808.                 + " where SOCINSNUMBER = ? and "
  3809.                 + " INJURYDATE = ? and "
  3810.                 + " INJURYSTATUS not in (?,?,?) and "
  3811.                 + " DATECOMPLICATION IS NULL "
  3812.                 + " ORDER BY INJURYID DESC ";
  3813.                 ps = con.prepareStatement(sqlQuery);
  3814.                 ps.setLong(1,invoiceDetailBean.getSocInsNumber().longValue());
  3815.                 ps.setTimestamp(2,invoiceDetailBean.getInjuryDate());
  3816.                 ps.setShort(3,OHConstants.INJ_STS_FIRST_NOTIFIED.shortValue());
  3817.                 ps.setShort(4,OHConstants.INJ_STS_NOTIFIED.shortValue());
  3818.                 ps.setShort(5,OHConstants.INJ_STS_CANCELLED.shortValue());
  3819.                
  3820.                 GOSIDebug.debugMessages("SqlQuery :" + sqlQuery + ":");
  3821.                 GOSIDebug.debugMessages("\t\t Param 1 :" + invoiceDetailBean.getSocInsNumber().longValue() + ":");
  3822.                 GOSIDebug.debugMessages("\t\t Param 2 :" + invoiceDetailBean.getInjuryDate() + ":");
  3823.                 GOSIDebug.debugMessages("\t\t Param 3 :" + OHConstants.INJ_STS_FIRST_NOTIFIED.shortValue() + ":");
  3824.                 GOSIDebug.debugMessages("\t\t Param 4 :" + OHConstants.INJ_STS_NOTIFIED.shortValue() + ":");
  3825.                 GOSIDebug.debugMessages("\t\t Param 5 :" + OHConstants.INJ_STS_CANCELLED.shortValue() + ":");
  3826.                 rs = ps.executeQuery();
  3827.                 if(rs.next())
  3828.                 {
  3829.                     invoiceDetailBean.setInjuryId(new Long(rs.getLong("INJURYID")));
  3830.                 }else
  3831.                 {
  3832.                     invoiceDetailBean.setInjuryId(null);
  3833.                     //SOI_ERR_4531
  3834.                     throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  3835.                         GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  3836.                         "saveInvoiceServiceDetails()",null,"SOI_ERR_5203");  
  3837.                 }
  3838.                 GOSIDebug.debugMessages("================>>>>invoiceDetailBean.getTrmtStartDate():" + invoiceDetailBean.getTrmtStartDate() + ":");
  3839.                 if(null!= invoiceDetailBean.getTrmtStartDate() && invoiceDetailBean.getInjuryDate().after
  3840.                     (invoiceDetailBean.getTrmtStartDate()))
  3841.                 {
  3842.                     throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  3843.                         GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  3844.                         "saveInvoiceServiceDetails()",null,"SOI_ERR_4025");  
  3845.                 }
  3846.             }else
  3847.             if(OHConstants.SERVICE_TYPE_DISB_TRMT.equals(invoiceDetailBean.getServiceType()))
  3848.             {
  3849.                 sqlQuery  = "select SCHEDULEID from "
  3850.                 + SITables.T_DISBASSMT
  3851.                 + " where SOCIALINSURANCENUMBER = ? and ASSESSMENTDATE = ? ";
  3852.                 ps = con.prepareStatement(sqlQuery);
  3853.                 ps.setLong(1,invoiceDetailBean.getSocInsNumber().longValue());
  3854.                 ps.setTimestamp(2,invoiceDetailBean.getInjuryDate());
  3855.                 rs = ps.executeQuery();
  3856.                 if(rs.next())
  3857.                 {
  3858.                     invoiceDetailBean.setDisbAssmtId(new Long(rs.getLong("SCHEDULEID")));
  3859.                 }else
  3860.                 {
  3861.                     invoiceDetailBean.setDisbAssmtId(null);
  3862.                     throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  3863.                         GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  3864.                         "saveInvoiceServiceDetails()",null,"SOI_ERR_4146");  
  3865.                 }
  3866.             }else
  3867.             if(OHConstants.SERVICE_TYPE_COMPLICATION_TRMT.equals(invoiceDetailBean.getServiceType()))
  3868.             {
  3869.                 sqlQuery  = "select INJURYID from "
  3870.                 + SITables.T_INJURY
  3871.                 + " where SOCINSNUMBER = ? and "
  3872.                 + " DATECOMPLICATION = ? and "
  3873.                 + " INJURYSTATUS not in (?,?,?) "
  3874.                 + " ORDER BY INJURYID DESC ";
  3875.                 ps = con.prepareStatement(sqlQuery);
  3876.                 ps.setLong(1,invoiceDetailBean.getSocInsNumber().longValue());
  3877.                 ps.setTimestamp(2,invoiceDetailBean.getInjuryDate());
  3878.                 ps.setShort(3,OHConstants.INJ_STS_FIRST_NOTIFIED.shortValue());
  3879.                 ps.setShort(4,OHConstants.INJ_STS_NOTIFIED.shortValue());
  3880.                 ps.setShort(5,OHConstants.INJ_STS_CANCELLED.shortValue());
  3881.                 rs = ps.executeQuery();
  3882.                 if(rs.next())
  3883.                 {
  3884.                     invoiceDetailBean.setInjuryId(new Long(rs.getLong("INJURYID")));
  3885.                 }else
  3886.                 {
  3887.                     invoiceDetailBean.setInjuryId(null);
  3888.                     //SOI_ERR_4531
  3889.                     throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  3890.                         GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  3891.                         "saveInvoiceServiceDetails()",null,"SOI_ERR_5203");  
  3892.                 }
  3893.                 if(null!= invoiceDetailBean.getTrmtStartDate() && invoiceDetailBean.getInjuryDate().after
  3894.                     (invoiceDetailBean.getTrmtStartDate()))
  3895.                 {
  3896.                     throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  3897.                         GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  3898.                         "saveInvoiceServiceDetails()",null,"SOI_ERR_4025");  
  3899.                 }
  3900.             }
  3901.             else
  3902.             {
  3903.             }
  3904.             // checking the validation of the treatment dates
  3905.             if(invoiceDetailBean.getTrmtStartDate()!= null &&
  3906.                     invoiceDetailBean.getTrmtEndDate()!= null)
  3907.             {
  3908.                 if(invoiceDetailBean.getTrmtStartDate().after
  3909.                     (invoiceDetailBean.getTrmtEndDate()))
  3910.                 {
  3911.                     throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  3912.                         GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  3913.                         "saveInvoiceServiceDetails()",null,"SOI_ERR_4024");  
  3914.                 }
  3915.                 if(invoiceDetailBean.getTrmtStartDate().after
  3916.                     (currentDate))
  3917.                 {
  3918.                     throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  3919.                         GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  3920.                         "saveInvoiceServiceDetails()",null,"SOI_ERR_5198");  
  3921.                 }
  3922.                 if(invoiceDetailBean.getTrmtEndDate().after
  3923.                     (currentDate))
  3924.                 {
  3925.                     throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  3926.                         GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  3927.                         "saveInvoiceServiceDetails()",null,"SOI_ERR_5199");  
  3928.                 }
  3929.                 if(!invoiceDetailBean.getStatus().equals(OHConstants.REG_HOSP_INVC_DETAILS_CANCELLED)&&(OHConstants.SERVICE_TYPE_COMPLICATION_TRMT.equals(invoiceDetailBean.getServiceType())
  3930.                 ||OHConstants.SERVICE_TYPE_TRMT.equals(invoiceDetailBean.getServiceType())))
  3931.                 {
  3932.                     if(invoiceDetailBean.getMode()==invoiceDetailBean.NEW_MODE)
  3933.                     {
  3934.                         sqlQuery = " select STATUS from "
  3935.                             + SITables.T_REGHOSPINVOICEDET
  3936.                             + " where INJURYID = ? "
  3937.                             + " and STATUS != ? and "
  3938.                             + " TRMTSTARTDATE <= ? AND TRMTENDDATE >= ?  ";
  3939.                         ps = con.prepareStatement(sqlQuery);
  3940.                         ps.setLong(1,invoiceDetailBean.getInjuryId().longValue());
  3941.                         ps.setShort(2,OHConstants.REG_HOSP_INVC_DETAILS_CANCELLED.shortValue());
  3942.                         ps.setTimestamp(3,invoiceDetailBean.getTrmtEndDate());
  3943.                         ps.setTimestamp(4,invoiceDetailBean.getTrmtStartDate());
  3944.                         rs = ps.executeQuery();
  3945.                         if(rs.next())
  3946.                         {  
  3947.                             throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  3948.                                         GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  3949.                                         "saveInvoiceServiceDetails()",null,"SOI_ERR_5903");  
  3950.                         }
  3951.                     }
  3952.                     else if(invoiceDetailBean.getMode()==invoiceDetailBean.MODIFY_MODE) {
  3953.                         sqlQuery = " select STATUS,TRMTSTARTDATE,TRMTENDDATE, TRMTENDDATEENTFMT, TRMTSTARTDATEENTFMT  from "
  3954.                             + SITables.T_REGHOSPINVOICEDET
  3955.                             + " where INJURYID = ? "
  3956.                             + " and STATUS != ? and "
  3957.                             + " TRMTSTARTDATE <= ? AND TRMTENDDATE >= ?  ";
  3958.                         ps = con.prepareStatement(sqlQuery);
  3959.                         ps.setLong(1,invoiceDetailBean.getInjuryId().longValue());
  3960.                         ps.setShort(2,OHConstants.REG_HOSP_INVC_DETAILS_CANCELLED.shortValue());
  3961.                         ps.setTimestamp(3,invoiceDetailBean.getTrmtEndDate());
  3962.                         ps.setTimestamp(4,invoiceDetailBean.getTrmtStartDate());
  3963.                         rs = ps.executeQuery();
  3964.                         Timestamp trmtEndDate=null;
  3965.                         String trmtEndDateEntFmt= "";
  3966.                         String trmtEndDateStr ="";
  3967.                         Timestamp trmtStartDate=null;
  3968.                         String trmtStartDateEntFmt= "";
  3969.                         String trmtStartDateStr ="";
  3970.                         boolean canModify=true;
  3971.                         while(rs.next())
  3972.                         {  
  3973.                             trmtStartDate=rs.getTimestamp("TRMTSTARTDATE");
  3974.                             trmtStartDateEntFmt= rs.getString("TRMTSTARTDATEENTFMT");
  3975.                             trmtStartDateStr =OHUtilities.getDateStr(trmtStartDate, trmtStartDateEntFmt);
  3976.                             trmtEndDate=rs.getTimestamp("TRMTENDDATE");
  3977.                             trmtEndDateEntFmt= rs.getString("TRMTENDDATEENTFMT");
  3978.                             trmtEndDateStr =OHUtilities.getDateStr(trmtEndDate, trmtEndDateEntFmt);
  3979.                            
  3980.                             if(invoiceDetailBean.getTrmtStartDateStr().equals(trmtStartDateStr)
  3981.                                     && invoiceDetailBean.getTrmtEndDateStr().equals(trmtEndDateStr))
  3982.                             {
  3983.                                  canModify=true;
  3984.                                  break;
  3985.                             }
  3986.                             else
  3987.                                  canModify=false;
  3988.                         }
  3989.                         if(!canModify){
  3990.                             throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  3991.                                     GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  3992.                                     "saveInvoiceServiceDetails()",null,"SOI_ERR_5903");
  3993.                         }
  3994.                        
  3995.                     }
  3996.                     sqlQuery  = "select TREATMENTSTATUS,HOSPITALCODE, STARTDATE, ENDDATE from "
  3997.                             + SITables.T_TREATMENT
  3998.                             + " where INJURYID = ? and "
  3999.                             + " STARTDATE <= ? AND ENDDATE >= ? AND TREATMENTSTATUS <> ?" +
  4000.                                     " ORDER BY STARTDATE asc ";
  4001.                     GOSIDebug.debugMessages("sqlQuery : "+sqlQuery);
  4002.                     ps = con.prepareStatement(sqlQuery);
  4003.                     ps.setLong(1,invoiceDetailBean.getInjuryId().longValue());
  4004.                     ps.setTimestamp(2,invoiceDetailBean.getTrmtEndDate());
  4005.                     ps.setTimestamp(3,invoiceDetailBean.getTrmtStartDate());
  4006.                     ps.setShort(4,OHConstants.TRMT_STS_CANCELLED);
  4007.                     rs = ps.executeQuery();
  4008.                     Timestamp startDate=null;
  4009.                     Timestamp endDate=null;
  4010.                     if(rs.next())
  4011.                     {
  4012.                         do
  4013.                         {
  4014.                             Long hospitalCode = rs.getLong("HOSPITALCODE");
  4015.                             Short treatmentStatus=rs.getShort("TREATMENTSTATUS");
  4016.                             Timestamp startDateTemp=rs.getTimestamp("STARTDATE");
  4017.                             Timestamp endDateTemp=rs.getTimestamp("ENDDATE");
  4018.                            
  4019.                             if(!hospitalCode.equals(invoiceDetailBean.getHospitalCode()))
  4020.                             {
  4021.                                 throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  4022.                                         GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  4023.                                         "saveInvoiceServiceDetails()",null,"SOI_ERR_5904");  
  4024.                             }
  4025.                             if(!treatmentStatus.equals(OHConstants.TRMT_STS_APPROVED))
  4026.                             {
  4027.                                 throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  4028.                                         GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  4029.                                         "saveInvoiceServiceDetails()",null,"SOI_ERR_5905");  
  4030.                             }
  4031.                             if(endDate!=null && !endDate.equals(OHUtilities.getPrevDate(startDateTemp)))
  4032.                             {
  4033.                                 // there exist gap
  4034.                                 throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  4035.                                         GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  4036.                                         "saveInvoiceServiceDetails()",null,"SOI_ERR_5906");
  4037.                             }
  4038.                             if (startDate==null)
  4039.                                 startDate=startDateTemp;
  4040.                             endDate=endDateTemp;
  4041.                            
  4042.                         }while (rs.next()); // end will
  4043.                        
  4044.                         if (invoiceDetailBean.getTrmtStartDate().before(startDate)
  4045.                                 || invoiceDetailBean.getTrmtEndDate().after(endDate))
  4046.                         {
  4047.                             throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  4048.                                     GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  4049.                                     "saveInvoiceServiceDetails()",null,"SOI_ERR_5906");  
  4050.                         }
  4051.                     }
  4052.                     else
  4053.                     {
  4054.                             throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  4055.                                     GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  4056.                                     "saveInvoiceServiceDetails()",null,"SOI_ERR_5906");  
  4057.                     }
  4058.                 }
  4059.             }
  4060.  
  4061.  
  4062.             RegHospitalInvoiceDetailEntityHome detailsHome= (RegHospitalInvoiceDetailEntityHome)
  4063.                 ServiceLocator.getInstance().getRemoteHome(
  4064.                 OHConstants.REG_HOSP_INVOICE_DETAILS_ENTITY_JNDI,
  4065.                 RegHospitalInvoiceDetailEntityHome.class);
  4066.  
  4067.  
  4068.             if(invoiceDetailBean.getMode()==invoiceDetailBean.NEW_MODE)
  4069.             {
  4070.                 message = isInvoiceDetailAlreadyPresent(invoiceDetailBean);
  4071.                 Long primaryKey= GOSIUtilities.getPrimaryKey("T_REGHOSPINVOICEDET",userId);
  4072.                 invoiceDetailBean.setInvoiceDetailsId(primaryKey);
  4073.                 invoiceDetailBean.setCreationTimestamp(currentDate);
  4074.                 if(message != null && !message.equals(""))
  4075.                 {
  4076.                     invoiceDetailBean.setStatus(OHConstants.REG_HOSP_INVC_DETAILS_CANCELLED);
  4077.                 }
  4078.                 detailsHome.create(invoiceDetailBean);
  4079.             }else
  4080.             {
  4081.                 RegHospitalInvoiceDetailEntity detailsRemote = detailsHome.
  4082.                     findByPrimaryKey(invoiceDetailBean.getInvoiceDetailsId());
  4083.                 invoiceDetailBean.setLastModifiedTimestamp(currentDate);
  4084.                 detailsRemote.modifyRegHospitalInvoiceDetails(invoiceDetailBean);
  4085.             }
  4086.             if(dmsHeaderBean != null)
  4087.             {
  4088.                 dmsHeaderBean.setSourceRecordId
  4089.                     ("" + invoiceDetailBean.getInvoiceDetailsId());
  4090.                 dmsHeaderBean.
  4091.                     setSourceTable(SITables.T_REGHOSPINVOICEDET);
  4092.                 dmsHeaderBean.setCreatedBy(userId);
  4093.                 dmsHeaderBean.setKeyList(DMSConstants.HOSPITAL_INVOICE_NUMBER,
  4094.                     ""+invoiceDetailBean.getInvoiceNumber());
  4095.                 dmsHeaderBean.setKeyList(DMSConstants.SI_NUMBER,
  4096.                     ""+invoiceDetailBean.getSocInsNumber());
  4097.                 DMSUtilities.startDMS(dmsHeaderBean);
  4098.             }
  4099.         }
  4100.         catch (GOSIException ge)
  4101.         {
  4102.             ctx.setRollbackOnly();
  4103.             throw ge;
  4104.         }
  4105.         catch (Exception e)
  4106.         {
  4107.             ctx.setRollbackOnly();
  4108.             throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  4109.                 GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  4110.                 "saveInvoiceServiceDetails()",e,"CMN_ERR_1000");  
  4111.  
  4112.         }
  4113.         finally
  4114.         {
  4115.             GOSIUtilities.cleanUp(con,ps,rs);
  4116.         }
  4117.         GOSIDebug.debugMessages("Ending saveInvoiceServiceDetails - MaintainRegHospitalInvoiceSessionEJB");
  4118.         return message;
  4119.     }
  4120.  
  4121.     /**
  4122.     * @METHOD NAME              :   saveInvoiceDetailsPage
  4123.     * @INFORMATION              :   This method is save the entered invoice service details for a page
  4124.     * @PARAM                    :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceDetailBean
  4125.     * @RETURN                   :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceDetailBean
  4126.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  4127.     * @LAST MODIFIED BY         :  
  4128.     * @LAST MODIFIED DATE       :  
  4129.     **/
  4130.    
  4131.     public String saveInvoiceDetailsPage(RegHospInvoiceHeaderBean headerBean,
  4132.         ArrayList detailsList,WorkflowParamBean workflowParamBean,
  4133.             DMSRequestHeaderBean dmsHeaderBean)throws GOSIException
  4134.     {
  4135.         String message;
  4136.         try
  4137.         {
  4138.             Long pageNumber = null;
  4139.             Long userId = new Long(workflowParamBean.getUserId());
  4140.             Timestamp currentTime = new Timestamp(System.currentTimeMillis());
  4141.             Short invoiceDetailStatus = null;
  4142.             if("RH_APPROVE_INVOICE_DETAIL_INT_AUD_CLK".equals
  4143.                 (workflowParamBean.getStepShortName()) &&
  4144.                 GOSIConstants.COMPLETED.equals(workflowParamBean.getRoutingCriterion()))
  4145.             {
  4146.                 invoiceDetailStatus = OHConstants.REG_HOSP_INVC_DETAILS_APPROVED;
  4147.             }else if("RH_REENTER_INVOICE_DETAIL".equals
  4148.                 (workflowParamBean.getStepShortName()) &&
  4149.                 GOSIConstants.CANCELLED.equals(workflowParamBean.getRoutingCriterion()))
  4150.             {
  4151.                 invoiceDetailStatus = OHConstants.REG_HOSP_INVC_DETAILS_CANCELLED;
  4152.             }
  4153.             else
  4154.             {
  4155.                 invoiceDetailStatus = OHConstants.REG_HOSP_INVC_DETAILS_IN_WORKFLOW;
  4156.             }
  4157.             RegHospitalInvoiceDetailEntityHome detailsHome= (RegHospitalInvoiceDetailEntityHome)
  4158.                 ServiceLocator.getInstance().getRemoteHome(
  4159.                 OHConstants.REG_HOSP_INVOICE_DETAILS_ENTITY_JNDI,
  4160.                 RegHospitalInvoiceDetailEntityHome.class);
  4161.  
  4162.             for (int i=0;i<detailsList.size() ;i++ )
  4163.             {
  4164.                 RegHospInvoiceDetailBean invoiceDetailBean =
  4165.                     (RegHospInvoiceDetailBean)detailsList.get(i);
  4166.                 invoiceDetailBean.setStatus(invoiceDetailStatus);
  4167.                 invoiceDetailBean.setLastModifiedBy(userId);
  4168.                 invoiceDetailBean.setLastModifiedTimestamp(currentTime);
  4169.                 if(headerBean.getRoutingFlag()!= null)
  4170.                 {
  4171.                     invoiceDetailBean.setRoutingCriteria(headerBean.getRoutingFlag());
  4172.                 }
  4173.                 pageNumber = invoiceDetailBean.getPageNumber();
  4174.                 RegHospitalInvoiceDetailEntity detailsRemote = detailsHome.
  4175.                     findByPrimaryKey(invoiceDetailBean.getInvoiceDetailsId());
  4176.                 invoiceDetailBean.setLastModifiedTimestamp(currentTime);
  4177.                 detailsRemote.modifyRegHospitalInvoiceDetails(invoiceDetailBean);
  4178.             }
  4179.             String primaryKey = headerBean.getInvoiceHeaderId()+"~"+pageNumber;
  4180.             if(dmsHeaderBean != null)
  4181.             {
  4182.                 dmsHeaderBean.setSourceRecordId(primaryKey);
  4183.                 dmsHeaderBean.setSourceTable(SITables.T_REGHOSPINVOICEDET);
  4184.                 dmsHeaderBean.setCreatedBy(userId);
  4185.                 dmsHeaderBean.setKeyList(DMSConstants.HOSPITAL_INVOICE_NUMBER,
  4186.                     ""+headerBean.getInvoiceNumber());
  4187.                 dmsHeaderBean.setKeyList("Page Number",
  4188.                     ""+pageNumber);
  4189.                 DMSUtilities.startDMS(dmsHeaderBean);
  4190.             }
  4191.             workflowParamBean.setPrimaryKeyOfTherecord(primaryKey);
  4192.             GOSIDebug.debugMessages("completedStep"+workflowParamBean.getStepShortName());
  4193.             GOSIDebug.debugMessages("routingCriteria"+workflowParamBean.getRoutingCriterion());
  4194.             String userName = GOSIUtilities.startWorkflow(workflowParamBean);
  4195.  
  4196.  
  4197.             if(null != userName && !"".equals(userName))
  4198.             {
  4199.                 message = GOSIErrorMessages.getErrorDesc("SOI_ERR_5502")+":"+userName;
  4200.             }else
  4201.             {
  4202.                 message = GOSIErrorMessages.getErrorDesc("SOI_ERR_1007");
  4203.             }
  4204.         }
  4205.         catch (GOSIException ge)
  4206.         {
  4207.             ctx.setRollbackOnly();
  4208.             throw ge;
  4209.         }
  4210.         catch (Exception e)
  4211.         {
  4212.             ctx.setRollbackOnly();
  4213.             throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  4214.                 GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  4215.                 "saveInvoiceDetailsPage()",e,"CMN_ERR_1000");  
  4216.  
  4217.         }  
  4218.         return message;
  4219.  
  4220.     }
  4221.  
  4222.     /**
  4223.     * @METHOD NAME              :   calculateRegHospitalInvoice
  4224.     * @INFORMATION              :   This method is to calculate the hospital invoice.
  4225.     * @PARAM                    :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceDetailBean
  4226.     * @RETURN                   :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceDetailBean
  4227.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  4228.     * @LAST MODIFIED BY         :  
  4229.     * @LAST MODIFIED DATE       :  
  4230.     **/
  4231.    
  4232.     public RegHospInvoiceHeaderBean calculateRegHospitalInvoice(
  4233.         RegHospInvoiceHeaderBean headerBean)throws GOSIException
  4234.     {
  4235.         try
  4236.         {
  4237.             HashMap details = searchRegHospitalInvoice(headerBean.getInvoiceHeaderId());
  4238.             if(details.get("headerBean")!= null)
  4239.             {
  4240.                 headerBean = (RegHospInvoiceHeaderBean)details.get("headerBean");
  4241.                 headerBean = getHospitalDetails(headerBean);
  4242.             }
  4243.             con = GOSIUtilities.getConnection(GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  4244.             ArrayList discountList = getDiscountList(headerBean.getHospitalCode(),
  4245.                 headerBean.getFieldOffice());
  4246.  
  4247.            
  4248.             double medicineAmount = 0.00;
  4249.             double serviceAmount =  0.00;
  4250.             double noDiscountAmount = 0.00;
  4251.             double rejectedAmount = 0.00;
  4252.             double discountAmount = 0.00;
  4253.  
  4254.             if(headerBean.getMedicinesAmount()!= null)
  4255.             {
  4256.                 medicineAmount = headerBean.getMedicinesAmount().doubleValue();
  4257.             }
  4258.             if(headerBean.getRejectedMedicineAmount()!= null)
  4259.             {
  4260.                 medicineAmount = medicineAmount - headerBean.
  4261.                     getRejectedMedicineAmount().doubleValue();
  4262.                 rejectedAmount = headerBean.
  4263.                     getRejectedMedicineAmount().doubleValue();
  4264.             }
  4265.  
  4266.             if(headerBean.getServicesAmount()!= null)
  4267.             {
  4268.                 serviceAmount = headerBean.getServicesAmount().doubleValue();
  4269.             }
  4270.             if(headerBean.getRejectedServiceAmount()!= null)
  4271.             {
  4272.                 serviceAmount = serviceAmount - headerBean.
  4273.                     getRejectedServiceAmount().doubleValue();
  4274.  
  4275.                 rejectedAmount = rejectedAmount +headerBean.
  4276.                     getRejectedServiceAmount().doubleValue();
  4277.             }
  4278.  
  4279.             if(headerBean.getNoDiscountAmount()!= null)
  4280.             {
  4281.                 noDiscountAmount = headerBean.getNoDiscountAmount().doubleValue();
  4282.             }
  4283.             if(headerBean.getRejectedNoDiscountAmount()!= null)
  4284.             {
  4285.                 noDiscountAmount = noDiscountAmount - headerBean.
  4286.                     getRejectedNoDiscountAmount().doubleValue();
  4287.                
  4288.                 rejectedAmount = rejectedAmount +headerBean.
  4289.                     getRejectedNoDiscountAmount().doubleValue();
  4290.  
  4291.             }          
  4292.            
  4293.             GOSIDebug.debugMessages("medicineAmount     :"+medicineAmount);
  4294.             GOSIDebug.debugMessages("serviceAmount      :"+serviceAmount);
  4295.             GOSIDebug.debugMessages("noDiscountAmount   :"+noDiscountAmount);
  4296.             // apply discount for medicine
  4297.             if(medicineAmount!=0.00)
  4298.             {
  4299.                 discountAmount = getDiscountAmount(discountList,
  4300.                     medicineAmount,OHConstants.DISC_MEDICINES);
  4301.             }
  4302.             // apply discount for service
  4303.             if(serviceAmount!=0.00)
  4304.             {
  4305.                 discountAmount =discountAmount +
  4306.                     getDiscountAmount(discountList,serviceAmount,
  4307.                         OHConstants.DISC_SERVICES);
  4308.             }
  4309.             double totalAmount = medicineAmount+serviceAmount+noDiscountAmount;
  4310.  
  4311.             GOSIDebug.debugMessages("totalAmount        :"+totalAmount);
  4312.             GOSIDebug.debugMessages("rejectedAmount     :"+rejectedAmount);
  4313.             GOSIDebug.debugMessages("discountAmount     :"+discountAmount);
  4314.  
  4315.             headerBean.setDiscountAmount(new Double(GOSIUtilities.roundToPrecision(discountAmount, FAInterfaceConstants.LC_CURRENCY)));
  4316.             headerBean.setRejectedAmount(new Double(GOSIUtilities.roundToPrecision(rejectedAmount, FAInterfaceConstants.LC_CURRENCY)));
  4317.         }
  4318.         catch (GOSIException ge)
  4319.         {
  4320.             throw ge;
  4321.         }
  4322.         catch (Exception e)
  4323.         {
  4324.             throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  4325.                 GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  4326.                 "calculateRegHospitalInvoice()",e,"CMN_ERR_1000");  
  4327.  
  4328.         }
  4329.         finally
  4330.         {
  4331.             // this connection is used for getting the discount details
  4332.             // all the other methods used in here has its on connection.
  4333.             GOSIUtilities.cleanUp(con);
  4334.         }
  4335.         return headerBean;
  4336.     }
  4337.  
  4338.     /**
  4339.     * @METHOD NAME              :   canSendHeaderToWorkflow
  4340.     * @INFORMATION              :   This method is to check if there is any unapproved details for the invoice header
  4341.     * @PARAM                    :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceDetailBean
  4342.     * @RETURN                   :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceDetailBean
  4343.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  4344.     * @LAST MODIFIED BY         :  
  4345.     * @LAST MODIFIED DATE       :  
  4346.     **/
  4347.     public boolean canSendHeaderToWorkflow(
  4348.         RegHospInvoiceHeaderBean headerBean)throws GOSIException
  4349.     {
  4350.         PreparedStatement ps = null;
  4351.         ResultSet rs = null;
  4352.         boolean canSendHeaderToWorkflow = true;
  4353.         try
  4354.         {
  4355.             String errorPage = "";
  4356.             String sqlQuery = " select distinct(PAGENUMBER) PAGENUMBER from "
  4357.                 + SITables.T_REGHOSPINVOICEDET
  4358.                 + " where "
  4359.                 + " INVOICEHEADERID = ? "
  4360.                 + " and STATUS in (?,?) "
  4361.                 + " order by PAGENUMBER ";
  4362.             con = GOSIUtilities.getConnection(GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  4363.             ps = con.prepareStatement(sqlQuery);
  4364.             ps.setLong(1,headerBean.getInvoiceHeaderId().longValue());
  4365.             ps.setShort(2,OHConstants.REG_HOSP_INVC_DETAILS_ENTERED.shortValue());
  4366.             ps.setShort(3,OHConstants.REG_HOSP_INVC_DETAILS_IN_WORKFLOW.shortValue());
  4367.             ps.setMaxRows(5);
  4368.             rs = ps.executeQuery();
  4369.             while(rs.next())
  4370.             {
  4371.                 canSendHeaderToWorkflow = false;
  4372.                 if("".equals(errorPage))
  4373.                 {
  4374.                     errorPage = rs.getString("PAGENUMBER");
  4375.                 }else
  4376.                 {
  4377.                     errorPage = errorPage+","+rs.getString("PAGENUMBER");
  4378.                 }
  4379.             }
  4380.             if(!canSendHeaderToWorkflow)
  4381.             {
  4382.                 String message = GOSIErrorMessages.getErrorDesc("SOI_ERR_5572")+
  4383.                     " :"+errorPage;
  4384.                 throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  4385.                     GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  4386.                     "canSendHeaderToWorkflow()",message,null,"CMN_ERR_1000");  
  4387.             }
  4388.             sqlQuery = " select INVOICEHEADERID from "
  4389.                 + SITables.T_REGHOSPINVOICEDET
  4390.                 + " where "
  4391.                 + " INVOICEHEADERID = ? "
  4392.                 + " and STATUS != ? ";
  4393.  
  4394.             ps = con.prepareStatement(sqlQuery);
  4395.             ps.setLong(1,headerBean.getInvoiceHeaderId().longValue());
  4396.             ps.setShort(2,OHConstants.REG_HOSP_INVC_DETAILS_CANCELLED.shortValue());
  4397.             ps.setMaxRows(1);
  4398.             rs = ps.executeQuery();
  4399.             if(rs.next())
  4400.             {
  4401.                 canSendHeaderToWorkflow = true;
  4402.             }else
  4403.             {
  4404.                 canSendHeaderToWorkflow = false;
  4405.             }
  4406.             if(!canSendHeaderToWorkflow)
  4407.             {
  4408.                 throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  4409.                     GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  4410.                     "canSendHeaderToWorkflow()",null,"SOI_ERR_5111");  
  4411.             }
  4412.             return canSendHeaderToWorkflow;
  4413.         }
  4414.         catch (GOSIException ge)
  4415.         {
  4416.             throw ge;
  4417.         }
  4418.         catch (Exception e)
  4419.         {
  4420.             throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  4421.                 GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  4422.                 "canSendHeaderToWorkflow()",e,"CMN_ERR_1000");  
  4423.  
  4424.         }
  4425.         finally
  4426.         {
  4427.             GOSIUtilities.cleanUp(con,ps,rs);
  4428.  
  4429.         }
  4430.     }
  4431.  
  4432.         /**
  4433.     * @METHOD NAME              :   saveInvoiceHeader
  4434.     * @INFORMATION              :   This method is to save the invoice header befor calculating the invoice
  4435.     * @PARAM                    :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceHeaderBean
  4436.     * @RETURN                   :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceHeaderBean
  4437.     * @EXCEPTION                :   class gosi.core.util.GOSIException,
  4438.                                     class java.rmi.RemoteException
  4439.     * @LAST MODIFIED BY         :  
  4440.     * @LAST MODIFIED DATE       :  
  4441.     **/
  4442.     public String  saveInvoiceHeader
  4443.         (RegHospInvoiceHeaderBean headerBean,DMSRequestHeaderBean dmsHeaderBean,
  4444.             WorkflowParamBean workflowParamBean) throws GOSIException
  4445.     {
  4446.         String message = "";
  4447.         try
  4448.         {
  4449.             con = GOSIUtilities.getConnection (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  4450.            
  4451.             Long userId = new Long(workflowParamBean.getUserId());
  4452.             Timestamp currentTime = new Timestamp(System.currentTimeMillis());
  4453.             Short invoiceStatus = null;
  4454.             if("RH_APPROVE_INVOICE_INT_AUD_CLK".equals
  4455.                 (workflowParamBean.getStepShortName()) &&
  4456.                 GOSIConstants.COMPLETED.equals(workflowParamBean.getRoutingCriterion()))
  4457.             {
  4458.                 invoiceStatus = OHConstants.REG_HOSP_INVC_APPROVED;
  4459.             }else if("RH_REENTER_INVOICE".equals
  4460.                 (workflowParamBean.getStepShortName()) &&
  4461.                 GOSIConstants.CANCELLED.equals(workflowParamBean.getRoutingCriterion()))
  4462.             {
  4463.                 invoiceStatus = OHConstants.REG_HOSP_INVC_CANCELLED;
  4464.             }
  4465.             else
  4466.             {
  4467.                 invoiceStatus = OHConstants.REG_HOSP_INVC_ENTERED;
  4468.             }
  4469.             headerBean.setInvoiceStatus(invoiceStatus);
  4470.             headerBean.setLastModifiedBy(userId);
  4471.             headerBean.setLastModifiedTimestamp(currentTime);
  4472.            
  4473.             if (! isInvoiceFileNumberUnique (headerBean))
  4474.             {
  4475.                 throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  4476.                                            GOSIConstants.SOCIAL_INSURANCE,
  4477.                                            this.getClass().toString(),
  4478.                                            "saveInvoiceHeader()",
  4479.                                            null,
  4480.                                            "SOI_ERR_5671");
  4481.             }
  4482.  
  4483.             if(headerBean.getInvoiceStatus().equals(OHConstants.REG_HOSP_INVC_APPROVED))
  4484.             {
  4485.                 Long creditNoteId = null;
  4486.                 creditNoteId = interfaceMethod(headerBean,workflowParamBean);
  4487.                 if(creditNoteId != null)
  4488.                 {
  4489.                     headerBean.setJournalHeaderId(creditNoteId);
  4490.                     //Call the batch for recfrom employer                  
  4491.                     GOSIDebug.debugMessages("Parameters Passed to createAutomatedRecoveryBatchRequest");
  4492.                     GOSIDebug.debugMessages("\t Param 1 :" + workflowParamBean.getUserId() + ":");
  4493.                     GOSIDebug.debugMessages("\t Param 2 :" + headerBean.getInvoiceHeaderId() + ":");
  4494.                     GOSIDebug.debugMessages("\t Param 3 :" + OHConstants.RECOVERY_TYPE_REG_HOSP_INVOICE + ":");
  4495.                     Long requestId = createAutomatedRecoveryBatchRequest(
  4496.                                         new Long(workflowParamBean.getUserId()),
  4497.                                         headerBean.getInvoiceHeaderId(),OHConstants.RECOVERY_TYPE_REG_HOSP_INVOICE);
  4498.                     GOSIDebug.debugMessages("Batch RequestId :" + requestId + ":");
  4499.                 }
  4500.             }
  4501.  
  4502.             RegHospitalInvoiceHeaderEntityHome headerHome= (RegHospitalInvoiceHeaderEntityHome)
  4503.                 ServiceLocator.getInstance().getRemoteHome(
  4504.                 OHConstants.REG_HOSP_INVOICE_HEADER_ENTITY_JNDI,
  4505.                 RegHospitalInvoiceHeaderEntityHome.class);
  4506.    
  4507.             RegHospitalInvoiceHeaderEntity headerRemote = headerHome.
  4508.                 findByPrimaryKey(headerBean.getInvoiceHeaderId());
  4509.             headerRemote.modifyRegHospInvoiceHeader(headerBean);
  4510.  
  4511.             if(dmsHeaderBean != null)
  4512.             {
  4513.                 dmsHeaderBean.setSourceRecordId
  4514.                 ("" + headerBean.getInvoiceHeaderId());
  4515.                     dmsHeaderBean.setSourceTable(SITables.T_REGHOSPINVOICEHDR);
  4516.                 dmsHeaderBean.setCreatedBy(userId);
  4517.                 dmsHeaderBean.setKeyList(DMSConstants.HOSPITAL_INVOICE_NUMBER,
  4518.                     ""+headerBean.getInvoiceNumber());
  4519.                 DMSUtilities.startDMS(dmsHeaderBean);
  4520.             }
  4521.             workflowParamBean.setPrimaryKeyOfTherecord(headerBean.
  4522.                 getInvoiceHeaderId().toString());
  4523.             String userName = GOSIUtilities.startWorkflow(workflowParamBean);
  4524.             if(null != userName && !"".equals(userName))
  4525.             {
  4526.                 message = GOSIErrorMessages.getErrorDesc("SOI_ERR_5502")+":"+userName;
  4527.             }else
  4528.             {
  4529.                 message = GOSIErrorMessages.getErrorDesc("SOI_ERR_1007");
  4530.             }
  4531.         }
  4532.         catch (GOSIException ge)
  4533.         {
  4534.             ctx.setRollbackOnly();
  4535.             throw ge;
  4536.         }
  4537.         catch (Exception e)
  4538.         {
  4539.             ctx.setRollbackOnly();
  4540.             throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  4541.                 GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  4542.                 "saveInvoiceHeader()",e,"CMN_ERR_1000");  
  4543.  
  4544.         }
  4545.         finally
  4546.         {
  4547.             GOSIUtilities.cleanUp (con);
  4548.         }
  4549.         return message;
  4550.     }
  4551.  
  4552.     /**
  4553.     * @METHOD NAME              :   isInvoiceFileNumberUnique
  4554.     * @INFORMATION              :   This method is to check if the invoice file number for the specified period is already used or not
  4555.     * @PARAM                    :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceHeaderBean
  4556.     * @RETURN                   :   boolean
  4557.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  4558.     * @LAST MODIFIED BY         :
  4559.     * @LAST MODIFIED DATE       :
  4560.     **/
  4561.     private boolean isInvoiceFileNumberUnique (RegHospInvoiceHeaderBean headerBean) throws GOSIException
  4562.     {
  4563.         boolean  isInvoiceFileNumberUnique  = false;
  4564.  
  4565.         PreparedStatement   ps  = null;
  4566.         ResultSet           rs  = null;
  4567.  
  4568.         try
  4569.         {
  4570.             String  sqlQuery    = "SELECT COUNT (*) AS num_invoices"
  4571.                                 + "  FROM " + SITables.T_REGHOSPINVOICEHDR
  4572.                                 + " WHERE hospitalcode = ? "
  4573.                                 + "   AND fieldoffice = ? "
  4574.                                 + "   AND startdate = ? "
  4575.                                 + "   AND filenumber = ? "
  4576.                                 + "   AND invoicestatus <> ? ";
  4577.  
  4578.             if (headerBean.getInvoiceHeaderId() != null)
  4579.             {
  4580.                 sqlQuery += " AND invoiceheaderid <> ? ";
  4581.             }
  4582.  
  4583.             ps = con.prepareStatement (sqlQuery);
  4584.  
  4585.             ps.setLong      (1, headerBean.getHospitalCode());
  4586.             ps.setShort     (2, headerBean.getFieldOffice());
  4587.             ps.setTimestamp (3, headerBean.getStartDate());
  4588.             ps.setLong      (4, headerBean.getFileNumber());
  4589.             ps.setShort     (5, OHConstants.REG_HOSP_INVC_CANCELLED);
  4590.  
  4591.             if (headerBean.getInvoiceHeaderId() != null)
  4592.             {
  4593.                 ps.setLong (6, headerBean.getInvoiceHeaderId());
  4594.             }
  4595.  
  4596.             rs = ps.executeQuery ();
  4597.  
  4598.             if (rs.next() && rs.getInt("num_invoices") == 0)
  4599.             {
  4600.                 isInvoiceFileNumberUnique = true;
  4601.             }
  4602.         }
  4603.         catch (Exception e)
  4604.         {
  4605.             throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  4606.                                        GOSIConstants.SOCIAL_INSURANCE,
  4607.                                        this.getClass().toString(),
  4608.                                        "isInvoiceFileNumberUnique()",
  4609.                                        e,
  4610.                                        "CMN_ERR_1000");
  4611.         }
  4612.         finally
  4613.         {
  4614.             GOSIUtilities.cleanUp (ps, rs);
  4615.         }
  4616.  
  4617.         return  isInvoiceFileNumberUnique;
  4618.     }
  4619.  
  4620.     /**
  4621.     * @METHOD NAME              :   isInvoiceDetailAlreadyPresent
  4622.     * @INFORMATION              :   This method is to check if the invoice detail is already entered or not
  4623.     * @PARAM                    :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceHeaderBean
  4624.     * @RETURN                   :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceHeaderBean
  4625.     * @EXCEPTION                :   class gosi.core.util.GOSIException,
  4626.                                     class java.rmi.RemoteException
  4627.     * @LAST MODIFIED BY         :  
  4628.     * @LAST MODIFIED DATE       :  
  4629.     **/
  4630.  
  4631.     private String isInvoiceDetailAlreadyPresent(RegHospInvoiceDetailBean invoiceDetailBean)
  4632.         throws GOSIException
  4633.     {
  4634.         PreparedStatement ps = null;
  4635.         ResultSet rs = null;
  4636.         String message = "";
  4637.         try
  4638.         {
  4639.             String sqlQuery = " select distinct(a.PAGENUMBER), "  
  4640.                 + " b.INVOICENUMBER "
  4641.                 + " from "
  4642.                 + SITables.T_REGHOSPINVOICEDET +" a , "
  4643.                 + SITables.T_REGHOSPINVOICEHDR +" b "
  4644.                 + " where a.INVOICEHEADERID = b.INVOICEHEADERID "
  4645.                 + " and a.SOCIALINSURANCENUMBER = ? "
  4646.                 + " and a.STATUS != ? ";
  4647.             if(invoiceDetailBean.getTrmtStartDate() == null)
  4648.             {
  4649.                 sqlQuery = sqlQuery + " and a.TRMTSTARTDATE is null ";
  4650.             }
  4651.             else
  4652.             {
  4653.                 sqlQuery = sqlQuery + " and a.TRMTSTARTDATE = ? ";
  4654.             }
  4655.             if(invoiceDetailBean.getTrmtEndDate() == null)
  4656.             {
  4657.                 sqlQuery = sqlQuery + " and a.TRMTENDDATE is null ";
  4658.             }
  4659.             else
  4660.             {
  4661.                 sqlQuery = sqlQuery + " and a.TRMTENDDATE = ? ";
  4662.             }
  4663.             if(invoiceDetailBean.getServicesAmount() == null)
  4664.             {
  4665.                 sqlQuery = sqlQuery + " and a.SERVICESAMOUNT is null ";
  4666.             }
  4667.             else
  4668.             {
  4669.                 sqlQuery = sqlQuery + " and a.SERVICESAMOUNT = ? ";
  4670.             }
  4671.             if(invoiceDetailBean.getMedicinesAmount() == null)
  4672.             {
  4673.                 sqlQuery = sqlQuery + " and a.MEDICINESAMOUNT is null ";
  4674.             }
  4675.             else
  4676.             {
  4677.                 sqlQuery = sqlQuery + " and a.MEDICINESAMOUNT = ? ";
  4678.             }
  4679.  
  4680.             con = GOSIUtilities.getConnection(GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  4681.             ps = con.prepareStatement(sqlQuery);
  4682.             ps.setLong(1,invoiceDetailBean.getSocInsNumber().longValue());
  4683.             ps.setShort(2,OHConstants.REG_HOSP_INVC_DETAILS_CANCELLED.shortValue());
  4684.            
  4685.             int i=2;
  4686.            
  4687.             if(invoiceDetailBean.getTrmtStartDate()!=null)
  4688.             {
  4689.                 ps.setTimestamp(++i,invoiceDetailBean.getTrmtStartDate());
  4690.             }              
  4691.             if(invoiceDetailBean.getTrmtEndDate()!=null)
  4692.             {
  4693.                 ps.setTimestamp(++i,invoiceDetailBean.getTrmtEndDate());
  4694.             }
  4695.             if (invoiceDetailBean.getServicesAmount()!=null)
  4696.             {
  4697.                 ps.setDouble(++i,invoiceDetailBean.getServicesAmount().doubleValue());
  4698.             }
  4699.             if(invoiceDetailBean.getMedicinesAmount()!=null)
  4700.             {
  4701.                 ps.setDouble(++i,invoiceDetailBean.getMedicinesAmount().doubleValue());
  4702.             }
  4703.             rs = ps.executeQuery();
  4704.             String errorPage = "";
  4705.             String errorFile = "";
  4706.             while(rs.next())
  4707.             {
  4708.                 Long invoiceNumber=null;
  4709.                 invoiceNumber = new Long(rs.getLong("INVOICENUMBER"));
  4710.                
  4711.                 if("".equals(errorPage))
  4712.                 {
  4713.                     errorPage = rs.getString("PAGENUMBER");
  4714.                     errorFile = rs.getString("INVOICENUMBER");
  4715.                 }else
  4716.                 {
  4717.                     errorPage = errorPage+","+rs.getString("PAGENUMBER");
  4718.                     errorFile = errorFile+","+rs.getString("INVOICENUMBER");
  4719.                 }
  4720.                 //message =   " Please check for duplicate ,The contributor has another invoice detail record on page "+errorPage
  4721.                 if (invoiceDetailBean.getInvoiceNumber().equals(invoiceNumber))
  4722.                 {
  4723.                     message = GOSIErrorMessages.getErrorDesc("SOI_ERR_5575")+" : "+errorPage;
  4724.                 }
  4725.                 //message =   " Please check for duplicate ,The contributor has another invoice detail record in invoice number "+errorFile
  4726.                 else                   
  4727.                 {
  4728.                     message = GOSIErrorMessages.getErrorDesc("SOI_ERR_5618")+" : "+errorFile;
  4729.                 }
  4730.             }
  4731.             return message;
  4732.         }  
  4733.         catch (GOSIException ge)
  4734.         {
  4735.             throw ge;
  4736.         }
  4737.         catch (Exception e)
  4738.         {
  4739.             throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  4740.                 GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  4741.                 "isInvoiceAlreadyEntered()",e,"CMN_ERR_1000");  
  4742.  
  4743.         }finally
  4744.         {
  4745.             GOSIUtilities.cleanUp(con,ps,rs);
  4746.         }
  4747.     }
  4748.  
  4749.     /**
  4750.     * @METHOD NAME              :   canAddDetailToPage
  4751.     * @INFORMATION              :   This method is to check if a page is in workflow and an user is trying to add a record in modify mode
  4752.     * @PARAM                    :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceDetailBean
  4753.     * @RETURN                   :   class boolean
  4754.     * @EXCEPTION                :   class gosi.core.util.GOSIException,
  4755.                                     class java.rmi.RemoteException
  4756.     * @LAST MODIFIED BY         :  
  4757.     * @LAST MODIFIED DATE       :  
  4758.     **/
  4759.    
  4760.     public boolean canAddDetailToPage(RegHospInvoiceDetailBean invoiceDetailBean)
  4761.         throws GOSIException
  4762.     {
  4763.         PreparedStatement ps = null;
  4764.         ResultSet rs = null;
  4765.         boolean canAddDetailToPage = true;
  4766.         try
  4767.         {
  4768.             String sqlQuery = " select STATUS from "
  4769.                 + SITables.T_REGHOSPINVOICEDET
  4770.                 + " where INVOICEHEADERID = ? "
  4771.                 + " and PAGENUMBER = ? "
  4772.                 + " and STATUS = ? ";
  4773.  
  4774.             con = GOSIUtilities.getConnection(GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  4775.             ps = con.prepareStatement(sqlQuery);
  4776.             ps.setLong(1,invoiceDetailBean.getInvoiceHeaderId().longValue());
  4777.             ps.setLong(2,invoiceDetailBean.getPageNumber().longValue());
  4778.             ps.setShort(3,OHConstants.REG_HOSP_INVC_DETAILS_IN_WORKFLOW.shortValue());
  4779.             rs = ps.executeQuery();
  4780.             if(rs.next())
  4781.             {
  4782.                 canAddDetailToPage = false;
  4783.                 throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  4784.                     GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  4785.                     "canAddDetailToPage()",null,"SOI_ERR_5576");  
  4786.             }
  4787.         }
  4788.         catch (GOSIException ge)
  4789.         {
  4790.             throw ge;
  4791.         }
  4792.         catch (Exception e)
  4793.         {
  4794.             throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  4795.                 GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  4796.                 "canAddDetailToPage()",e,"CMN_ERR_1000");  
  4797.  
  4798.         }finally
  4799.         {
  4800.             GOSIUtilities.cleanUp(con,ps,rs);
  4801.         }
  4802.         return canAddDetailToPage;
  4803.     }
  4804.  
  4805.     /**
  4806.     * @METHOD NAME              :   createAutomatedRecoveryBatchRequest
  4807.     * @INFORMATION              :   This method is to recover the amount spent on rejected injury from the employer.
  4808.     * @PARAM                    :   class java.lang.Long, class java.lang.Long,
  4809.                                     class java.lang.Short
  4810.     * @RETURN                   :   class java.lang.Long
  4811.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  4812.     * @LAST MODIFIED BY         :  
  4813.     * @LAST MODIFIED DATE       :  
  4814.     **/
  4815.     private Long createAutomatedRecoveryBatchRequest(Long userId,
  4816.             Long invoiceHeaderId, Short recoveryType) throws GOSIException
  4817.     {
  4818.         GOSIDebug.debugMessages("Starting createAutomatedRecoveryBatchRequest - MaintainRegHospitalInvoiceSessionEJB");
  4819.         Long requestId = null;
  4820.         try
  4821.         {
  4822.            
  4823.             BatchRequestBean requestBean = new BatchRequestBean();
  4824.             requestBean.setBatchId("OHZ_017");
  4825.             requestBean.setRunDate(GOSIUtilities.getTimestamp
  4826.                 (GOSIUtilities.getDateFullString
  4827.                     (new Timestamp(System.currentTimeMillis()))));
  4828.            
  4829.             requestBean.setRequestedBy(userId);
  4830.             requestBean.setRequestedTimeStamp(
  4831.                 new Timestamp(System.currentTimeMillis()));
  4832.  
  4833.             ArrayList paramValueList = new ArrayList();
  4834.             GOSIDebug.debugMessages("BATCH ID:" + requestBean.getBatchId());
  4835.            
  4836.            
  4837.             BatchParametersBean batchBean1
  4838.                       = new BatchParametersBean();
  4839.             batchBean1.setParamValue("" + invoiceHeaderId.longValue());  
  4840.             batchBean1.setParamName("RECORDID");
  4841.             paramValueList.add(batchBean1);
  4842.  
  4843.             BatchParametersBean batchBean2
  4844.                       = new BatchParametersBean();
  4845.             batchBean2.setParamValue("" + recoveryType.longValue());  
  4846.             batchBean2.setParamName("RECOVERYTYPE");
  4847.             paramValueList.add(batchBean2);
  4848.  
  4849.             for(int i=0;i<paramValueList.size();i++)
  4850.             {
  4851.                 BatchParametersBean bean =(BatchParametersBean)paramValueList.get(i);
  4852.                 GOSIDebug.debugMessages ("" + bean.getParamName() + "  : " + bean.getParamValue());
  4853.             }
  4854.  
  4855.             requestBean.setParamValueList(paramValueList);
  4856.             requestBean.setModuleId(GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  4857.             requestId = GOSIUtilities.createRequest(requestBean);
  4858.             GOSIDebug.debugMessages("Ending createAutomatedRecoveryBatchRequest - MaintainRegHospitalInvoiceSessionEJB");
  4859.             return requestId;
  4860.         }
  4861.         catch (GOSIException ge)
  4862.         {
  4863.            
  4864.             throw ge;
  4865.         }
  4866.         catch (Exception e)
  4867.         {
  4868.             throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  4869.             GOSIConstants.SOCIAL_INSURANCE,
  4870.             this.getClass().toString(),"createAutomatedRecoveryBatchRequest()",
  4871.             e,"CMN_ERR_1000");         
  4872.         }
  4873.     }
  4874.    
  4875.     /**
  4876.     * @METHOD NAME              :   getRegHospitalChequeDetails
  4877.     * @INFORMATION              :   This method is to get the registered hospital cheque details from finance.
  4878.     * @PARAM                    :   class java.lang.Long
  4879.     * @RETURN                   :   class java.util.ArrayList
  4880.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  4881.     * @LAST MODIFIED BY         :  
  4882.     * @LAST MODIFIED DATE       :  
  4883.     **/
  4884.     public ArrayList getRegHospitalChequeDetails(Long journalHeaderId)
  4885.         throws GOSIException
  4886.     {
  4887.         GOSIDebug.debugMessages("Start getRegHospitalChequeDetails - MaintainRegHospitalInvoiceSessionEJB");
  4888.         try
  4889.         {
  4890.         //String payeeName = null;
  4891.         ArrayList chequeDetailsList = new ArrayList();
  4892.                                
  4893.             if(null != journalHeaderId)
  4894.             {
  4895.                 FinancialAccountingInterface faInterface;
  4896.                 faInterface = FinanceImplProxy.getFAInterface();
  4897.  
  4898.                 /*for (int i=0;i<journalHeaderIdList.size() ;i++ )
  4899.                 {
  4900.                     //journalHeaderId = (Long)journalHeaderIdList.get(i);*/
  4901.                     HashMap detailsMap = new HashMap();
  4902.                     detailsMap.put("moduleId",
  4903.                         new Short(GOSIConstants.OCCUPATIONAL_HAZARDS_ID));
  4904.                     CNInterfaceBeanOH cnInterfaceBeanOH = new CNInterfaceBeanOH();
  4905.                     cnInterfaceBeanOH.setCreditNoteRecordId(journalHeaderId);
  4906.                     cnInterfaceBeanOH.setModuleId(GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  4907.                     detailsMap.put("interfaceBeanOH",cnInterfaceBeanOH);
  4908.                     detailsMap.put("methodDescription",
  4909.                         FAInterfaceConstants.GET_INV_CHEQUEDETAILS);
  4910.                     HashMap returnMap = faInterface.invokeService(detailsMap);
  4911.  
  4912.                     GOSIDebug.debugMessages("returnMap :" + returnMap);
  4913.                     if(returnMap != null && returnMap.containsKey("interfaceBeanOH"))
  4914.                     {
  4915.                         CNInterfaceBeanOH interfaceBeanOH = (CNInterfaceBeanOH)
  4916.                             returnMap.get("interfaceBeanOH");
  4917.                         OHBenefitChequeBean chequeBean = new OHBenefitChequeBean();
  4918.                         chequeBean.setChequeNumber(interfaceBeanOH.getPaymentInstruNumber());
  4919.                         chequeBean.setChequeAmount(interfaceBeanOH.getChequeAmount());
  4920.                         if(interfaceBeanOH.getInstrumentDate()!=null)
  4921.                         {
  4922.                             chequeBean.setChequeIssueDate(interfaceBeanOH.getInstrumentDate());
  4923.                             chequeBean.setChequeIssueDateStr
  4924.                                 (OHUtilities.getDateStr(interfaceBeanOH.getInstrumentDate(),
  4925.                                 OHConstants.GREGORIAN));
  4926.                         }
  4927.                         chequeBean.setPayeeName(interfaceBeanOH.getPayeeName());
  4928.                         chequeDetailsList.add(chequeBean);
  4929.                     }
  4930.             //  }
  4931.             }
  4932.             GOSIDebug.debugMessages("End getRegHospitalChequeDetails - MaintainRegHospitalInvoiceSessionEJB");
  4933.             return chequeDetailsList;          
  4934.         }
  4935.         catch (GOSIException ge)
  4936.         {
  4937.             throw ge;
  4938.  
  4939.         }
  4940.         catch (Exception e)
  4941.         {
  4942.             throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  4943.                 GOSIConstants.SOCIAL_INSURANCE,this.getClass().toString(),
  4944.                 "getRegHospitalChequeDetails()",e,"CMN_ERR_1000");
  4945.         }
  4946.         finally
  4947.         {
  4948.  
  4949.         }
  4950.        
  4951.     }
  4952.  
  4953.     /**
  4954.     * @METHOD NAME              :   deleteInvoiceHeader
  4955.     * @INFORMATION              :   This method is to delete the invoice header that is pending data entry
  4956.     * @PARAM                    :   class java.lang.Long
  4957.     * @RETURN                   :   void
  4958.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  4959.     * @LAST MODIFIED BY         :
  4960.     * @LAST MODIFIED DATE       :
  4961.     **/
  4962.     public void deleteInvoiceHeader (Long invoiceHeaderId,Long userId) throws GOSIException
  4963.     {
  4964.         PreparedStatement   ps  = null;
  4965.         ResultSet           rs  = null;
  4966.  
  4967.         try
  4968.         {
  4969.             con = GOSIUtilities.getConnection (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  4970.  
  4971.             // check invoice status
  4972.             ps = con.prepareStatement ("SELECT invoicestatus " +
  4973.                                        "  FROM " + SITables.T_REGHOSPINVOICEHDR +
  4974.                                        " WHERE invoiceheaderid = ? ");
  4975.             ps.setLong (1, invoiceHeaderId);
  4976.             rs = ps.executeQuery ();
  4977.  
  4978.             if (rs.next())
  4979.             {
  4980.                 if (rs.getShort("invoicestatus") != OHConstants.REG_HOSP_INVC_PENDING_DATA_ENTRY)
  4981.                 {
  4982.                     throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  4983.                                                GOSIConstants.SOCIAL_INSURANCE,
  4984.                                                this.getClass().toString(),
  4985.                                                "deleteInvoiceHeader()",
  4986.                                                null,
  4987.                                                "SOI_ERR_5668");
  4988.                 }
  4989.             }
  4990.  
  4991.             GOSIUtilities.cleanUp (ps, rs);
  4992.  
  4993.             // check invoice details
  4994.             ps = con.prepareStatement ("SELECT count(*) AS details_count " +
  4995.                                        "  FROM " + SITables.T_REGHOSPINVOICEDET +
  4996.                                        " WHERE invoiceheaderid = ? AND status <> ?");
  4997.             ps.setLong (1, invoiceHeaderId);
  4998.             ps.setShort(2, OHConstants.REG_HOSP_INVC_DETAILS_CANCELLED.shortValue());
  4999.             rs = ps.executeQuery ();
  5000.  
  5001.             if (rs.next() && rs.getInt("details_count") > 0)
  5002.             {
  5003.                 throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  5004.                                            GOSIConstants.SOCIAL_INSURANCE,
  5005.                                            this.getClass().toString(),
  5006.                                            "deleteInvoiceHeader()",
  5007.                                            null,
  5008.                                            "SOI_ERR_5670");
  5009.             }
  5010.            
  5011.             RegHospitalInvoiceHeaderEntityHome home = (RegHospitalInvoiceHeaderEntityHome) ServiceLocator.getInstance ()
  5012.             .getRemoteHome (OHConstants.REG_HOSP_INVOICE_HEADER_ENTITY_JNDI, RegHospitalInvoiceHeaderEntityHome.class);
  5013.                 RegHospitalInvoiceHeaderEntity invoiceEntity = home.findByPrimaryKey (invoiceHeaderId);
  5014.  
  5015.             // delete invoice
  5016.             GOSIUtilities.cleanUp (ps, rs);
  5017.  
  5018.             // check invoice details
  5019.             ps = con.prepareStatement ("SELECT count(*) AS details_count " +
  5020.                                        "  FROM " + SITables.T_REGHOSPINVOICEDET +
  5021.                                        " WHERE invoiceheaderid = ? ");
  5022.             ps.setLong (1, invoiceHeaderId);
  5023.             rs = ps.executeQuery ();
  5024.  
  5025.             if (rs.next() && rs.getInt("details_count") > 0)
  5026.             {
  5027.                 invoiceEntity.cancelRegHospInvoiceHeader(userId);
  5028.             }
  5029.             else{
  5030.                 invoiceEntity.remove ();
  5031.             }
  5032.         }
  5033.         catch (GOSIException ge)
  5034.         {
  5035.             throw   ge;
  5036.         }
  5037.         catch (Exception e)
  5038.         {
  5039.             throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  5040.                                        GOSIConstants.SOCIAL_INSURANCE,
  5041.                                        this.getClass().toString(),
  5042.                                        "deleteInvoiceHeader()",
  5043.                                        e,
  5044.                                        "CMN_ERR_1000");
  5045.         }
  5046.         finally
  5047.         {
  5048.             GOSIUtilities.cleanUp (con, ps, rs);
  5049.         }
  5050.     }
  5051.     /**
  5052.     * @METHOD NAME              :   getPendingTreatmentInvoiceList
  5053.     * @INFORMATION              :   This method is to  get Pending Treatment Invoice List
  5054.     * @PARAM                    :   class java.lang.Long
  5055.     * @RETURN                   :   class java.util.ArrayList
  5056.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  5057.     * @LAST MODIFIED BY         :
  5058.     * @LAST MODIFIED DATE       :
  5059.     **/
  5060.     public ArrayList getPendingTreatmentInvoiceList (Long hospitalCode) throws GOSIException
  5061.     {
  5062.         ArrayList  treatmentInvoiceList = new ArrayList ();
  5063.  
  5064.         PreparedStatement  ps = null;
  5065.         ResultSet          rs = null;
  5066.  
  5067.         try
  5068.         {
  5069.             String currentDate=GOSIUtilities.getDateFullString(new Timestamp(System.currentTimeMillis()));
  5070.             int month=OHUtilities.getMonth(currentDate);
  5071.             int year=OHUtilities.getYear(currentDate);
  5072.             Timestamp startDate= OHUtilities.getGregDate(GOSIDateUtilities.getMonthEndDate(month, year-2),"G");
  5073.            
  5074.             con = GOSIUtilities.getConnection (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  5075.  
  5076.             StringBuilder sqlQuery=new StringBuilder();
  5077.             sqlQuery.append("SELECT   a.invoiceheaderid, a.invoicenumber, a.fieldoffice, a.startdate, a.enddate, ");
  5078.             sqlQuery.append("         COUNT (b.invoicedetailsid) AS numberofservices, SUM (b.servicesamount) AS servicesamount, " );
  5079.             sqlQuery.append("         SUM (B.rejectedservicesamount ) AS rejectedservicesamount, SUM (b.medicinesamount) AS medicinesamount," );
  5080.             sqlQuery.append("          SUM (B.rejectedmedicinesamount ) AS rejectedmedicinesamount , a.totalamount, a.discountamount, " );
  5081.             sqlQuery.append("         SUM (b.nodiscountamount) AS nodiscountamount, SUM (B.rejectednodiscountamount ) AS rejectednodiscountamount, ");
  5082.             sqlQuery.append("         (a.totalamount - NVL (a.discountamount, 0)) AS totalpayableamount, a.invoicestatus ");
  5083.             sqlQuery.append("    FROM " + SITables.T_REGHOSPINVOICEHDR + " a LEFT JOIN " + SITables.T_REGHOSPINVOICEDET + " b ");
  5084.             sqlQuery.append("         ON a.invoiceheaderid = b.invoiceheaderid ");
  5085.             sqlQuery.append("   WHERE a.hospitalcode = ?  " );
  5086.             sqlQuery.append("     AND a.invoicestatus NOT IN (?, ?, ?) " );
  5087.             sqlQuery.append("     AND a.filenumber IS NULL AND A.STARTDATE>= ? " );
  5088.             sqlQuery.append("     AND (b.status IS NULL OR b.status <> ?) " );
  5089.             sqlQuery.append("GROUP BY a.invoiceheaderid, a.invoicenumber, a.fieldoffice, a.startdate, a.enddate, a.totalamount, " );
  5090.             sqlQuery.append("         a.discountamount, a.invoicestatus " );
  5091.             sqlQuery.append("ORDER BY a.startdate DESC ");
  5092.             GOSIDebug.debugMessages("getPendingTreatmentInvoiceList Query :"+sqlQuery.toString());
  5093.             ps = con.prepareStatement (sqlQuery.toString(), ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
  5094.  
  5095.             ps.setLong  (1, hospitalCode);
  5096.             ps.setShort (2, OHConstants.REG_HOSP_INVC_REJECTED);
  5097.             ps.setShort (3, OHConstants.REG_HOSP_INVC_CANCELLED);
  5098.             ps.setShort (4, OHConstants.REG_HOSP_INVC_PAID);
  5099.             ps.setTimestamp(5, startDate);
  5100.             ps.setShort (6, OHConstants.REG_HOSP_INVC_DETAILS_CANCELLED);
  5101.  
  5102.             //ps.setMaxRows (GOSIApplicationProperties.MAX_PAGE_SIZE);
  5103.  
  5104.             rs = ps.executeQuery ();
  5105.  
  5106.             while (rs.next())
  5107.             {
  5108.                 TreatmentInvoiceQueryListBean invoiceListBean = new TreatmentInvoiceQueryListBean ();
  5109.  
  5110.                 invoiceListBean.setHeaderId              (rs.getLong("INVOICEHEADERID"));
  5111.                 invoiceListBean.setInvoiceNumber         (rs.getLong("INVOICENUMBER"));
  5112.                 invoiceListBean.setFieldOfficeCode       (rs.getShort("FIELDOFFICE"));
  5113.                 invoiceListBean.setStartDate             (rs.getTimestamp("STARTDATE"));
  5114.                 invoiceListBean.setEndDate               (rs.getTimestamp("ENDDATE"));
  5115.                 invoiceListBean.setNumberOfServices      (rs.getInt("NUMBEROFSERVICES"));
  5116.                 invoiceListBean.setServiceAmount         (rs.getDouble("SERVICESAMOUNT"));
  5117.                 invoiceListBean.setRejectedServiceAmount (rs.getDouble("REJECTEDSERVICESAMOUNT"));
  5118.                 invoiceListBean.setMedicineAmount        (rs.getDouble("MEDICINESAMOUNT"));
  5119.                 invoiceListBean.setRejectedMedicineAmount(rs.getDouble("REJECTEDMEDICINESAMOUNT"));
  5120.                 invoiceListBean.setNonDiscountAmount     (rs.getDouble("NODISCOUNTAMOUNT"));
  5121.                 invoiceListBean.setRejectedNonDiscountAmount(rs.getDouble("REJECTEDNODISCOUNTAMOUNT"));
  5122.                 invoiceListBean.setTotalCalculatedAmount (rs.getDouble("TOTALAMOUNT"));
  5123.                 invoiceListBean.setDiscountAmount        (rs.getDouble("DISCOUNTAMOUNT"));
  5124.                 invoiceListBean.setTotalPayableAmount    (rs.getDouble("TOTALPAYABLEAMOUNT"));
  5125.                 invoiceListBean.setInvoiceStatus         (rs.getShort("INVOICESTATUS"));
  5126.  
  5127.                 treatmentInvoiceList.add (invoiceListBean);
  5128.             }
  5129.         }
  5130.         catch (GOSIException ge)
  5131.         {
  5132.             throw   ge;
  5133.         }
  5134.         catch (Exception e)
  5135.         {
  5136.             throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  5137.                                        GOSIConstants.SOCIAL_INSURANCE,
  5138.                                        this.getClass().toString(),
  5139.                                        "getPendingTreatmentInvoiceList()",
  5140.                                        e,
  5141.                                        "CMN_ERR_1000");
  5142.         }
  5143.         finally
  5144.         {
  5145.             GOSIUtilities.cleanUp (con, ps, rs);
  5146.         }
  5147.  
  5148.         return  treatmentInvoiceList;
  5149.     }
  5150.    
  5151.     /**
  5152.     * @METHOD NAME              :   getPendingTreatmentInvoiceList
  5153.     * @INFORMATION              :   This method is to  get Pending Treatment Invoice List
  5154.     * @PARAM                    :   class java.lang.Long
  5155.     * @RETURN                   :   class java.util.ArrayList
  5156.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  5157.     * @LAST MODIFIED BY         :
  5158.     * @LAST MODIFIED DATE       :
  5159.     **/
  5160.     public ArrayList getPendingTreatmentInvoiceList (Long hospitalCode, int month , int year) throws GOSIException
  5161.     {
  5162.         ArrayList  treatmentInvoiceList = new ArrayList ();
  5163.  
  5164.         PreparedStatement  ps = null;
  5165.         ResultSet          rs = null;
  5166.  
  5167.         try
  5168.         {
  5169.             String currentDate=GOSIUtilities.getDateFullString(new Timestamp(System.currentTimeMillis()));
  5170.             Timestamp startDate= OHUtilities.getGregDate(OHUtilities.getMonthStartDate(month, year),"G");
  5171.            
  5172.             con = GOSIUtilities.getConnection (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  5173.  
  5174.             StringBuilder sqlQuery=new StringBuilder();
  5175.             sqlQuery.append("SELECT   a.invoiceheaderid, a.invoicenumber, a.fieldoffice, a.startdate, a.enddate, ");
  5176.             sqlQuery.append("         COUNT (b.invoicedetailsid) AS numberofservices, SUM (b.servicesamount) AS servicesamount, " );
  5177.             sqlQuery.append("         SUM (B.rejectedservicesamount ) AS rejectedservicesamount, SUM (b.medicinesamount) AS medicinesamount," );
  5178.             sqlQuery.append("          SUM (B.rejectedmedicinesamount ) AS rejectedmedicinesamount , a.totalamount, a.discountamount, " );
  5179.             sqlQuery.append("         SUM (b.nodiscountamount) AS nodiscountamount, SUM (B.rejectednodiscountamount ) AS rejectednodiscountamount, ");
  5180.             sqlQuery.append("         (a.totalamount - NVL (a.discountamount, 0)) AS totalpayableamount, a.invoicestatus ");
  5181.             sqlQuery.append("    FROM " + SITables.T_REGHOSPINVOICEHDR + " a LEFT JOIN " + SITables.T_REGHOSPINVOICEDET + " b ");
  5182.             sqlQuery.append("         ON a.invoiceheaderid = b.invoiceheaderid ");
  5183.             sqlQuery.append("   WHERE a.hospitalcode = ?  " );
  5184.             sqlQuery.append("     AND a.invoicestatus NOT IN (?, ?) " );
  5185.             sqlQuery.append("     AND a.filenumber IS NULL AND A.STARTDATE= ? " );
  5186.             sqlQuery.append("     AND (b.status IS NULL OR b.status <> ?) " );
  5187.             sqlQuery.append("GROUP BY a.invoiceheaderid, a.invoicenumber, a.fieldoffice, a.startdate, a.enddate, a.totalamount, " );
  5188.             sqlQuery.append("         a.discountamount, a.invoicestatus " );
  5189.             sqlQuery.append("ORDER BY a.startdate DESC ");
  5190.             GOSIDebug.debugMessages("getPendingTreatmentInvoiceList Query :"+sqlQuery.toString());
  5191.             ps = con.prepareStatement (sqlQuery.toString(), ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
  5192.  
  5193.             ps.setLong  (1, hospitalCode);
  5194.             ps.setShort (2, OHConstants.REG_HOSP_INVC_REJECTED);
  5195.             ps.setShort (3, OHConstants.REG_HOSP_INVC_CANCELLED);
  5196.             ps.setTimestamp(4, startDate);
  5197.             ps.setShort (5, OHConstants.REG_HOSP_INVC_DETAILS_CANCELLED);
  5198.  
  5199.             //ps.setMaxRows (GOSIApplicationProperties.MAX_PAGE_SIZE);
  5200.  
  5201.             rs = ps.executeQuery ();
  5202.  
  5203.             while (rs.next())
  5204.             {
  5205.                 TreatmentInvoiceQueryListBean invoiceListBean = new TreatmentInvoiceQueryListBean ();
  5206.  
  5207.                 invoiceListBean.setHeaderId              (rs.getLong("INVOICEHEADERID"));
  5208.                 invoiceListBean.setInvoiceNumber         (rs.getLong("INVOICENUMBER"));
  5209.                 invoiceListBean.setFieldOfficeCode       (rs.getShort("FIELDOFFICE"));
  5210.                 invoiceListBean.setStartDate             (rs.getTimestamp("STARTDATE"));
  5211.                 invoiceListBean.setEndDate               (rs.getTimestamp("ENDDATE"));
  5212.                 invoiceListBean.setNumberOfServices      (rs.getInt("NUMBEROFSERVICES"));
  5213.                 invoiceListBean.setServiceAmount         (rs.getDouble("SERVICESAMOUNT"));
  5214.                 invoiceListBean.setRejectedServiceAmount (rs.getDouble("REJECTEDSERVICESAMOUNT"));
  5215.                 invoiceListBean.setMedicineAmount        (rs.getDouble("MEDICINESAMOUNT"));
  5216.                 invoiceListBean.setRejectedMedicineAmount(rs.getDouble("REJECTEDMEDICINESAMOUNT"));
  5217.                 invoiceListBean.setNonDiscountAmount     (rs.getDouble("NODISCOUNTAMOUNT"));
  5218.                 invoiceListBean.setRejectedNonDiscountAmount(rs.getDouble("REJECTEDNODISCOUNTAMOUNT"));
  5219.                 invoiceListBean.setTotalCalculatedAmount (rs.getDouble("TOTALAMOUNT"));
  5220.                 invoiceListBean.setDiscountAmount        (rs.getDouble("DISCOUNTAMOUNT"));
  5221.                 invoiceListBean.setTotalPayableAmount    (rs.getDouble("TOTALPAYABLEAMOUNT"));
  5222.                 invoiceListBean.setInvoiceStatus         (rs.getShort("INVOICESTATUS"));
  5223.  
  5224.                 treatmentInvoiceList.add (invoiceListBean);
  5225.             }
  5226.         }
  5227.         catch (GOSIException ge)
  5228.         {
  5229.             throw   ge;
  5230.         }
  5231.         catch (Exception e)
  5232.         {
  5233.             throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  5234.                                        GOSIConstants.SOCIAL_INSURANCE,
  5235.                                        this.getClass().toString(),
  5236.                                        "getPendingTreatmentInvoiceList()",
  5237.                                        e,
  5238.                                        "CMN_ERR_1000");
  5239.         }
  5240.         finally
  5241.         {
  5242.             GOSIUtilities.cleanUp (con, ps, rs);
  5243.         }
  5244.  
  5245.         return  treatmentInvoiceList;
  5246.     }
  5247.  
  5248.     /**
  5249.     * @METHOD NAME              :   getTreatmentInvoiceHeaderBean
  5250.     * @INFORMATION              :   This method is to get Treatment Invoice Header Bean
  5251.     * @PARAM                    :   class java.lang.Long,
  5252.                                     class java.lang.Long
  5253.     * @RETURN                   :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceHeaderBean
  5254.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  5255.     * @LAST MODIFIED BY         :
  5256.     * @LAST MODIFIED DATE       :
  5257.     **/
  5258.     public RegHospInvoiceHeaderBean getTreatmentInvoiceHeaderBean (Long treatmentInvoiceHeaderId, Long hospitalCode) throws GOSIException
  5259.     {
  5260.         RegHospInvoiceHeaderBean  invoiceHeaderBean  = null;
  5261.  
  5262.         PreparedStatement  ps  = null;
  5263.         ResultSet          rs  = null;
  5264.  
  5265.         try
  5266.         {
  5267.             String sqlQuery = "SELECT invoiceheaderid, invoicenumber, hospitalcode, fieldoffice, invoicedate, " +
  5268.                               "       invoicedateentfmt, startdate, startdateentfmt, enddate, enddateentfmt, " +
  5269.                               "       paymentmode, payeename, bankcode, bankbranchcode, bankaccountnumber, " +
  5270.                               "       paymentdate, paymentdateentfmt, journalheaderid, invoicestatus, lastmodifiedtimestamp , appealstartdate " +
  5271.                               "  FROM " + SITables.T_REGHOSPINVOICEHDR +
  5272.                               " WHERE invoiceheaderid = ? " +
  5273.                               "   AND invoicestatus <> ? ";
  5274.  
  5275.             con = GOSIUtilities.getConnection (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  5276.  
  5277.             ps = con.prepareStatement (sqlQuery);
  5278.  
  5279.             ps.setLong  (1, treatmentInvoiceHeaderId);
  5280.             ps.setShort (2, OHConstants.REG_HOSP_INVC_CANCELLED);
  5281.  
  5282.             rs = ps.executeQuery ();
  5283.  
  5284.             if (rs.next())
  5285.             {
  5286.                 invoiceHeaderBean = new RegHospInvoiceHeaderBean ();
  5287.  
  5288.                 if (! hospitalCode.equals(rs.getLong("HOSPITALCODE")))
  5289.                 {
  5290.                     throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  5291.                                                GOSIConstants.SOCIAL_INSURANCE,
  5292.                                                this.getClass().toString(),
  5293.                                                "getTreatmentInvoiceHeaderBean()",
  5294.                                                null,
  5295.                                                "SOI_ERR_5864");
  5296.                 }
  5297.  
  5298.                 invoiceHeaderBean.setInvoiceHeaderId   (new Long(rs.getLong("INVOICEHEADERID")));
  5299.                 invoiceHeaderBean.setInvoiceNumber     (new Long(rs.getLong("INVOICENUMBER")));
  5300.                 invoiceHeaderBean.setHospitalCode      (new Long(rs.getLong("HOSPITALCODE")));
  5301.                 invoiceHeaderBean.setFieldOffice       (new Short(rs.getShort("FIELDOFFICE")));
  5302.                 invoiceHeaderBean.setInvoiceDate       (rs.getTimestamp("INVOICEDATE"));
  5303.                 invoiceHeaderBean.setInvoiceDateEntFmt (rs.getString("INVOICEDATEENTFMT"));
  5304.                 invoiceHeaderBean.setInvoiceDateStr    (OHUtilities.getDateStr(invoiceHeaderBean.getInvoiceDate(), invoiceHeaderBean.getInvoiceDateEntFmt()));
  5305.                 invoiceHeaderBean.setStartDate         (rs.getTimestamp("STARTDATE"));
  5306.                 invoiceHeaderBean.setStartDateEntFmt   (rs.getString("STARTDATEENTFMT"));
  5307.                 invoiceHeaderBean.setStartDateStr      (OHUtilities.getDateStr(invoiceHeaderBean.getStartDate(), invoiceHeaderBean.getStartDateEntFmt()));
  5308.                 invoiceHeaderBean.setEndDate           (rs.getTimestamp("ENDDATE"));
  5309.                 invoiceHeaderBean.setEndDateEntFmt     (rs.getString("ENDDATEENTFMT"));
  5310.                 invoiceHeaderBean.setEndDateStr        (OHUtilities.getDateStr(invoiceHeaderBean.getEndDate(), invoiceHeaderBean.getEndDateEntFmt()));
  5311.                 invoiceHeaderBean.setPaymentMode       (new Short(rs.getShort("PAYMENTMODE")));
  5312.                 invoiceHeaderBean.setPayeeName         (rs.getString("PAYEENAME"));
  5313.                 invoiceHeaderBean.setAppealStartDate   (rs.getTimestamp("APPEALSTARTDATE"));
  5314.  
  5315.                 if (rs.getObject("BANKCODE") != null)
  5316.                 {
  5317.                     invoiceHeaderBean.setBankCode          (new Integer(rs.getInt("BANKCODE")));
  5318.                     invoiceHeaderBean.setBankBranchCode    (rs.getString("BANKBRANCHCODE"));
  5319.                     invoiceHeaderBean.setBankAccountNumber (rs.getString("BANKACCOUNTNUMBER"));
  5320.                 }
  5321.  
  5322.                 if (rs.getObject("PAYMENTDATE") != null)
  5323.                 {
  5324.                     invoiceHeaderBean.setPaymentDate       (rs.getTimestamp("PAYMENTDATE"));
  5325.                     invoiceHeaderBean.setPaymentDateEntFmt (rs.getString("PAYMENTDATEENTFMT"));
  5326.                 }
  5327.  
  5328.                 if (rs.getObject("JOURNALHEADERID") != null)
  5329.                 {
  5330.                     invoiceHeaderBean.setJournalHeaderId   (new Long(rs.getLong("JOURNALHEADERID")));
  5331.                 }
  5332.  
  5333.                 invoiceHeaderBean.setInvoiceStatus     (new Short(rs.getShort("INVOICESTATUS")));
  5334.                
  5335.                 if (rs.getObject("LASTMODIFIEDTIMESTAMP") != null)
  5336.                 {
  5337.                     invoiceHeaderBean.setLastModifiedTimestamp (rs.getTimestamp("LASTMODIFIEDTIMESTAMP"));
  5338.                 }
  5339.             }
  5340.         }
  5341.         catch (GOSIException ge)
  5342.         {
  5343.             throw   ge;
  5344.         }
  5345.         catch (Exception e)
  5346.         {
  5347.             throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  5348.                                        GOSIConstants.SOCIAL_INSURANCE,
  5349.                                        this.getClass().toString(),
  5350.                                        "getTreatmentInvoiceHeaderBean()",
  5351.                                        e,
  5352.                                        "CMN_ERR_1000");
  5353.         }
  5354.         finally
  5355.         {
  5356.             GOSIUtilities.cleanUp (con, ps, rs);
  5357.         }
  5358.  
  5359.         return  invoiceHeaderBean;
  5360.     }
  5361.  
  5362.     /**
  5363.     * @METHOD NAME              :   getPatientCaseInformation
  5364.     * @INFORMATION              :   This method is to get Patient Case Information
  5365.     * @PARAM                    :   class java.lang.Long,
  5366.                                     class java.sql.Timestamp
  5367.     * @RETURN                   :   class java.util.Hashtable
  5368.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  5369.     * @LAST MODIFIED BY         :
  5370.     * @LAST MODIFIED DATE       :
  5371.     **/
  5372.     public Hashtable getPatientCaseInformation (Long socInsNumber, Timestamp caseDate) throws GOSIException
  5373.     {
  5374.         Hashtable  patientCaseInformation  = null;
  5375.        
  5376.         PreparedStatement  ps  = null;
  5377.         ResultSet          rs  = null;
  5378.         ResultSet          rs2  = null;
  5379.         try
  5380.         {
  5381.             String sqlQuery = "SELECT inj.injuryid, inj.injurynumber, inj.contributorid, inj.socinsnumber, inj.injurydate, inj.injurystatus , " +
  5382.                               "       inj.datecomplication ,inj.enteredby , inj.hospitalcode , est.establishmentid, est.registrationnumber, est.establishmentnamearb, " +
  5383.                               "       per.firstname, per.secondname, per.thirdname, per.surname ,pmr.patientnumber" +
  5384.                               "  FROM " + SITables.T_INJURY + " inj " +
  5385.                               "       LEFT JOIN " + SITables.T_ESTABLISHMENT + " est  ON inj.establishmentid = est.establishmentid " +
  5386.                               "       LEFT JOIN " + SITables.T_CONTRIBUTOR + "   con  ON inj.contributorid = con.contributorid " +
  5387.                               "       LEFT JOIN " + SITables.T_PERSON + "        per  ON con.personid = per.personid " +
  5388.                               "       LEFT JOIN " + SITables.T_PMR + "           pmr  ON inj.injuryid = pmr.injuryid " +
  5389.                               " WHERE socinsnumber = ? " +
  5390.                               "   AND (datecomplication = ? OR (injurydate = ? AND datecomplication IS NULL)) " +
  5391.                               "   AND injurystatus <> ? ";
  5392.  
  5393.             con = GOSIUtilities.getConnection (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  5394.  
  5395.             ps = con.prepareStatement (sqlQuery);
  5396.             ps.setLong      (1, socInsNumber);
  5397.             ps.setTimestamp (2, caseDate);
  5398.             ps.setTimestamp (3, caseDate);
  5399.             ps.setShort     (4, OHConstants.INJ_STS_CANCELLED);
  5400.  
  5401.             rs = ps.executeQuery ();
  5402.  
  5403.             if (rs.next())
  5404.             {
  5405.                 AddInjuryHelperBean injuryBean = new AddInjuryHelperBean ();
  5406.                
  5407.                 injuryBean.setInjuryId        (new Long(rs.getLong("INJURYID")));
  5408.                 injuryBean.setInjuryNumber    (new Long(rs.getLong("INJURYNUMBER")));
  5409.                 injuryBean.setContributorId   (new Long(rs.getLong("CONTRIBUTORID")));
  5410.                 injuryBean.setSocInsNumber    (new Long(rs.getLong("SOCINSNUMBER")));
  5411.                 injuryBean.setInjuryDate      (rs.getTimestamp("INJURYDATE"));
  5412.  
  5413.                 if (rs.getObject("DATECOMPLICATION") != null)
  5414.                 {
  5415.                     injuryBean.setDateComplication (rs.getTimestamp("DATECOMPLICATION"));
  5416.                 }
  5417.                 if (rs.getObject("HOSPITALCODE") != null)
  5418.                 {
  5419.                     injuryBean.setHospitalCode(rs.getLong(("HOSPITALCODE")));
  5420.                 }
  5421.                 if (rs.getObject("ENTEREDBY") != null)
  5422.                 {
  5423.                     injuryBean.setEnteredBy (rs.getShort(("ENTEREDBY")));
  5424.                 }
  5425.                 if (rs.getObject("INJURYSTATUS") != null)
  5426.                 {
  5427.                     injuryBean.setInjuryStatus (rs.getShort(("INJURYSTATUS")));
  5428.                 }
  5429.                
  5430.                
  5431.                 injuryBean.setEstablishmentId   (new Long(rs.getLong("ESTABLISHMENTID")));
  5432.                 injuryBean.setRegNumber         (new Long(rs.getLong("REGISTRATIONNUMBER")));
  5433.                 injuryBean.setEstablishmentName (rs.getString("ESTABLISHMENTNAMEARB"));
  5434.                 injuryBean.setName              (OHUtilities.getFullName(rs.getString("FIRSTNAME"), rs.getString("SECONDNAME"),
  5435.                                                                          rs.getString("THIRDNAME"), rs.getString("SURNAME")));
  5436.                 injuryBean.setPatientNumber(rs.getString("PATIENTNUMBER"));
  5437.                 patientCaseInformation = new Hashtable ();
  5438.  
  5439.                 patientCaseInformation.put ("injuryBean", injuryBean);
  5440.             }
  5441.             else
  5442.             {
  5443.                 GOSIUtilities.cleanUp (ps, rs);
  5444.                
  5445.                 sqlQuery = "SELECT disbassmt.disabilityassessmentid, disbassmt.disabilitynumber, disbassmt.socialinsurancenumber, " +
  5446.                            "       disbassmt.assessmentdate, disbassmt.disabilitytype , disbassmt.scheduleid , per.firstname, per.secondname, per.thirdname, per.surname " +
  5447.                            "  FROM " + SITables.T_DISBASSMT + " disbassmt " +
  5448.                            "       LEFT JOIN " + SITables.T_CONTRIBUTOR + "  con  ON disbassmt.socialinsurancenumber = con.socialinsurancenumber " +
  5449.                            "       LEFT JOIN " + SITables.T_PERSON + "       per  ON con.personid = per.personid " +
  5450.                            " WHERE disbassmt.socialinsurancenumber = ? " +
  5451.                            "   AND disbassmt.assessmentdate = ? " +
  5452.                            "   AND disbassmt.assessmentstatus <> ? ";
  5453.  
  5454.                 ps = con.prepareStatement (sqlQuery);
  5455.  
  5456.                 ps.setLong      (1, socInsNumber);
  5457.                 ps.setTimestamp (2, caseDate);
  5458.                 ps.setShort     (3, OHConstants.ASSMT_CANCELLED);
  5459.  
  5460.                 rs = ps.executeQuery ();
  5461.                
  5462.                 if (rs.next())
  5463.                 {
  5464.                     OHDAssessmentHeaderBean disabilityAssessmentBean = new OHDAssessmentHeaderBean ();
  5465.                    
  5466.                     disabilityAssessmentBean.setDisabilityAssessmentID     (new Long(rs.getLong("DISABILITYASSESSMENTID")));
  5467.                     disabilityAssessmentBean.setDisabilityAssessmentNumber (new Long(rs.getLong("DISABILITYNUMBER")));
  5468.                     disabilityAssessmentBean.setSocialInsuranceNumber      (new Long(rs.getLong("SOCIALINSURANCENUMBER")));
  5469.                     disabilityAssessmentBean.setAssessmentDateTmsp         (rs.getTimestamp("ASSESSMENTDATE"));
  5470.                     disabilityAssessmentBean.setContributorName            (OHUtilities.getFullName(rs.getString("FIRSTNAME"), rs.getString("SECONDNAME"),
  5471.                                                                             rs.getString("THIRDNAME"), rs.getString("SURNAME")));
  5472.                     disabilityAssessmentBean.setScheduleID(new Long(rs.getLong("SCHEDULEID")));
  5473.                     disabilityAssessmentBean.setDisabilityType(new Short (rs.getShort("DISABILITYTYPE"))) ;
  5474.                    
  5475.                     if(disabilityAssessmentBean.getDisabilityType().equals(OHConstants.HEIRDISB_ASSMT.shortValue()))
  5476.                     {
  5477.  
  5478.                         sqlQuery = "SELECT  per.firstname, per.secondname, per.thirdname, per.surname " +
  5479.                                    "  FROM " + SITables.T_MBAPPOINTMENT + " mba " +
  5480.                                    "       LEFT JOIN " + SITables.T_PERSON + "       per  ON mba.heirpersonid = per.personid " +
  5481.                                    " WHERE mba.scheduleid = ? " ;
  5482.                         ps = con.prepareStatement (sqlQuery);
  5483.                         ps.setLong      (1, disabilityAssessmentBean.getScheduleID());
  5484.                         rs2 = ps.executeQuery ();
  5485.                         if (rs2.next())
  5486.                         {
  5487.                             disabilityAssessmentBean.setHeirName(OHUtilities.getFullName(rs2.getString("FIRSTNAME"), rs2.getString("SECONDNAME"),
  5488.                                     rs2.getString("THIRDNAME"), rs2.getString("SURNAME")));
  5489.  
  5490.                         }
  5491.                     }  
  5492.                     patientCaseInformation = new Hashtable ();
  5493.  
  5494.                     patientCaseInformation.put ("disabilityAssessmentBean", disabilityAssessmentBean);
  5495.                    
  5496.                 }
  5497.             }
  5498.         }
  5499.         catch (GOSIException ge)
  5500.         {
  5501.             throw   ge;
  5502.         }
  5503.         catch (Exception e)
  5504.         {
  5505.             throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  5506.                                        GOSIConstants.SOCIAL_INSURANCE,
  5507.                                        this.getClass().toString(),
  5508.                                        "getPatientCaseInformation()",
  5509.                                        e,
  5510.                                        "CMN_ERR_1000");
  5511.         }
  5512.         finally
  5513.         {
  5514.             GOSIUtilities.cleanUp (con, ps, rs);
  5515.         }
  5516.  
  5517.         return  patientCaseInformation;
  5518.     }
  5519.    
  5520.     /**
  5521.     * @METHOD NAME              :   checkIsPatientCaseAssociatedWithFieldOffice
  5522.     * @INFORMATION              :   This method is to check Is Patient Case Associated With Field Office
  5523.     * @PARAM                    :   class java.lang.Long,
  5524.                                     class java.lang.Long,
  5525.                                     class java.lang.Long
  5526.     * @RETURN                   :   class java.lang.Boolean
  5527.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  5528.     * @LAST MODIFIED BY         :
  5529.     * @LAST MODIFIED DATE       :
  5530.     **/
  5531.     public Boolean checkIsPatientCaseAssociatedWithFieldOffice (Long injuryId, Long disbAssmtId, Long treatmentInvoiceHeaderId) throws GOSIException
  5532.     {
  5533.         Boolean     isPatientCaseAssociatedWithFieldOffice = null;
  5534.  
  5535.         PreparedStatement  ps  = null;
  5536.         ResultSet          rs  = null;
  5537.  
  5538.         try
  5539.         {
  5540.             String sqlQuery = null;
  5541.  
  5542.             if (injuryId != null)
  5543.             {
  5544.                 sqlQuery    = "SELECT inj.fieldofficecode AS PATIENT_CASE_FIELD_OFFICE, ihdr.fieldoffice AS TREATMENT_INVOICE_FIELD_OFFICE " +
  5545.                               "  FROM " + SITables.T_INJURY + " inj, " + SITables.T_REGHOSPINVOICEHDR + " ihdr " +
  5546.                               " WHERE inj.injuryid = ? " +
  5547.                               "   AND ihdr.invoiceheaderid = ? " +
  5548.                               "UNION " +
  5549.                               "SELECT transfer.transfertofldoffcde AS PATIENT_CASE_FIELD_OFFICE, ihdr.fieldoffice AS TREATMENT_INVOICE_FIELD_OFFICE " +
  5550.                               "  FROM " + SITables.T_TRANSFEROH + " transfer, " + SITables.T_REGHOSPINVOICEHDR + " ihdr " +
  5551.                               " WHERE transfer.injuryid = ? " +
  5552.                               "   AND ihdr.invoiceheaderid = ? " +
  5553.                               "   AND transfer.status NOT IN (?, ?) " +
  5554.                               "UNION " +
  5555.                               "SELECT transfer.transferfromfldoffcde AS PATIENT_CASE_FIELD_OFFICE, ihdr.fieldoffice AS TREATMENT_INVOICE_FIELD_OFFICE " +
  5556.                               "  FROM " + SITables.T_TRANSFEROH + " transfer, " + SITables.T_REGHOSPINVOICEHDR + " ihdr " +
  5557.                               " WHERE transfer.injuryid = ? " +
  5558.                               "   AND ihdr.invoiceheaderid = ? " +
  5559.                               "   AND transfer.transferfromfldoffcde IS NOT NULL " +
  5560.                               "   AND transfer.status NOT IN (?, ?) ";
  5561.             }
  5562.             else
  5563.             {
  5564.                 sqlQuery    = "SELECT disb.fieldoffice AS PATIENT_CASE_FIELD_OFFICE, ihdr.fieldoffice AS TREATMENT_INVOICE_FIELD_OFFICE " +
  5565.                               "  FROM " + SITables.T_DISBASSMT + " disb, " + SITables.T_REGHOSPINVOICEHDR + " ihdr " +
  5566.                               " WHERE disb.SCHEDULEID = ? " +
  5567.                               "   AND ihdr.invoiceheaderid = ? ";
  5568.             }
  5569.  
  5570.             con = GOSIUtilities.getConnection (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  5571.  
  5572.             ps = con.prepareStatement (sqlQuery);
  5573.  
  5574.             if (injuryId != null)
  5575.             {
  5576.                 ps.setLong   (1, injuryId);
  5577.                 ps.setLong   (2, treatmentInvoiceHeaderId);
  5578.                 ps.setLong   (3, injuryId);
  5579.                 ps.setLong   (4, treatmentInvoiceHeaderId);
  5580.                 ps.setShort  (5, OHConstants.TRANSFER_STS_REJECTED);
  5581.                 ps.setShort  (6, OHConstants.TRANSFER_STS_CANCELLED);
  5582.                 ps.setLong   (7, injuryId);
  5583.                 ps.setLong   (8, treatmentInvoiceHeaderId);
  5584.                 ps.setShort  (9, OHConstants.TRANSFER_STS_REJECTED);
  5585.                 ps.setShort  (10, OHConstants.TRANSFER_STS_CANCELLED);
  5586.             }
  5587.             else
  5588.             {
  5589.                 ps.setLong   (1, disbAssmtId);
  5590.                 ps.setLong   (2, treatmentInvoiceHeaderId);
  5591.             }
  5592.  
  5593.             rs = ps.executeQuery ();
  5594.  
  5595.             while (rs.next())
  5596.             {
  5597.                 if (rs.getShort("PATIENT_CASE_FIELD_OFFICE") == rs.getShort("TREATMENT_INVOICE_FIELD_OFFICE"))
  5598.                 {
  5599.                     isPatientCaseAssociatedWithFieldOffice = Boolean.TRUE;
  5600.                     break;
  5601.                 }
  5602.                 else
  5603.                     isPatientCaseAssociatedWithFieldOffice = Boolean.FALSE;
  5604.             }
  5605.         }
  5606.         catch (GOSIException ge)
  5607.         {
  5608.             throw   ge;
  5609.         }
  5610.         catch (Exception e)
  5611.         {
  5612.             throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  5613.                                        GOSIConstants.SOCIAL_INSURANCE,
  5614.                                        this.getClass().toString(),
  5615.                                        "checkIsPatientCaseAssociatedWithFieldOffice()",
  5616.                                        e,
  5617.                                        "CMN_ERR_1000");
  5618.         }
  5619.         finally
  5620.         {
  5621.             GOSIUtilities.cleanUp (con, ps, rs);
  5622.         }
  5623.  
  5624.         return  isPatientCaseAssociatedWithFieldOffice;
  5625.     }
  5626.  
  5627.     /**
  5628.     * @METHOD NAME              :   isPreviouslyEnteredByFieldOffice
  5629.     * @INFORMATION              :   This method is to check is Previously Entered By Field Office
  5630.     * @PARAM                    :   class java.lang.Long,
  5631.                                     class java.lang.Long,
  5632.                                     class java.lang.Long
  5633.     * @RETURN                   :   class java.lang.Boolean
  5634.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  5635.     * @LAST MODIFIED BY         :
  5636.     * @LAST MODIFIED DATE       :
  5637.     **/
  5638.     public Boolean isPreviouslyEnteredByFieldOffice (Long injuryId, Long disbAssmtId, Long hospitalCode) throws GOSIException
  5639.     {
  5640.         Boolean     isPreviouslyEnteredByFieldOffice = null;
  5641.  
  5642.         PreparedStatement  ps  = null;
  5643.         ResultSet          rs  = null;
  5644.  
  5645.         try
  5646.         {
  5647.             String sqlQuery = "SELECT COUNT (*) AS num_records " +
  5648.                               "  FROM " + SITables.T_REGHOSPINVOICEHDR + " ihdr, " + SITables.T_REGHOSPINVOICEDET + " idet " +
  5649.                               " WHERE ihdr.invoiceheaderid = idet.invoiceheaderid " +
  5650.                               (injuryId != null ? "   AND injuryid = ? " : "   AND disbassmtid = ? ") +
  5651.                               "   AND ihdr.hospitalcode = ? " +
  5652.                               "   AND ihdr.filenumber IS NOT NULL " +
  5653.                               "   AND ihdr.invoicestatus <> ? " +
  5654.                               "   AND idet.status <> ? ";
  5655.  
  5656.             con = GOSIUtilities.getConnection (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  5657.  
  5658.             ps = con.prepareStatement (sqlQuery);
  5659.  
  5660.             ps.setLong   (1, injuryId != null ? injuryId : disbAssmtId);
  5661.             ps.setLong   (2, hospitalCode);
  5662.             ps.setShort  (3, OHConstants.REG_HOSP_INVC_CANCELLED);
  5663.             ps.setShort  (4, OHConstants.REG_HOSP_INVC_DETAILS_CANCELLED);
  5664.  
  5665.             rs = ps.executeQuery ();
  5666.  
  5667.             if (rs.next())
  5668.             {
  5669.                 if (rs.getInt("NUM_RECORDS") > 0)
  5670.                     isPreviouslyEnteredByFieldOffice = Boolean.TRUE;
  5671.                 else if (rs.getInt("NUM_RECORDS") == 0)
  5672.                     isPreviouslyEnteredByFieldOffice = Boolean.FALSE;
  5673.             }
  5674.         }
  5675.         catch (GOSIException ge)
  5676.         {
  5677.             throw   ge;
  5678.         }
  5679.         catch (Exception e)
  5680.         {
  5681.             throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  5682.                                        GOSIConstants.SOCIAL_INSURANCE,
  5683.                                        this.getClass().toString(),
  5684.                                        "isPreviouslyEnteredByFieldOffice()",
  5685.                                        e,
  5686.                                        "CMN_ERR_1000");
  5687.         }
  5688.         finally
  5689.         {
  5690.             GOSIUtilities.cleanUp (con, ps, rs);
  5691.         }
  5692.  
  5693.         return  isPreviouslyEnteredByFieldOffice;
  5694.     }
  5695.  
  5696.     /**
  5697.     * @METHOD NAME              :   isPreviouslyEnteredByHospital
  5698.     * @INFORMATION              :   This method is to check is Previously Entered By Hospital
  5699.     * @PARAM                    :   class java.lang.Long,
  5700.                                     class java.lang.Long,
  5701.                                     class java.lang.Long
  5702.     * @RETURN                   :   class java.lang.Boolean
  5703.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  5704.     * @LAST MODIFIED BY         :
  5705.     * @LAST MODIFIED DATE       :
  5706.     **/
  5707.     public Boolean isPreviouslyEnteredByHospital (Long injuryId, Long disbAssmtId, Long hospitalCode) throws GOSIException
  5708.     {
  5709.         Boolean     isPreviouslyEnteredByHospital = null;
  5710.  
  5711.         PreparedStatement  ps  = null;
  5712.         ResultSet          rs  = null;
  5713.  
  5714.         try
  5715.         {
  5716.             String sqlQuery = "SELECT COUNT (*) AS num_records " +
  5717.                               "  FROM " + SITables.T_REGHOSPINVOICEHDR + " ihdr, " + SITables.T_REGHOSPINVOICEDET + " idet " +
  5718.                               " WHERE ihdr.invoiceheaderid = idet.invoiceheaderid " +
  5719.                               (injuryId != null ? "   AND injuryid = ? " : "   AND disbassmtid = ? ") +
  5720.                               "   AND ihdr.hospitalcode = ? " +
  5721.                               "   AND ihdr.filenumber IS NULL " +
  5722.                               "   AND ihdr.invoicestatus <> ? " +
  5723.                               "   AND idet.status <> ? ";
  5724.  
  5725.             con = GOSIUtilities.getConnection (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  5726.  
  5727.             ps = con.prepareStatement (sqlQuery);
  5728.  
  5729.             ps.setLong   (1, injuryId != null ? injuryId : disbAssmtId);
  5730.             ps.setLong   (2, hospitalCode);
  5731.             ps.setShort  (3, OHConstants.REG_HOSP_INVC_CANCELLED);
  5732.             ps.setShort  (4, OHConstants.REG_HOSP_INVC_DETAILS_CANCELLED);
  5733.  
  5734.             rs = ps.executeQuery ();
  5735.  
  5736.             if (rs.next())
  5737.             {
  5738.                 if (rs.getInt("NUM_RECORDS") > 0)
  5739.                     isPreviouslyEnteredByHospital = Boolean.TRUE;
  5740.                 else if (rs.getInt("NUM_RECORDS") == 0)
  5741.                     isPreviouslyEnteredByHospital = Boolean.FALSE;
  5742.             }
  5743.         }
  5744.         catch (GOSIException ge)
  5745.         {
  5746.             throw   ge;
  5747.         }
  5748.         catch (Exception e)
  5749.         {
  5750.             throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  5751.                                        GOSIConstants.SOCIAL_INSURANCE,
  5752.                                        this.getClass().toString(),
  5753.                                        "isPreviouslyEnteredByHospital()",
  5754.                                        e,
  5755.                                        "CMN_ERR_1000");
  5756.         }
  5757.         finally
  5758.         {
  5759.             GOSIUtilities.cleanUp (con, ps, rs);
  5760.         }
  5761.  
  5762.         return  isPreviouslyEnteredByHospital;
  5763.     }
  5764.  
  5765.     /**
  5766.     * @METHOD NAME              :   checkTreatmentPeriodCoverage
  5767.     * @INFORMATION              :   This method is to check Treatment Period Coverage
  5768.     * @PARAM                    :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.TreatmentServiceBean
  5769.     * @RETURN                   :   void
  5770.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  5771.     * @LAST MODIFIED BY         :
  5772.     * @LAST MODIFIED DATE       :
  5773.     **/
  5774.     public TreatmentPeriodBean checkTreatmentPeriodCoverage (TreatmentServiceBean treatmentServiceBean) throws GOSIException
  5775.     {
  5776.         PreparedStatement  ps  = null;
  5777.         ResultSet          rs  = null;
  5778.         TreatmentPeriodBean treatmentPeriodBean =null;
  5779.  
  5780.         try
  5781.         {
  5782.             String sqlQuery = "SELECT treatmentid, hospitalcode, treatmentstatus, treatmenttype ," +
  5783.                               " startdate, startdateentfmt, enddate , enddateentfmt" +
  5784.                               "  FROM " + SITables.T_TREATMENT +
  5785.                               " WHERE injuryid = ? " +
  5786.                               "   AND startdate <= ? " +
  5787.                               "   AND enddate >= ? " +
  5788.                               "   AND treatmentstatus <> ? ";
  5789.  
  5790.             con = GOSIUtilities.getConnection (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  5791.  
  5792.             ps = con.prepareStatement (sqlQuery);
  5793.  
  5794.             ps.setLong      (1, treatmentServiceBean.getInjuryId());
  5795.             ps.setTimestamp (2, treatmentServiceBean.getTrmtDateGreg());
  5796.             ps.setTimestamp (3, treatmentServiceBean.getTrmtDateGreg());
  5797.             ps.setShort     (4, OHConstants.TRMT_STS_CANCELLED);
  5798.  
  5799.             rs = ps.executeQuery ();
  5800.  
  5801.             if (rs.next())
  5802.             {
  5803.                 boolean hasTreatmentPeriodAtThisHospital = false;
  5804.                 boolean hasApprovedTreatmentPeriod       = false;
  5805.  
  5806.                 do
  5807.                 {
  5808.                     if (rs.getLong("HOSPITALCODE") == treatmentServiceBean.getHospitalCode())
  5809.                     {
  5810.                         hasTreatmentPeriodAtThisHospital = true;
  5811.  
  5812.                         if (rs.getShort("TREATMENTSTATUS") == OHConstants.TRMT_STS_APPROVED)
  5813.                         {
  5814.                             treatmentPeriodBean=new TreatmentPeriodBean();
  5815.                             treatmentPeriodBean.setTreatmentId(rs.getLong("TREATMENTID"));
  5816.                             treatmentPeriodBean.setHospitalCode(rs.getLong("HOSPITALCODE"));
  5817.                             treatmentPeriodBean.setTreatmentStatus(rs.getShort("TREATMENTSTATUS"));
  5818.                             treatmentPeriodBean.setTreatmentType(rs.getShort("TREATMENTTYPE"));
  5819.                             treatmentPeriodBean.setStartDateGreg(rs.getTimestamp("STARTDATE"));
  5820.                             treatmentPeriodBean.setStartDateEntFmt(rs.getString("STARTDATEENTFMT"));
  5821.                             treatmentPeriodBean.setStartDateGreg(rs.getTimestamp("ENDDATE"));
  5822.                             treatmentPeriodBean.setStartDateEntFmt(rs.getString("ENDDATEENTFMT"));
  5823.  
  5824.                             hasApprovedTreatmentPeriod = true;
  5825.                             break;
  5826.                         }
  5827.                     }
  5828.                 }
  5829.                 while (rs.next());
  5830.  
  5831.                 if (! hasTreatmentPeriodAtThisHospital)
  5832.                 {
  5833.                     throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  5834.                                                GOSIConstants.SOCIAL_INSURANCE,
  5835.                                                this.getClass().toString(),
  5836.                                                "checkTreatmentPeriodCoverage()",
  5837.                                                null,
  5838.                                                "SOI_ERR_5904");
  5839.                 }
  5840.  
  5841.                 if (! hasApprovedTreatmentPeriod)
  5842.                 {
  5843.                     throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  5844.                                                GOSIConstants.SOCIAL_INSURANCE,
  5845.                                                this.getClass().toString(),
  5846.                                                "checkTreatmentPeriodCoverage()",
  5847.                                                null,
  5848.                                                "SOI_ERR_5905");
  5849.                 }
  5850.             }
  5851.             else
  5852.             {
  5853.                 throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  5854.                                            GOSIConstants.SOCIAL_INSURANCE,
  5855.                                            this.getClass().toString(),
  5856.                                            "checkTreatmentPeriodCoverage()",
  5857.                                            null,
  5858.                                            "SOI_ERR_5906");
  5859.             }
  5860.         }
  5861.         catch (GOSIException ge)
  5862.         {
  5863.             throw   ge;
  5864.         }
  5865.         catch (Exception e)
  5866.         {
  5867.             throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  5868.                                        GOSIConstants.SOCIAL_INSURANCE,
  5869.                                        this.getClass().toString(),
  5870.                                        "checkTreatmentPeriodCoverage()",
  5871.                                        e,
  5872.                                        "CMN_ERR_1000");
  5873.         }
  5874.         finally
  5875.         {
  5876.             GOSIUtilities.cleanUp (con, ps, rs);
  5877.         }
  5878.         return treatmentPeriodBean;
  5879.     }
  5880.  
  5881.     /**
  5882.     * @METHOD NAME              :   calculateTreatmentServiceAmount
  5883.     * @INFORMATION              :   This method is to calculate Treatment Service Amount
  5884.     * @PARAM                    :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.TreatmentServiceBean
  5885.     * @RETURN                   :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.TreatmentServiceBean
  5886.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  5887.     * @LAST MODIFIED BY         :
  5888.     * @LAST MODIFIED DATE       :
  5889.     **/
  5890.     public TreatmentServiceBean calculateTreatmentServiceAmount (TreatmentServiceBean treatmentServiceBean , ArrayList treatmentServicesList) throws GOSIException
  5891.     {
  5892.         PreparedStatement  ps  = null;
  5893.         ResultSet          rs  = null;
  5894.         StringBuilder sqlQuery =new StringBuilder();
  5895.         StringBuilder sqlQuery2 =new StringBuilder();
  5896.         PreparedStatement  ps2  = null;
  5897.         ResultSet          rs2  = null;
  5898.  
  5899.         try
  5900.         {
  5901.           if(treatmentServiceBean.getTreatmentType().equals(OHConstants.TRMT_SRVC_TYPE_TREATMENT_SERVICE.shortValue()))
  5902.           {
  5903.              sqlQuery.append("SELECT NVL (treatmentdescarb, treatmentdesceng) AS description, ");
  5904.              sqlQuery.append("       price, needsapproval ,isNonDiscount ");
  5905.              sqlQuery.append("  FROM " + SITables.T_TRTMSERVICELIST );
  5906.              sqlQuery.append(" WHERE hospitalcode = ? " );
  5907.              sqlQuery.append("   AND treatmentcode = ? " );
  5908.              sqlQuery.append("   AND status = ? ");
  5909.  
  5910.             con = GOSIUtilities.getConnection (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  5911.             GOSIDebug.debugMessages("sqlQuery : "+sqlQuery.toString());
  5912.             ps = con.prepareStatement (sqlQuery.toString());
  5913.  
  5914.             ps.setLong    (1, treatmentServiceBean.getHospitalCode());
  5915.             ps.setString  (2, treatmentServiceBean.getTrmtCode());
  5916.             ps.setShort   (3, OHConstants.VS_APPROVED);
  5917.  
  5918.             rs = ps.executeQuery ();
  5919.  
  5920.             if (rs.next())
  5921.             {
  5922.                 treatmentServiceBean.setTrmt      (rs.getString ("DESCRIPTION"));
  5923.                 treatmentServiceBean.setTrmtDesc  (rs.getString ("DESCRIPTION"));
  5924.                 treatmentServiceBean.setUnitPrice (new Double(rs.getDouble("PRICE")));
  5925.                 treatmentServiceBean.setIsNonDiscount(rs.getByte("ISNONDISCOUNT"));
  5926.                  treatmentServiceBean.setTrmtAmt   ((treatmentServiceBean.getUnitPrice() * treatmentServiceBean.getUnits())*(1-(treatmentServiceBean.getDiscountPercentage()/100)));
  5927.  
  5928.                 if (rs.getShort("NEEDSAPPROVAL") == OHConstants.TRTM_NEEDSAPPROVAL_NEED)
  5929.                 {
  5930.                     /* Doctor approval is necessary for this treatment service */
  5931.                     GOSIUtilities.cleanUp (ps, rs);
  5932.                     sqlQuery=new StringBuilder();
  5933.                     String trmtDateString=GOSIUtilities.getDateFullString(treatmentServiceBean.getTrmtDateGreg());
  5934.                     sqlQuery.append("SELECT sum (numberofservices) as numberofservices " );
  5935.                     sqlQuery.append(" FROM T_TRMTSERVICEREQUESTAPPROVAL WHERE" );
  5936.                    
  5937.                     if(treatmentServiceBean.getInjuryId()!=null)
  5938.                         sqlQuery.append(" injuryid = ? ");
  5939.                     else
  5940.                         sqlQuery.append(" disabilityassessmentid = ? ");
  5941.                    
  5942.                     sqlQuery.append(" AND hospitalcode = ? " );
  5943.                     sqlQuery.append(" AND treatmentcode = ? " );
  5944.                     sqlQuery.append(" AND requeststatus = ? ");
  5945.                     sqlQuery.append(" AND requestdate >= ? ");
  5946.                     sqlQuery.append(" AND requestdate <= ? ");
  5947.                     GOSIDebug.debugMessages("sqlQuery : "+sqlQuery.toString());
  5948.                     ps = con.prepareStatement (sqlQuery.toString());
  5949.                     ps.setLong    (1, treatmentServiceBean.getInjuryId()!=null?treatmentServiceBean.getInjuryId():treatmentServiceBean.getDisbAssmtId());
  5950.                     ps.setLong    (2, treatmentServiceBean.getHospitalCode());
  5951.                     ps.setString  (3, treatmentServiceBean.getTrmtCode());
  5952.                     ps.setShort   (4, OHConstants.TRMT_REQ_APPROVED);
  5953.                     ps.setTimestamp(5, OHUtilities.getGregDate(OHUtilities.getMonthStartDate(OHUtilities.getMonth(trmtDateString),
  5954.                             OHUtilities.getYear(trmtDateString)),OHConstants.GREGORIAN));
  5955.                     ps.setTimestamp  (6, OHUtilities.getGregDate(OHUtilities.getMonthEndDate(trmtDateString),OHConstants.GREGORIAN));
  5956.                     rs = ps.executeQuery ();
  5957.  
  5958.                     if (rs.next())
  5959.                     {
  5960.                         int numberOfRequestServices=rs.getInt("NUMBEROFSERVICES");
  5961.                         int numberOfAvailableServices=0;
  5962.                         int numberOfTreatmentServices=0;
  5963.                         int numberOfTreatmentServicesThatUsed = 0;
  5964.                         for (int i = 0; i < treatmentServicesList.size(); i++)
  5965.                         {
  5966.                             TreatmentServiceBean existingTreatmentServiceBean = (TreatmentServiceBean) treatmentServicesList.get (i);
  5967.  
  5968.                             if (existingTreatmentServiceBean.getTrmtCode().equals(treatmentServiceBean.getTrmtCode()))
  5969.                             {
  5970.                                 numberOfTreatmentServicesThatUsed+=treatmentServiceBean.getUnits();
  5971.                             }
  5972.                         }
  5973.                         /*if (rs.getShort("REQUESTSTATUS") == OHConstants.TRMT_REQ_ENTERED)
  5974.                         {
  5975.                             throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  5976.                                                        GOSIConstants.SOCIAL_INSURANCE,
  5977.                                                        this.getClass().toString(),
  5978.                                                        "calculateTreatmentServiceAmount()",
  5979.                                                        null,
  5980.                                                        "SOI_ERR_5900");
  5981.                         }*/
  5982.                         sqlQuery2=new StringBuilder();
  5983.                         sqlQuery2.append("SELECT SUM (NVL (D.APPROVEDUNITS, D.UNITS)) AS NUMBEROFTRMTSERVICE ");
  5984.                         sqlQuery2.append(" FROM  T_TRMTSERVICESHDR H LEFT JOIN  T_TRMTSERVICESDET D ON D.TRMTSERVICEHDRID = H.TRMTSERVICEHDRID WHERE");
  5985.                        
  5986.                         if(treatmentServiceBean.getInjuryId()!=null)
  5987.                             sqlQuery2.append(" H.INJURYID = ?");
  5988.                         else
  5989.                             sqlQuery2.append(" H.DISASSMTID=? ");
  5990.                        
  5991.                         sqlQuery2.append(" AND H.HOSPITALCODE = ? AND D.ICD10TRMTDIAGNOSISCODE= ? ");
  5992.                         sqlQuery2.append(" AND d.TRMTDATE >= ?  AND d.TRMTDATE <= ?  AND D.TRMTSRVCSTATUS NOT IN (? ,?)");
  5993.                         GOSIDebug.debugMessages("sqlQuery : "+sqlQuery2.toString());
  5994.                         ps2 = con.prepareStatement (sqlQuery2.toString());
  5995.                                                
  5996.                         ps2.setLong    (1, treatmentServiceBean.getInjuryId()!=null?treatmentServiceBean.getInjuryId():treatmentServiceBean.getDisbAssmtId());
  5997.                         ps2.setLong    (2, treatmentServiceBean.getHospitalCode());
  5998.                         ps2.setString  (3, treatmentServiceBean.getTrmtCode());
  5999.                         ps2.setTimestamp(4, OHUtilities.getGregDate(OHUtilities.getMonthStartDate(OHUtilities.getMonth(trmtDateString),
  6000.                                 OHUtilities.getYear(trmtDateString)),OHConstants.GREGORIAN));
  6001.                         ps2.setTimestamp  (5, OHUtilities.getGregDate(OHUtilities.getMonthEndDate(trmtDateString),OHConstants.GREGORIAN));
  6002.                         ps2.setShort   (6, OHConstants.TRMT_SRVC_STS_REJECTED);
  6003.                         ps2.setShort   (7, OHConstants.TRMT_SRVC_STS_CANCELLED);
  6004.                        
  6005.                         rs2 = ps2.executeQuery ();
  6006.                         if (rs2.next())
  6007.                         {
  6008.                             if (rs2.getObject("NUMBEROFTRMTSERVICE")!=null)
  6009.                                 numberOfTreatmentServices=rs2.getInt("NUMBEROFTRMTSERVICE");
  6010.  
  6011.  
  6012.  
  6013.  
  6014.                         }
  6015.                         numberOfAvailableServices=numberOfRequestServices-numberOfTreatmentServices-numberOfTreatmentServicesThatUsed;
  6016.                        
  6017.                         if (numberOfAvailableServices==0)
  6018.                         {
  6019.                             throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  6020.                                        GOSIConstants.SOCIAL_INSURANCE,
  6021.                                        this.getClass().toString(),
  6022.                                        "calculateTreatmentServiceAmount()",
  6023.                                        null,
  6024.                                        "SOI_ERR_5902");
  6025.                         }
  6026.                         else if (numberOfAvailableServices < treatmentServiceBean.getUnits())
  6027.                         {
  6028.                                 throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  6029.                                                         GOSIConstants.SOCIAL_INSURANCE,
  6030.                                                         this.getClass().toString(),
  6031.                                                         "calculateTreatmentServiceAmount()",
  6032.                                                         null,
  6033.                                                         "SOI_ERR_5901");
  6034.                         }
  6035.                     }
  6036.                     else
  6037.                     {
  6038.                         throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  6039.                                                    GOSIConstants.SOCIAL_INSURANCE,
  6040.                                                    this.getClass().toString(),
  6041.                                                    "calculateTreatmentServiceAmount()",
  6042.                                                    null,
  6043.                                                    "SOI_ERR_5902");
  6044.                     }
  6045.                 }
  6046.             }
  6047.             else
  6048.             {
  6049.                 throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  6050.                                            GOSIConstants.SOCIAL_INSURANCE,
  6051.                                            this.getClass().toString(),
  6052.                                            "calculateTreatmentServiceAmount()",
  6053.                                            null,
  6054.                                            "SOI_ERR_5899");
  6055.             }
  6056.           }
  6057.           else if(treatmentServiceBean.getTreatmentType().equals(OHConstants.TRMT_SRVC_TYPE_MEDICINE.shortValue()))
  6058.           {
  6059.               sqlQuery =new StringBuilder();
  6060.               sqlQuery.append("SELECT ID, REGISTRATIONNUM , TRADENAME, STRENGTHVALUE, ");
  6061.               sqlQuery.append(" UNITOFSTRENGTH, VOLUME, UNITOFVOLUME, PUBLICPRICE  FROM T_SFDA");
  6062.               sqlQuery.append(" WHERE REGISTRATIONNUM = ? ");
  6063.  
  6064.               con = GOSIUtilities.getConnection (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  6065.                 GOSIDebug.debugMessages("sqlQuery : "+sqlQuery.toString());
  6066.               ps = con.prepareStatement (sqlQuery.toString());
  6067.  
  6068.               ps.setString    (1, treatmentServiceBean.getSFDACode());
  6069.               rs = ps.executeQuery ();
  6070.  
  6071.               if (rs.next())
  6072.               {
  6073.                    
  6074.                     String tradeName=rs.getString("TRADENAME");
  6075.                     String strengthValue=rs.getString("STRENGTHVALUE");
  6076.                     String unitOfStrength=rs.getString("UNITOFSTRENGTH");
  6077.                     String strength= strengthValue!=null &&unitOfStrength!=null?
  6078.                             " "+strengthValue+unitOfStrength:"";
  6079.                     String volumeValue=rs.getString("VOLUME");
  6080.                     String unitOfVolume=rs.getString("UNITOFVOLUME");
  6081.                     String volume=unitOfVolume!=null && !volumeValue.equalsIgnoreCase("null") ?
  6082.                             " Volume:"+volumeValue+unitOfVolume:"";
  6083.                     String name=tradeName+strength+volume;
  6084.                   treatmentServiceBean.setTrmtAmt   ((treatmentServiceBean.getMedicineAmount() * treatmentServiceBean.getUnits())*(1-(treatmentServiceBean.getDiscountPercentage()/100)));
  6085.                   treatmentServiceBean.setMedicineDescription(name);
  6086.                   GOSIDebug.debugMessages("TrmtAmt : "+treatmentServiceBean.getTrmtAmt());
  6087.               }
  6088.               else
  6089.               {
  6090.                   throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  6091.                            GOSIConstants.SOCIAL_INSURANCE,
  6092.                            this.getClass().toString(),
  6093.                            "calculateTreatmentServiceAmount()",
  6094.                            null,
  6095.                            "SOI_ERR_5899");
  6096.               }  
  6097.           }
  6098.         }
  6099.         catch (GOSIException ge)
  6100.         {
  6101.             throw   ge;
  6102.         }
  6103.         catch (Exception e)
  6104.         {
  6105.             throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  6106.                                        GOSIConstants.SOCIAL_INSURANCE,
  6107.                                        this.getClass().toString(),
  6108.                                        "calculateTreatmentServiceAmount()",
  6109.                                        e,
  6110.                                        "CMN_ERR_1000");
  6111.         }
  6112.         finally
  6113.         {
  6114.             GOSIUtilities.cleanUp (con, ps, rs);
  6115.         }
  6116.  
  6117.         return  treatmentServiceBean;
  6118.     }
  6119.  
  6120.     /**
  6121.     * @METHOD NAME              :   isTreatmentServiceAlreadyEntered
  6122.     * @INFORMATION              :   This method is to is Treatment Service Already Entered
  6123.     * @PARAM                    :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.TreatmentServiceBean
  6124.     * @RETURN                   :   class java.lang.Boolean
  6125.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  6126.     * @LAST MODIFIED BY         :
  6127.     * @LAST MODIFIED DATE       :
  6128.     **/
  6129.     public Boolean isTreatmentServiceAlreadyEntered (TreatmentServiceBean treatmentServiceBean) throws GOSIException
  6130.     {
  6131.         Boolean  isTreatmentServiceAlreadyEntered  = null;
  6132.  
  6133.         PreparedStatement  ps  = null;
  6134.         ResultSet          rs  = null;
  6135.  
  6136.         try
  6137.         {
  6138.             StringBuilder sqlQuery=new StringBuilder();
  6139.             sqlQuery.append("SELECT COUNT(*) AS num_trmt_services ");
  6140.             sqlQuery.append("  FROM " + SITables.T_TRMTSERVICESHDR + " hdr, " + SITables.T_TRMTSERVICESDET + " det ");
  6141.             sqlQuery.append(" WHERE hdr.trmtservicehdrid = det.trmtservicehdrid ");
  6142.             sqlQuery.append("   AND " + (treatmentServiceBean.getInjuryId() != null ? "hdr.injuryid = ? ": "hdr.disassmtid = ? "));
  6143.             sqlQuery.append("   AND hdr.hospitalcode = ? ");
  6144.             sqlQuery.append("   AND det.trmtdate = ? " );
  6145.             sqlQuery.append("   AND det.trmtsrvcstatus <> ? ");
  6146.  
  6147.             con = GOSIUtilities.getConnection (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  6148.             if(treatmentServiceBean.getSFDACode()!=null){
  6149.                 sqlQuery.append("  AND det.sfdacode = ? ");
  6150.             }
  6151.             else{
  6152.                 sqlQuery.append("   AND det.icd10trmtdiagnosiscode = ? ") ;
  6153.             }
  6154.             GOSIDebug.debugMessages(sqlQuery.toString());
  6155.             ps = con.prepareStatement (sqlQuery.toString());
  6156.             int i=1;
  6157.  
  6158.             ps.setLong      (i++, treatmentServiceBean.getInjuryId() != null ? treatmentServiceBean.getInjuryId()
  6159.                                                                            : treatmentServiceBean.getDisbAssmtId());
  6160.             ps.setLong      (i++, treatmentServiceBean.getHospitalCode());
  6161.             ps.setTimestamp (i++, treatmentServiceBean.getTrmtDateGreg());
  6162.             ps.setShort     (i++, OHConstants.TRMT_SRVC_STS_CANCELLED);
  6163.            
  6164.             if(treatmentServiceBean.getSFDACode()!=null)
  6165.             {
  6166.                 ps.setString    (i++, treatmentServiceBean.getSFDACode());
  6167.             }
  6168.             else
  6169.             {
  6170.                 ps.setString    (i++, treatmentServiceBean.getTrmtCode());
  6171.             }
  6172.            
  6173.  
  6174.  
  6175.             rs = ps.executeQuery ();
  6176.  
  6177.             if (rs.next() && rs.getInt("NUM_TRMT_SERVICES") > 0)
  6178.             {
  6179.                 isTreatmentServiceAlreadyEntered = Boolean.TRUE;
  6180.             }
  6181.             else
  6182.             {
  6183.                 isTreatmentServiceAlreadyEntered = Boolean.FALSE;
  6184.             }
  6185.         }
  6186.         catch (GOSIException ge)
  6187.         {
  6188.             throw   ge;
  6189.         }
  6190.         catch (Exception e)
  6191.         {
  6192.             throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  6193.                                        GOSIConstants.SOCIAL_INSURANCE,
  6194.                                        this.getClass().toString(),
  6195.                                        "isTreatmentServiceAlreadyEntered()",
  6196.                                        e,
  6197.                                        "CMN_ERR_1000");
  6198.         }
  6199.         finally
  6200.         {
  6201.             GOSIUtilities.cleanUp (con, ps, rs);
  6202.         }
  6203.  
  6204.         return  isTreatmentServiceAlreadyEntered;
  6205.     }
  6206.  
  6207.     /**
  6208.     * @METHOD NAME              :   saveDeductionOnTreatmentServices
  6209.     * @INFORMATION              :   This method is to save Treatment Services
  6210.     * @PARAM                    :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.TreatmentHeaderBean,
  6211.                                     class java.util.ArrayList
  6212.     * @RETURN                   :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.TreatmentHeaderBean
  6213.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  6214.     * @LAST MODIFIED BY         :
  6215.     * @LAST MODIFIED DATE       :
  6216.     **/
  6217.     public TreatmentHeaderBean saveDeductionOnTreatmentServices (TreatmentHeaderBean treatmentServicesHeaderBean, ArrayList treatmentServicesList) throws GOSIException
  6218.     {
  6219.         PreparedStatement  ps  = null;
  6220.         ResultSet          rs  = null;
  6221.  
  6222.         try
  6223.         {
  6224.             TreatmentServiceHeaderEntityHome treatmentServiceHeaderEntityHome = (TreatmentServiceHeaderEntityHome)
  6225.             ServiceLocator.getInstance ().getRemoteHome (OHConstants.TRMT_SRVC_HDR_ENTITY_JNDI, TreatmentServiceHeaderEntityHome.class);
  6226.            
  6227.             TreatmentServiceDetailEntityHome treatmentServiceDetailEntityHome = (TreatmentServiceDetailEntityHome)
  6228.             ServiceLocator.getInstance ().getRemoteHome (OHConstants.TRMT_SRVC_DET_ENTITY_JNDI, TreatmentServiceDetailEntityHome.class);
  6229.            
  6230.             Long workflowId = GOSIUtilities.getPrimaryKey ("TRMTSRVCWRKFLOID", treatmentServicesHeaderBean.getLastModifiedBy());
  6231.  
  6232.             TreatmentServiceHeaderEntity treatmentServiceHeaderEntity=
  6233.             treatmentServiceHeaderEntityHome.findByPrimaryKey(treatmentServicesHeaderBean.getTrmtServiceHdrId());
  6234.            
  6235.             treatmentServiceHeaderEntity.setAppealStatus(treatmentServicesHeaderBean.getAppealStatus(), treatmentServicesHeaderBean.getLastModifiedBy()
  6236.                     , treatmentServicesHeaderBean.getLastModifiedTimestamp());
  6237.  
  6238.             for (int i = 0; i < treatmentServicesList.size(); i++)
  6239.             {
  6240.                 TreatmentServiceBean treatmentServiceBean = (TreatmentServiceBean) treatmentServicesList.get (i);
  6241.                 treatmentServiceBean.setAppealDedcutionWfId(workflowId);
  6242.  
  6243.                 TreatmentServiceDetailEntity treatmentServiceEntity= treatmentServiceDetailEntityHome.findByPrimaryKey(
  6244.                         treatmentServiceBean.getTrmtServiceDetId());
  6245.                 treatmentServiceEntity.modifyAppealDedcution(treatmentServiceBean);
  6246.             }
  6247.  
  6248.             WorkflowParamBean workflowParamBean = new WorkflowParamBean ();
  6249.  
  6250.             workflowParamBean.setUserId            (treatmentServicesHeaderBean.getLastModifiedBy());
  6251.             workflowParamBean.setUserLocationId    (treatmentServicesHeaderBean.getFieldOffice());
  6252.             workflowParamBean.setRoleId            (OHConstants.ROLE_ID_HOSPITAL_USER);
  6253.             workflowParamBean.setModuleId          (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  6254.             workflowParamBean.setKeyVal1           (treatmentServicesHeaderBean.getSocInsNumber().toString());
  6255.             workflowParamBean.setKeyVal2           (GOSIUtilities.getDateFullString(treatmentServicesHeaderBean.getInjuryDate()));
  6256.             workflowParamBean.setStepShortName     ("ADD_TRMT_SRVC");
  6257.             workflowParamBean.setrecordDescription (GOSIErrorMessages.getErrorDesc("SOI_ERR_5933") + " - " +
  6258.                                                     treatmentServicesHeaderBean.getSocInsNumber());
  6259.             workflowParamBean.setRoutingCriterion  (GOSIConstants.COMPLETED);
  6260.  
  6261.             workflowParamBean.setPrimaryKeyOfTherecord (workflowId.toString());
  6262.  
  6263.             GOSIUtilities.startWorkflow (workflowParamBean);
  6264.         }
  6265.         catch (GOSIException ge)
  6266.         {
  6267.             ctx.setRollbackOnly ();
  6268.  
  6269.             throw   ge;
  6270.         }
  6271.         catch (Exception e)
  6272.         {
  6273.             ctx.setRollbackOnly ();
  6274.  
  6275.             throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  6276.                                        GOSIConstants.SOCIAL_INSURANCE,
  6277.                                        this.getClass().toString(),
  6278.                                        "saveDeductionOnTreatmentServices()",
  6279.                                        e,
  6280.                                        "CMN_ERR_1000");
  6281.         }
  6282.         finally
  6283.         {
  6284.             GOSIUtilities.cleanUp (con, ps, rs);
  6285.         }
  6286.  
  6287.         return  treatmentServicesHeaderBean;
  6288.     }
  6289.    
  6290.     /**
  6291.     * @METHOD NAME              :   saveTreatmentServices
  6292.     * @INFORMATION              :   This method is to save Treatment Services
  6293.     * @PARAM                    :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.TreatmentHeaderBean,
  6294.                                     class java.util.ArrayList
  6295.     * @RETURN                   :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.TreatmentHeaderBean
  6296.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  6297.     * @LAST MODIFIED BY         :
  6298.     * @LAST MODIFIED DATE       :
  6299.     **/
  6300.     public TreatmentHeaderBean saveTreatmentServices (TreatmentHeaderBean treatmentServicesHeaderBean, ArrayList treatmentServicesList) throws GOSIException
  6301.     {
  6302.         PreparedStatement  ps  = null;
  6303.         ResultSet          rs  = null;
  6304.  
  6305.         try
  6306.         {
  6307.             String  patientNumber = treatmentServicesHeaderBean.getPatientNumber ();
  6308.  
  6309.             /* Validate patient number */
  6310.             boolean isPatientNumberValid = true;
  6311.             if (! Character.isLetterOrDigit(patientNumber.charAt(0)))               isPatientNumberValid = false;
  6312.             for (int i = 1; i < patientNumber.length()-1; i++)
  6313.                 if (! Character.isLetterOrDigit(patientNumber.charAt(i))
  6314.                     && patientNumber.charAt(i) != '-')                              isPatientNumberValid = false;
  6315.             if (! Character.isLetterOrDigit
  6316.                 (patientNumber.charAt(patientNumber.length()-1)))                   isPatientNumberValid = false;
  6317.  
  6318.             if (! isPatientNumberValid)
  6319.             {
  6320.                 throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  6321.                                            GOSIConstants.SOCIAL_INSURANCE,
  6322.                                            this.getClass().toString(),
  6323.                                            "saveTreatmentServices()",
  6324.                                            null,
  6325.                                            "SOI_ERR_5880");
  6326.             }
  6327.  
  6328.             String  sqlQuery    = "SELECT trmtservicehdrid " +
  6329.                                   "  FROM " + SITables.T_TRMTSERVICESHDR +
  6330.                                   " WHERE " + (treatmentServicesHeaderBean.getInjuryId() != null ? "injuryid = ?"
  6331.                                                                                                  : "disassmtid = ?") +
  6332.                                   "   AND hospitalcode = ? " +
  6333.                                   "   AND patientnumber = '" + patientNumber + "' " +
  6334.                                   "   AND invoicedetailsid IN (SELECT invoicedetailsid " +
  6335.                                   "                              FROM " + SITables.T_REGHOSPINVOICEDET +
  6336.                                   "                             WHERE invoiceheaderid = ?) ";
  6337.  
  6338.             con = GOSIUtilities.getConnection (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  6339.  
  6340.             ps = con.prepareStatement (sqlQuery);
  6341.  
  6342.             ps.setLong    (1, treatmentServicesHeaderBean.getInjuryId() != null ? treatmentServicesHeaderBean.getInjuryId()
  6343.                                                                                 : treatmentServicesHeaderBean.getDisAssmtId());
  6344.             ps.setLong    (2, treatmentServicesHeaderBean.getHospitalCode());
  6345.             ps.setLong    (3, treatmentServicesHeaderBean.getInvoiceHeaderId());
  6346.  
  6347.             rs = ps.executeQuery ();
  6348.  
  6349.             if (rs.next())
  6350.             {
  6351.                 treatmentServicesHeaderBean.setTrmtServiceHdrId (rs.getLong("TRMTSERVICEHDRID"));
  6352.             }
  6353.             else
  6354.             {
  6355.                 treatmentServicesHeaderBean.setTrmtServiceHdrId  (GOSIUtilities.getPrimaryKey (SITables.T_TRMTSERVICESHDR, treatmentServicesHeaderBean.getCreatedBy()));
  6356.                 treatmentServicesHeaderBean.setCreationTimestamp (new Timestamp(System.currentTimeMillis()));
  6357.  
  6358.                 TreatmentServiceHeaderEntityHome treatmentServiceHeaderEntityHome = (TreatmentServiceHeaderEntityHome)
  6359.                     ServiceLocator.getInstance ().getRemoteHome (OHConstants.TRMT_SRVC_HDR_ENTITY_JNDI, TreatmentServiceHeaderEntityHome.class);
  6360.  
  6361.                 treatmentServiceHeaderEntityHome.create (treatmentServicesHeaderBean);
  6362.             }
  6363.  
  6364.             Long keys[]     = GOSIUtilities.getPrimaryKeyList (SITables.T_TRMTSERVICESDET, treatmentServicesList.size(), treatmentServicesHeaderBean.getCreatedBy());
  6365.             Long workflowId = GOSIUtilities.getPrimaryKey ("TRMTSRVCWRKFLOID", treatmentServicesHeaderBean.getCreatedBy());
  6366.  
  6367.             for (int i = 0; i < treatmentServicesList.size(); i++)
  6368.             {
  6369.                 TreatmentServiceBean treatmentServiceBean = (TreatmentServiceBean) treatmentServicesList.get (i);
  6370.  
  6371.                 treatmentServiceBean.setTrmtServiceHdrId  (treatmentServicesHeaderBean.getTrmtServiceHdrId());
  6372.                 treatmentServiceBean.setTrmtServiceDetId  (keys[i]);
  6373.                 treatmentServiceBean.setTrmtSrvcWrkfloId  (workflowId);
  6374.                 treatmentServiceBean.setCreatedBy         (treatmentServicesHeaderBean.getCreatedBy());
  6375.                 treatmentServiceBean.setCreationTimestamp (new Timestamp(System.currentTimeMillis()));
  6376.  
  6377.                 TreatmentServiceDetailEntityHome treatmentServiceDetailEntityHome = (TreatmentServiceDetailEntityHome)
  6378.                     ServiceLocator.getInstance ().getRemoteHome (OHConstants.TRMT_SRVC_DET_ENTITY_JNDI, TreatmentServiceDetailEntityHome.class);
  6379.  
  6380.                 treatmentServiceDetailEntityHome.create (treatmentServiceBean);
  6381.             }
  6382.  
  6383.             WorkflowParamBean workflowParamBean = new WorkflowParamBean ();
  6384.  
  6385.             workflowParamBean.setUserId            (treatmentServicesHeaderBean.getCreatedBy());
  6386.             workflowParamBean.setUserLocationId    (treatmentServicesHeaderBean.getFieldOffice());
  6387.             workflowParamBean.setRoleId            (OHConstants.ROLE_ID_HOSPITAL_USER);
  6388.             workflowParamBean.setModuleId          (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  6389.             workflowParamBean.setKeyVal1           (treatmentServicesHeaderBean.getSocInsNumber().toString());
  6390.             workflowParamBean.setKeyVal2           (GOSIUtilities.getDateFullString(treatmentServicesHeaderBean.getInjuryDate()));
  6391.             workflowParamBean.setStepShortName     ("ADD_TRMT_SRVC");
  6392.             workflowParamBean.setrecordDescription (GOSIErrorMessages.getErrorDesc("SOI_ERR_5909") + " - " +
  6393.                                                     treatmentServicesHeaderBean.getSocInsNumber());
  6394.             workflowParamBean.setRoutingCriterion  (GOSIConstants.COMPLETED);
  6395.  
  6396.             workflowParamBean.setPrimaryKeyOfTherecord (workflowId.toString());
  6397.  
  6398.             GOSIUtilities.startWorkflow (workflowParamBean);
  6399.         }
  6400.         catch (GOSIException ge)
  6401.         {
  6402.             ctx.setRollbackOnly ();
  6403.  
  6404.             throw   ge;
  6405.         }
  6406.         catch (Exception e)
  6407.         {
  6408.             ctx.setRollbackOnly ();
  6409.  
  6410.             throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  6411.                                        GOSIConstants.SOCIAL_INSURANCE,
  6412.                                        this.getClass().toString(),
  6413.                                        "saveTreatmentServices()",
  6414.                                        e,
  6415.                                        "CMN_ERR_1000");
  6416.         }
  6417.         finally
  6418.         {
  6419.             GOSIUtilities.cleanUp (con, ps, rs);
  6420.         }
  6421.  
  6422.         return  treatmentServicesHeaderBean;
  6423.     }
  6424.  
  6425.  
  6426.     /**
  6427.     * @METHOD NAME              :   canRecalculateTreatmentInvoice
  6428.     * @INFORMATION              :   This method is to can Recalculate Treatment Invoice
  6429.     * @PARAM                    :   class java.lang.Long
  6430.     * @RETURN                   :   class java.lang.Boolean
  6431.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  6432.     * @LAST MODIFIED BY         :
  6433.     * @LAST MODIFIED DATE       :
  6434.     **/
  6435.     public Boolean canRecalculateTreatmentInvoice (Long treatmentServiceHeaderId) throws GOSIException
  6436.     {
  6437.         Boolean  canRecalculateTreatmentInvoice = null;
  6438.  
  6439.         PreparedStatement  ps  = null;
  6440.         ResultSet          rs  = null;
  6441.  
  6442.         try
  6443.         {
  6444.             String  sqlQuery1   = "SELECT     hdr.invoicedetailsid " +
  6445.                                   "     FROM  " + SITables.T_TRMTSERVICESHDR + " hdr " +
  6446.                                   "    WHERE  hdr.trmtservicehdrid = ? ";
  6447.  
  6448.             con = GOSIUtilities.getConnection (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  6449.  
  6450.             ps = con.prepareStatement (sqlQuery1);
  6451.  
  6452.             ps.setLong    (1, treatmentServiceHeaderId);
  6453.  
  6454.             rs = ps.executeQuery ();
  6455.  
  6456.             if (rs.next())
  6457.             {
  6458.                 if (rs.getObject("INVOICEDETAILSID") != null)
  6459.                 {
  6460.                     canRecalculateTreatmentInvoice = Boolean.TRUE;
  6461.                 }
  6462.                 else
  6463.                 {
  6464.                     canRecalculateTreatmentInvoice = Boolean.FALSE;
  6465.                 }
  6466.             }
  6467.         }
  6468.         catch (GOSIException ge)
  6469.         {
  6470.             ctx.setRollbackOnly ();
  6471.  
  6472.             throw   ge;
  6473.         }
  6474.         catch (Exception e)
  6475.         {
  6476.             ctx.setRollbackOnly ();
  6477.  
  6478.             throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  6479.                                        GOSIConstants.SOCIAL_INSURANCE,
  6480.                                        this.getClass().toString(),
  6481.                                        "canRecalculateTreatmentInvoice()",
  6482.                                        e,
  6483.                                        "CMN_ERR_1000");
  6484.         }
  6485.         finally
  6486.         {
  6487.             GOSIUtilities.cleanUp (con, ps, rs);
  6488.         }
  6489.  
  6490.         return  canRecalculateTreatmentInvoice;
  6491.     }
  6492.  
  6493.     /**
  6494.     * @METHOD NAME              :   recalculateTreatmentInvoiceDetail
  6495.     * @INFORMATION              :   This method is to recalculate Treatment Invoice Detail
  6496.     * @PARAM                    :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.TreatmentHeaderBean,
  6497.                                     class java.util.ArrayList,
  6498.                                     class java.lang.Long,
  6499.                                     class java.lang.Long,
  6500.                                     class java.lang.Boolean
  6501.     * @RETURN                   :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceDetailBean
  6502.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  6503.     * @LAST MODIFIED BY         :
  6504.     * @LAST MODIFIED DATE       :
  6505.     **/
  6506.     public RegHospInvoiceDetailBean recalculateTreatmentInvoiceDetail (TreatmentHeaderBean  treatmentServicesHeaderBean,
  6507.                                                                        ArrayList            treatmentServices,
  6508.                                                                        Long                 treatmentInvoiceHeaderId,
  6509.                                                                        Long                 userId,
  6510.                                                                        Boolean              isFinallyApproved) throws GOSIException
  6511.     {
  6512.         PreparedStatement  ps  = null;
  6513.         ResultSet          rs  = null;
  6514.  
  6515.         try
  6516.         {
  6517.            
  6518.             boolean isHasDeduction=false;
  6519.             if(treatmentServices!=null
  6520.                     && ((TreatmentServiceBean) treatmentServices.get(0)).getAppealDedcutionWfId()!=null
  6521.                     && ((TreatmentServiceBean) treatmentServices.get(0)).getAppealDedcutionStatus()!=null){
  6522.                 isHasDeduction=true;
  6523.             }
  6524.             String  sqlQuery1   = "SELECT     hdr.invoicedetailsid " +
  6525.                                   "     FROM  " + SITables.T_TRMTSERVICESHDR + " hdr " +
  6526.                                   "    WHERE  hdr.trmtservicehdrid = ? ";
  6527.  
  6528.             con = GOSIUtilities.getConnection (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  6529.  
  6530.             ps = con.prepareStatement (sqlQuery1);
  6531.  
  6532.             ps.setLong    (1, treatmentServicesHeaderBean.getTrmtServiceHdrId());
  6533.  
  6534.             rs = ps.executeQuery ();
  6535.  
  6536.             if (rs.next())
  6537.             {
  6538.                 if (rs.getObject("INVOICEDETAILSID") != null)
  6539.                 {
  6540.                     treatmentServicesHeaderBean.setInvoiceDetailsId (rs.getLong("INVOICEDETAILSID"));
  6541.                 }
  6542.             }
  6543.  
  6544.             GOSIUtilities.cleanUp (ps, rs);
  6545.  
  6546.             String  sqlQuery2   = "SELECT     det.trmtservicedetid, " +
  6547.                                   "           CASE det.icd10trmtdiagnosiscode WHEN ? THEN ? ELSE ? END AS trmtcode, trmtdate, NVL(trmtamt,0) AS trmtamt, " +
  6548.                                   "      NVL(SUM(REJECTEDTRMTAMT),0) AS rejectedamount, det.trmtsrvcstatus , det.isnondiscount " +
  6549.                                   "     FROM  " + SITables.T_TRMTSERVICESHDR + " hdr LEFT JOIN " + SITables.T_TRMTSERVICESDET + " det " +
  6550.                                   "  ON  det.trmtservicehdrid = hdr.trmtservicehdrid       WHERE  hdr.trmtservicehdrid = ? " +
  6551.                                   (treatmentServices != null ?( isHasDeduction?" AND  (det.appealdedcutionwfid <> ? OR det.appealdedcutionwfid is NULL)":
  6552.                                       "   AND  det.trmtsrvcwrkfloid <> ? " ): "") +
  6553.                                   "      AND  det.trmtsrvcstatus <> ? " +
  6554.                                   " GROUP BY  det.trmtservicedetid, icd10trmtdiagnosiscode, trmtdate, NVL(trmtamt,0) , det.trmtsrvcstatus , det.isnondiscount  ";
  6555.  
  6556.             GOSIDebug.debugMessages("Qeury :"+sqlQuery2);
  6557.             ps = con.prepareStatement (sqlQuery2);
  6558.  
  6559.             ps.setString  (1, OHConstants.ICD_MEDICINE_CODE);
  6560.             ps.setString  (2, OHConstants.ICD_MEDICINE_CODE);
  6561.             ps.setString  (3, OHConstants.TRMT_SRVC_BULK_ENTRY);
  6562.             ps.setLong    (4, treatmentServicesHeaderBean.getTrmtServiceHdrId());
  6563.             GOSIDebug.debugMessages("getTrmtServiceHdrId :"+treatmentServicesHeaderBean.getTrmtServiceHdrId());
  6564.  
  6565.             if (treatmentServices == null)
  6566.             {
  6567.                 ps.setShort   (5, OHConstants.TRMT_SRVC_STS_CANCELLED);
  6568.             }
  6569.             else
  6570.             {
  6571.                 if(isHasDeduction){
  6572.                     ps.setLong    (5, ((TreatmentServiceBean) treatmentServices.get(0)).getAppealDedcutionWfId());
  6573.                 }
  6574.                 else
  6575.                 {
  6576.                     ps.setLong    (5, ((TreatmentServiceBean) treatmentServices.get(0)).getTrmtSrvcWrkfloId());
  6577.                 }
  6578.                 GOSIDebug.debugMessages("getTrmtSrvcWrkfloId :"+((TreatmentServiceBean) treatmentServices.get(0)).getTrmtSrvcWrkfloId());
  6579.                 ps.setShort   (6, OHConstants.TRMT_SRVC_STS_CANCELLED);
  6580.             }
  6581.  
  6582.             rs = ps.executeQuery ();
  6583.  
  6584.             Timestamp  startDate = null;
  6585.             Timestamp  endDate   = null;
  6586.  
  6587.             double  servicesAmount          = 0.0;
  6588.             double  rejectedServicesAmount  = 0.0;
  6589.             double  medicinesAmount         = 0.0;
  6590.             double  rejectedMedicinesAmount = 0.0;
  6591.             double  nonDiscountAmount          = 0.0;
  6592.             double  rejectedNonDiscountAmount   = 0.0;
  6593.  
  6594.             while (rs.next())
  6595.             {
  6596.                 if (startDate == null || startDate.after(rs.getTimestamp("TRMTDATE")))
  6597.                 {
  6598.                     startDate = rs.getTimestamp ("TRMTDATE");
  6599.                 }
  6600.  
  6601.                 if (endDate == null || endDate.before(rs.getTimestamp("TRMTDATE")))
  6602.                 {
  6603.                     endDate = rs.getTimestamp ("TRMTDATE");
  6604.                 }
  6605.  
  6606.                 if (rs.getString("TRMTCODE").equals(OHConstants.TRMT_SRVC_BULK_ENTRY))
  6607.                 {
  6608.                     if (rs.getByte("ISNONDISCOUNT")==OHConstants.TRTM_ISNONDISCOUNT_YES.byteValue())
  6609.                     {
  6610.                         nonDiscountAmount += rs.getDouble ("TRMTAMT");
  6611.                        
  6612.                         if (rs.getShort("TRMTSRVCSTATUS") != OHConstants.TRMT_SRVC_STS_REJECTED)
  6613.                         {
  6614.                             rejectedNonDiscountAmount += rs.getDouble ("REJECTEDAMOUNT");
  6615.                         }
  6616.                         else
  6617.                         {
  6618.                             rejectedNonDiscountAmount += rs.getDouble ("TRMTAMT");
  6619.                         }
  6620.                     }
  6621.                     else
  6622.                     {
  6623.                         servicesAmount += rs.getDouble ("TRMTAMT");
  6624.                        
  6625.                         if (rs.getShort("TRMTSRVCSTATUS") != OHConstants.TRMT_SRVC_STS_REJECTED)
  6626.                         {
  6627.                             rejectedServicesAmount += rs.getDouble ("REJECTEDAMOUNT");
  6628.                         }
  6629.                         else
  6630.                         {
  6631.                             rejectedServicesAmount += rs.getDouble ("TRMTAMT");
  6632.                         }
  6633.                     }
  6634.                 }
  6635.                 else if(rs.getString("TRMTCODE").equals(OHConstants.ICD_MEDICINE_CODE))
  6636.                 {
  6637.                     medicinesAmount += rs.getDouble ("TRMTAMT");
  6638.  
  6639.                     if (rs.getShort("TRMTSRVCSTATUS") != OHConstants.TRMT_SRVC_STS_REJECTED)
  6640.                     {
  6641.                         rejectedMedicinesAmount += rs.getDouble ("REJECTEDAMOUNT");
  6642.                     }
  6643.                     else
  6644.                     {
  6645.                         rejectedMedicinesAmount += rs.getDouble ("TRMTAMT");
  6646.                     }
  6647.                 }
  6648.             }
  6649.             // TODO :  add new ATT for isNonDiscountService
  6650.             for (int i = 0; treatmentServices != null && i < treatmentServices.size(); i++)
  6651.             {
  6652.                 TreatmentServiceBean treatmentService = (TreatmentServiceBean) treatmentServices.get (i);
  6653.  
  6654.                 if (treatmentService.getTrmtSrvcStatus().equals(OHConstants.TRMT_SRVC_STS_CANCELLED) || treatmentService.getMode() == AuditBean.DELETE_MODE)
  6655.                 {
  6656.                     continue;
  6657.                 }
  6658.  
  6659.                 if (startDate == null || startDate.after(treatmentService.getTrmtDateGreg()))
  6660.                 {
  6661.                     startDate = treatmentService.getTrmtDateGreg ();
  6662.                 }
  6663.  
  6664.                 if (endDate == null || endDate.before(treatmentService.getTrmtDateGreg()))
  6665.                 {
  6666.                     endDate = treatmentService.getTrmtDateGreg ();
  6667.                 }
  6668.  
  6669.                 Double  treatmentAmount = treatmentService.getTrmtAmt ();
  6670.                 Double  rejectedTrmtAmt = treatmentService.getRejectedTrmtAmt();
  6671.  
  6672.                 if (treatmentService.getTrmtCode().equals(OHConstants.ICD_MEDICINE_CODE))
  6673.                 {
  6674.                     medicinesAmount += treatmentAmount;
  6675.  
  6676.                     if (treatmentService.getTrmtSrvcStatus().equals(OHConstants.TRMT_SRVC_STS_REJECTED))
  6677.                     {
  6678.                         rejectedMedicinesAmount += treatmentAmount;
  6679.                     }
  6680.                     else
  6681.                     {
  6682.                         rejectedMedicinesAmount += rejectedTrmtAmt;
  6683.                     }
  6684.                 }
  6685.                 else
  6686.                 {
  6687.                     if (treatmentService.getIsNonDiscount().equals(OHConstants.TRTM_ISNONDISCOUNT_YES))
  6688.                     {
  6689.                         nonDiscountAmount += treatmentAmount;
  6690.                        
  6691.                         if (treatmentService.getTrmtSrvcStatus().equals(OHConstants.TRMT_SRVC_STS_REJECTED))
  6692.                         {
  6693.                             rejectedNonDiscountAmount += treatmentAmount;
  6694.                         }
  6695.                         else
  6696.                         {
  6697.                             rejectedNonDiscountAmount += rejectedTrmtAmt;
  6698.                         }
  6699.                     }
  6700.                     else
  6701.                     {
  6702.                         servicesAmount += treatmentAmount;
  6703.                        
  6704.                         if (treatmentService.getTrmtSrvcStatus().equals(OHConstants.TRMT_SRVC_STS_REJECTED))
  6705.                         {
  6706.                             rejectedServicesAmount += treatmentAmount;
  6707.                         }
  6708.                         else
  6709.                         {
  6710.                             rejectedServicesAmount += rejectedTrmtAmt;
  6711.                         }
  6712.                     }
  6713.                 }
  6714.             }
  6715.            
  6716.             GOSIDebug.debugMessages("servicesAmount :"+servicesAmount);
  6717.             GOSIDebug.debugMessages("rejectedServicesAmount :"+rejectedServicesAmount);
  6718.             GOSIDebug.debugMessages("medicinesAmount :"+medicinesAmount);
  6719.             GOSIDebug.debugMessages("rejectedMedicinesAmount :"+rejectedMedicinesAmount);
  6720.  
  6721.             if (treatmentServicesHeaderBean.getInvoiceDetailsId() == null)
  6722.             {
  6723.                 RegHospInvoiceDetailBean treatmentInvoiceDetailBean = new RegHospInvoiceDetailBean ();
  6724.  
  6725.                 treatmentInvoiceDetailBean.setInvoiceDetailsId       (GOSIUtilities.getPrimaryKey("T_REGHOSPINVOICEDET", userId));
  6726.                 treatmentInvoiceDetailBean.setInvoiceHeaderId        (treatmentInvoiceHeaderId);
  6727.                 treatmentInvoiceDetailBean.setInjuryId               (treatmentServicesHeaderBean.getInjuryId());
  6728.                 treatmentInvoiceDetailBean.setDisbAssmtId            (treatmentServicesHeaderBean.getDisAssmtId());
  6729.                 treatmentInvoiceDetailBean.setSocInsNumber           (treatmentServicesHeaderBean.getSocInsNumber());
  6730.                 treatmentInvoiceDetailBean.setTrmtStartDate          (startDate);
  6731.                 treatmentInvoiceDetailBean.setTrmtStartDateEntFmt    (OHConstants.GREGORIAN);
  6732.                 treatmentInvoiceDetailBean.setTrmtEndDate            (endDate);
  6733.                 treatmentInvoiceDetailBean.setTrmtEndDateEntFmt      (OHConstants.GREGORIAN);
  6734.                 treatmentInvoiceDetailBean.setServicesAmount         (servicesAmount);
  6735.                 treatmentInvoiceDetailBean.setRejectedServiceAmount  (rejectedServicesAmount);
  6736.                 treatmentInvoiceDetailBean.setMedicinesAmount        (medicinesAmount);
  6737.                 treatmentInvoiceDetailBean.setRejectedMedicineAmount (rejectedMedicinesAmount);
  6738.                 treatmentInvoiceDetailBean.setNoDiscountAmount       (nonDiscountAmount);
  6739.                 treatmentInvoiceDetailBean.setRejectedNoDiscountAmount(rejectedNonDiscountAmount);
  6740.                 treatmentInvoiceDetailBean.setPageNumber             (getCurrentTreatmentInvoicePageNumber(treatmentInvoiceHeaderId));
  6741.                 treatmentInvoiceDetailBean.setStatus                 (OHConstants.REG_HOSP_INVC_DETAILS_IN_WORKFLOW);
  6742.                 treatmentInvoiceDetailBean.setCreatedBy              (userId);
  6743.                 treatmentInvoiceDetailBean.setCreationTimestamp      (new Timestamp(System.currentTimeMillis()));
  6744.  
  6745.                 RegHospitalInvoiceDetailEntityHome invoiceDetailEntityHome = (RegHospitalInvoiceDetailEntityHome)
  6746.                     ServiceLocator.getInstance ().getRemoteHome (OHConstants.REG_HOSP_INVOICE_DETAILS_ENTITY_JNDI, RegHospitalInvoiceDetailEntityHome.class);
  6747.  
  6748.                 invoiceDetailEntityHome.create (treatmentInvoiceDetailBean);
  6749.  
  6750.                 TreatmentServiceHeaderEntityHome treatmentServiceEntityHome = (TreatmentServiceHeaderEntityHome)
  6751.                     ServiceLocator.getInstance ().getRemoteHome (OHConstants.TRMT_SRVC_HDR_ENTITY_JNDI, TreatmentServiceHeaderEntityHome.class);
  6752.  
  6753.                 TreatmentServiceHeaderEntity treatmentServiceEntity = treatmentServiceEntityHome.findByPrimaryKey (treatmentServicesHeaderBean.getTrmtServiceHdrId());
  6754.  
  6755.                 treatmentServiceEntity.setInvoiceDetailsId      (treatmentInvoiceDetailBean.getInvoiceDetailsId());
  6756.                 treatmentServiceEntity.setLastModifiedBy        (userId);
  6757.                 treatmentServiceEntity.setLastModifiedTimestamp (new Timestamp(System.currentTimeMillis()));
  6758.  
  6759.                 return  treatmentInvoiceDetailBean;
  6760.             }
  6761.             else
  6762.             {
  6763.                 RegHospInvoiceDetailBean treatmentInvoiceDetailBean = new RegHospInvoiceDetailBean ();
  6764.  
  6765.                 treatmentInvoiceDetailBean.setInvoiceDetailsId         (treatmentServicesHeaderBean.getInvoiceDetailsId());
  6766.                 treatmentInvoiceDetailBean.setInjuryId                 (treatmentServicesHeaderBean.getInjuryId());
  6767.                 treatmentInvoiceDetailBean.setDisbAssmtId              (treatmentServicesHeaderBean.getDisAssmtId());
  6768.                 treatmentInvoiceDetailBean.setSocInsNumber             (treatmentServicesHeaderBean.getSocInsNumber());
  6769.                 treatmentInvoiceDetailBean.setTrmtStartDate            (startDate);
  6770.                 treatmentInvoiceDetailBean.setTrmtStartDateEntFmt      (OHConstants.GREGORIAN);
  6771.                 treatmentInvoiceDetailBean.setTrmtEndDate              (endDate);
  6772.                 treatmentInvoiceDetailBean.setTrmtEndDateEntFmt        (OHConstants.GREGORIAN);
  6773.                 treatmentInvoiceDetailBean.setServicesAmount           (servicesAmount);
  6774.                 treatmentInvoiceDetailBean.setRejectedServiceAmount    (rejectedServicesAmount);
  6775.                 treatmentInvoiceDetailBean.setMedicinesAmount          (medicinesAmount);
  6776.                 treatmentInvoiceDetailBean.setRejectedMedicineAmount   (rejectedMedicinesAmount);
  6777.                 treatmentInvoiceDetailBean.setNoDiscountAmount       (nonDiscountAmount);
  6778.                 treatmentInvoiceDetailBean.setRejectedNoDiscountAmount(rejectedNonDiscountAmount);
  6779.  
  6780.                 RegHospitalInvoiceDetailEntityHome invoiceDetailEntityHome = (RegHospitalInvoiceDetailEntityHome)
  6781.                     ServiceLocator.getInstance ().getRemoteHome (OHConstants.REG_HOSP_INVOICE_DETAILS_ENTITY_JNDI, RegHospitalInvoiceDetailEntityHome.class);
  6782.  
  6783.                 RegHospitalInvoiceDetailEntity invoiceDetailEntity = invoiceDetailEntityHome.findByPrimaryKey (treatmentServicesHeaderBean.getInvoiceDetailsId());
  6784.  
  6785.                 invoiceDetailEntity.setTreatmentServiceDates   (startDate, OHConstants.GREGORIAN, endDate, OHConstants.GREGORIAN);
  6786.                 invoiceDetailEntity.setTreatmentServiceAmounts (servicesAmount, rejectedServicesAmount, medicinesAmount, rejectedMedicinesAmount,
  6787.                         nonDiscountAmount, rejectedNonDiscountAmount);
  6788.                
  6789.                 if(treatmentServicesHeaderBean.getAppealStatus()!=null)
  6790.                 {
  6791.                     TreatmentServiceHeaderEntityHome treatmentServiceHeaderEntityHome = (TreatmentServiceHeaderEntityHome)
  6792.                     ServiceLocator.getInstance ().getRemoteHome (OHConstants.TRMT_SRVC_HDR_ENTITY_JNDI, TreatmentServiceHeaderEntityHome.class);
  6793.                     TreatmentServiceHeaderEntity treatmentServiceHeaderEntity=
  6794.                     treatmentServiceHeaderEntityHome.findByPrimaryKey(treatmentServicesHeaderBean.getTrmtServiceHdrId());
  6795.                    
  6796.                     treatmentServiceHeaderEntity.setAppealStatus(treatmentServicesHeaderBean.getAppealStatus(), treatmentServicesHeaderBean.getLastModifiedBy()
  6797.                             , treatmentServicesHeaderBean.getLastModifiedTimestamp());
  6798.                 }
  6799.                
  6800.                 if (isFinallyApproved)
  6801.                 {
  6802.                     invoiceDetailEntity.setStatus (OHConstants.REG_HOSP_INVC_DETAILS_APPROVED);
  6803.                 }
  6804.  
  6805.                 invoiceDetailEntity.setLastModifiedBy          (userId);
  6806.                 invoiceDetailEntity.setLastModifiedTimestamp   (new Timestamp(System.currentTimeMillis()));
  6807.  
  6808.                 return  treatmentInvoiceDetailBean;
  6809.             }
  6810.         }
  6811.         catch (GOSIException ge)
  6812.         {
  6813.             ctx.setRollbackOnly ();
  6814.  
  6815.             throw   ge;
  6816.         }
  6817.         catch (Exception e)
  6818.         {
  6819.             ctx.setRollbackOnly ();
  6820.  
  6821.             throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  6822.                                        GOSIConstants.SOCIAL_INSURANCE,
  6823.                                        this.getClass().toString(),
  6824.                                        "recalculateTreatmentInvoiceDetail()",
  6825.                                        e,
  6826.                                        "CMN_ERR_1000");
  6827.         }
  6828.         finally
  6829.         {
  6830.             GOSIUtilities.cleanUp (con, ps, rs);
  6831.         }
  6832.     }
  6833.  
  6834.     /**
  6835.     * @METHOD NAME              :   getCurrentTreatmentInvoicePageNumber
  6836.     * @INFORMATION              :   This method is to get Current Invoice Page Number
  6837.     * @PARAM                    :   class java.lang.Long
  6838.     * @RETURN                   :   Long
  6839.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  6840.     * @LAST MODIFIED BY         :
  6841.     * @LAST MODIFIED DATE       :
  6842.     **/
  6843.     private Long getCurrentTreatmentInvoicePageNumber (Long treatmentInvoiceHeaderId) throws GOSIException
  6844.     {
  6845.         Long  currentTreatmentInvoicePageNumber  = null;
  6846.  
  6847.         PreparedStatement  ps  = null;
  6848.         ResultSet          rs  = null;
  6849.  
  6850.         try
  6851.         {
  6852.             String  sqlQuery    = "SELECT   pagenumber, COUNT (pagenumber) AS num_entries " +
  6853.                                   "    FROM " + SITables.T_REGHOSPINVOICEDET + " det " +
  6854.                                   "   WHERE invoiceheaderid = ? " +
  6855.                                   "GROUP BY pagenumber " +
  6856.                                   "ORDER BY pagenumber DESC NULLS LAST ";
  6857.  
  6858.             ps = con.prepareStatement (sqlQuery);
  6859.  
  6860.             ps.setLong (1, treatmentInvoiceHeaderId);
  6861.  
  6862.             ps.setMaxRows (1);
  6863.  
  6864.             rs = ps.executeQuery ();
  6865.  
  6866.             if (rs.next())
  6867.             {
  6868.                 if (rs.getInt("NUM_ENTRIES") < GOSIApplicationProperties.MAX_PAGE_SIZE)
  6869.                 {
  6870.                     currentTreatmentInvoicePageNumber = rs.getLong ("PAGENUMBER");
  6871.                 }
  6872.                 else
  6873.                 {
  6874.                     currentTreatmentInvoicePageNumber = rs.getLong ("PAGENUMBER") + 1;
  6875.                 }
  6876.             }
  6877.             else
  6878.             {
  6879.                 currentTreatmentInvoicePageNumber = new Long ("1");
  6880.             }
  6881.         }
  6882.         catch (Exception e)
  6883.         {
  6884.             throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  6885.                                        GOSIConstants.SOCIAL_INSURANCE,
  6886.                                        this.getClass().toString(),
  6887.                                        "getCurrentTreatmentInvoicePageNumber()",
  6888.                                        e,
  6889.                                        "CMN_ERR_1000");
  6890.         }
  6891.         finally
  6892.         {
  6893.             GOSIUtilities.cleanUp (ps, rs);
  6894.         }
  6895.  
  6896.         return  currentTreatmentInvoicePageNumber;
  6897.     }
  6898.  
  6899.     /**
  6900.     * @METHOD NAME              :   markTreatmentInvoiceAsPendingApprove
  6901.     * @INFORMATION              :   This method is to mark Treatment Invoice As Entered
  6902.     * @PARAM                    :   class java.lang.Long,
  6903.                                     class java.lang.Long,
  6904.                                     class java.lang.Long
  6905.     * @RETURN                   :   void
  6906.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  6907.     * @LAST MODIFIED BY         :
  6908.     * @LAST MODIFIED DATE       :
  6909.     **/
  6910.     public void markTreatmentInvoiceAsPendingApproved (Long treatmentInvoiceHeaderId, Long hospitalCode, Long userId) throws GOSIException
  6911.     {
  6912.         PreparedStatement  ps  = null;
  6913.         ResultSet          rs  = null;
  6914.  
  6915.         try
  6916.         {
  6917.             String  sqlQuery    = "SELECT hospitalcode, invoicestatus " +
  6918.                                   "  FROM " + SITables.T_REGHOSPINVOICEHDR +
  6919.                                   " WHERE invoiceheaderid = ? ";
  6920.  
  6921.             con = GOSIUtilities.getConnection (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  6922.  
  6923.             ps = con.prepareStatement (sqlQuery);
  6924.  
  6925.             ps.setLong (1, treatmentInvoiceHeaderId);
  6926.  
  6927.             rs = ps.executeQuery ();
  6928.  
  6929.             if (rs.next())
  6930.             {
  6931.                 if (! hospitalCode.equals(rs.getLong("HOSPITALCODE")))
  6932.                 {
  6933.                     throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  6934.                                                GOSIConstants.SOCIAL_INSURANCE,
  6935.                                                this.getClass().toString(),
  6936.                                                "markTreatmentInvoiceAsEntered()",
  6937.                                                null,
  6938.                                                "SOI_ERR_5864");
  6939.                 }
  6940.                 else if (rs.getShort("INVOICESTATUS") != OHConstants.REG_HOSP_INVC_ENTERED)
  6941.                 {
  6942.                     throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  6943.                                                GOSIConstants.SOCIAL_INSURANCE,
  6944.                                                this.getClass().toString(),
  6945.                                                "markTreatmentInvoiceAsPendingApprove()",
  6946.                                                null,
  6947.                                                "SOI_ERR_5865");
  6948.                 }
  6949.  
  6950.                 RegHospitalInvoiceHeaderEntityHome treatmentInvoiceEntityHome = (RegHospitalInvoiceHeaderEntityHome)
  6951.                     ServiceLocator.getInstance ().getRemoteHome (OHConstants.REG_HOSP_INVOICE_HEADER_ENTITY_JNDI, RegHospitalInvoiceHeaderEntityHome.class);
  6952.  
  6953.                 RegHospitalInvoiceHeaderEntity treatmentInvoiceEntity = treatmentInvoiceEntityHome.findByPrimaryKey (treatmentInvoiceHeaderId);
  6954.  
  6955.                 treatmentInvoiceEntity.markRegHospInvoiceHeaderAsPendingApproved (userId);
  6956.             }
  6957.             else
  6958.             {
  6959.                 throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  6960.                                            GOSIConstants.SOCIAL_INSURANCE,
  6961.                                            this.getClass().toString(),
  6962.                                            "markTreatmentInvoiceAsPendingApprove()",
  6963.                                            null,
  6964.                                            "SOI_ERR_5863");
  6965.             }
  6966.         }
  6967.         catch (GOSIException ge)
  6968.         {
  6969.             ctx.setRollbackOnly ();
  6970.  
  6971.             throw   ge;
  6972.         }
  6973.         catch (Exception e)
  6974.         {
  6975.             ctx.setRollbackOnly ();
  6976.  
  6977.             throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  6978.                                        GOSIConstants.SOCIAL_INSURANCE,
  6979.                                        this.getClass().toString(),
  6980.                                        "markTreatmentInvoiceAsPendingApprove()",
  6981.                                        e,
  6982.                                        "CMN_ERR_1000");
  6983.         }
  6984.         finally
  6985.         {
  6986.             GOSIUtilities.cleanUp (con, ps, rs);
  6987.         }
  6988.     }
  6989.    
  6990.    
  6991.     /**
  6992.     * @METHOD NAME              :   markTreatmentInvoiceAsEntered
  6993.     * @INFORMATION              :   This method is to mark Treatment Invoice As Entered
  6994.     * @PARAM                    :   class java.lang.Long,
  6995.                                     class java.lang.Long,
  6996.                                     class java.lang.Long
  6997.     * @RETURN                   :   void
  6998.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  6999.     * @LAST MODIFIED BY         :
  7000.     * @LAST MODIFIED DATE       :
  7001.     **/
  7002.     public void markTreatmentInvoiceAsEntered (Long treatmentInvoiceHeaderId, Long hospitalCode, Long userId) throws GOSIException
  7003.     {
  7004.         PreparedStatement  ps  = null;
  7005.         ResultSet          rs  = null;
  7006.  
  7007.         try
  7008.         {
  7009.             String  sqlQuery    = "SELECT hospitalcode, invoicestatus " +
  7010.                                   "  FROM " + SITables.T_REGHOSPINVOICEHDR +
  7011.                                   " WHERE invoiceheaderid = ? ";
  7012.  
  7013.             con = GOSIUtilities.getConnection (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  7014.  
  7015.             ps = con.prepareStatement (sqlQuery);
  7016.  
  7017.             ps.setLong (1, treatmentInvoiceHeaderId);
  7018.  
  7019.             rs = ps.executeQuery ();
  7020.  
  7021.             if (rs.next())
  7022.             {
  7023.                 if (! hospitalCode.equals(rs.getLong("HOSPITALCODE")))
  7024.                 {
  7025.                     throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  7026.                                                GOSIConstants.SOCIAL_INSURANCE,
  7027.                                                this.getClass().toString(),
  7028.                                                "markTreatmentInvoiceAsEntered()",
  7029.                                                null,
  7030.                                                "SOI_ERR_5864");
  7031.                 }
  7032.                 else if (rs.getShort("INVOICESTATUS") != OHConstants.REG_HOSP_INVC_PENDING_DATA_ENTRY)
  7033.                 {
  7034.                     throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  7035.                                                GOSIConstants.SOCIAL_INSURANCE,
  7036.                                                this.getClass().toString(),
  7037.                                                "markTreatmentInvoiceAsEntered()",
  7038.                                                null,
  7039.                                                "SOI_ERR_5865");
  7040.                 }
  7041.  
  7042.                 RegHospitalInvoiceHeaderEntityHome treatmentInvoiceEntityHome = (RegHospitalInvoiceHeaderEntityHome)
  7043.                     ServiceLocator.getInstance ().getRemoteHome (OHConstants.REG_HOSP_INVOICE_HEADER_ENTITY_JNDI, RegHospitalInvoiceHeaderEntityHome.class);
  7044.  
  7045.                 RegHospitalInvoiceHeaderEntity treatmentInvoiceEntity = treatmentInvoiceEntityHome.findByPrimaryKey (treatmentInvoiceHeaderId);
  7046.  
  7047.                 treatmentInvoiceEntity.markRegHospInvoiceHeaderAsEntered (userId);
  7048.             }
  7049.             else
  7050.             {
  7051.                 throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  7052.                                            GOSIConstants.SOCIAL_INSURANCE,
  7053.                                            this.getClass().toString(),
  7054.                                            "markTreatmentInvoiceAsEntered()",
  7055.                                            null,
  7056.                                            "SOI_ERR_5863");
  7057.             }
  7058.         }
  7059.         catch (GOSIException ge)
  7060.         {
  7061.             ctx.setRollbackOnly ();
  7062.  
  7063.             throw   ge;
  7064.         }
  7065.         catch (Exception e)
  7066.         {
  7067.             ctx.setRollbackOnly ();
  7068.  
  7069.             throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  7070.                                        GOSIConstants.SOCIAL_INSURANCE,
  7071.                                        this.getClass().toString(),
  7072.                                        "markTreatmentInvoiceAsEntered()",
  7073.                                        e,
  7074.                                        "CMN_ERR_1000");
  7075.         }
  7076.         finally
  7077.         {
  7078.             GOSIUtilities.cleanUp (con, ps, rs);
  7079.         }
  7080.     }
  7081.     /**
  7082.     * @METHOD NAME              :   recalculateTreatmentInvoice
  7083.     * @INFORMATION              :   This method is to recalculate Treatment Invoice
  7084.     * @PARAM                    :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceDetailBean,
  7085.                                     class java.lang.Long,
  7086.                                     class gosi.core.workflow.beans.WorkflowParamBean
  7087.     * @RETURN                   :   void
  7088.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  7089.     * @LAST MODIFIED BY         :
  7090.     * @LAST MODIFIED DATE       :
  7091.     **/
  7092.     public void recalculateTreatmentInvoice (RegHospInvoiceDetailBean treatmentInvoiceDetailBean, Long treatmentServicesWorkflowid, WorkflowParamBean workflowParamBean) throws GOSIException
  7093.     {
  7094.         PreparedStatement  ps  = null;
  7095.         ResultSet          rs  = null;
  7096.  
  7097.         try
  7098.         {
  7099.             String  sqlQuery    = "SELECT   hdr.invoiceheaderid, hdr.startdate, hdr.enddate, hdr.hospitalcode, hos.hospitalnamearb, hdr.invoicestatus, "
  7100.                 +" hdr.fieldoffice, hdr.invoicenumber , "+
  7101.                 "         SUM (det.servicesamount)           AS totalservicesamount, " +
  7102.                 "         SUM (det.rejectedservicesamount)   AS rejectedservicesamount, " +
  7103.                 "         SUM (det.medicinesamount)          AS totalmedicinesamount, " +
  7104.                 "         SUM (det.rejectedmedicinesamount)  AS rejectedmedicinesamount, " +
  7105.                 "         SUM (det.nodiscountamount)         AS totalnodiscountamount, " +
  7106.                 "         SUM (det.rejectednodiscountamount) AS rejectednodiscountamount " +
  7107.                 "  FROM " + SITables.T_REGHOSPINVOICEHDR + " hdr LEFT JOIN " +
  7108.                 "(SELECT * from "+SITables.T_REGHOSPINVOICEDET + " where invoicedetailsid <> ? ) det on hdr.invoiceheaderid = det.invoiceheaderid  " +
  7109.                 "LEFT JOIN  "+ SITables.T_HOSPITAL + " hos on  hdr.hospitalcode = hos.hospitalcode " +
  7110.                 " WHERE   hdr.invoiceheaderid = (SELECT invoiceheaderid " +
  7111.                 "                                  FROM " + SITables.T_REGHOSPINVOICEDET +
  7112.                 "                                 WHERE invoicedetailsid = ?) " +
  7113.                 "GROUP BY hdr.invoiceheaderid, hdr.startdate, hdr.enddate, hdr.hospitalcode, hos.hospitalnamearb, hdr.invoicestatus , hdr.fieldoffice, hdr.invoicenumber  ";
  7114.  
  7115.             con = GOSIUtilities.getConnection (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  7116.  
  7117.             ps = con.prepareStatement (sqlQuery);
  7118.  
  7119.             ps.setLong (1, treatmentInvoiceDetailBean.getInvoiceDetailsId());
  7120.             ps.setLong (2, treatmentInvoiceDetailBean.getInvoiceDetailsId());
  7121.  
  7122.             rs = ps.executeQuery ();
  7123.  
  7124.             if (rs.next()
  7125.                     && (rs.getShort("INVOICESTATUS") == OHConstants.REG_HOSP_INVC_ENTERED
  7126.                             || rs.getShort("INVOICESTATUS") == OHConstants.REG_HOSP_INVC_PENDING_APPROVED )
  7127.                     && !hasPendingTreatmentServices(rs.getLong("INVOICEHEADERID"), treatmentServicesWorkflowid))
  7128.             {
  7129.                 ArrayList discountList = getDiscountList (rs.getLong("HOSPITALCODE"), null);
  7130.  
  7131.                 double  totalServicesAmount       = rs.getDouble ("TOTALSERVICESAMOUNT");
  7132.                 double  rejectedServicesAmount    = rs.getDouble ("REJECTEDSERVICESAMOUNT");
  7133.                 double  totalMedicinesAmount      = rs.getDouble ("TOTALMEDICINESAMOUNT");
  7134.                 double  rejectedMedicinesAmount   = rs.getDouble ("REJECTEDMEDICINESAMOUNT");
  7135.                 double  totalNoDiscountAmount     = rs.getDouble ("TOTALNODISCOUNTAMOUNT");
  7136.                 double  rejectedNoDiscountAmount  = rs.getDouble ("REJECTEDNODISCOUNTAMOUNT");
  7137.  
  7138.                 totalServicesAmount      += treatmentInvoiceDetailBean.getServicesAmount ();
  7139.                 rejectedServicesAmount   += treatmentInvoiceDetailBean.getRejectedServiceAmount ();
  7140.                 totalMedicinesAmount     += treatmentInvoiceDetailBean.getMedicinesAmount ();
  7141.                 rejectedMedicinesAmount  += treatmentInvoiceDetailBean.getRejectedMedicineAmount ();
  7142.                 totalNoDiscountAmount    += treatmentInvoiceDetailBean.getNoDiscountAmount ();
  7143.                 rejectedNoDiscountAmount += treatmentInvoiceDetailBean.getRejectedNoDiscountAmount ();
  7144.  
  7145.                 double discountAmount = 0.0;
  7146.  
  7147.                 discountAmount += getDiscountAmount (discountList, totalServicesAmount - rejectedServicesAmount, OHConstants.DISC_SERVICES);
  7148.                 discountAmount += getDiscountAmount (discountList, totalMedicinesAmount - rejectedMedicinesAmount, OHConstants.DISC_MEDICINES);
  7149.  
  7150.                 RegHospitalInvoiceHeaderEntityHome treatmentInvoiceEntityHome = (RegHospitalInvoiceHeaderEntityHome)
  7151.                     ServiceLocator.getInstance ().getRemoteHome (OHConstants.REG_HOSP_INVOICE_HEADER_ENTITY_JNDI, RegHospitalInvoiceHeaderEntityHome.class);
  7152.                 Long invoiceHeaderId=rs.getLong("INVOICEHEADERID");
  7153.                 Long hospitalCode=rs.getLong("HOSPITALCODE");
  7154.                 Short fieldOfficeCode =rs.getShort("FIELDOFFICE");
  7155.                 Long invoiceNumber=rs.getLong("INVOICENUMBER");
  7156.                 String hospitalNameArb=rs.getString("HOSPITALNAMEARB");
  7157.                 Timestamp appealStartDate=new Timestamp (System.currentTimeMillis());
  7158.                 Timestamp startDate=rs.getTimestamp("STARTDATE");
  7159.                 Timestamp endDate=rs.getTimestamp("STARTDATE");
  7160.                 RegHospitalInvoiceHeaderEntity treatmentInvoiceEntity = treatmentInvoiceEntityHome.findByPrimaryKey (invoiceHeaderId);
  7161.  
  7162.                 treatmentInvoiceEntity.setDiscountAmount        (discountAmount);
  7163.                 treatmentInvoiceEntity.setTotalAmount           (totalServicesAmount - rejectedServicesAmount +
  7164.                                                                  totalMedicinesAmount - rejectedMedicinesAmount +
  7165.                                                                  totalNoDiscountAmount - rejectedNoDiscountAmount);
  7166.                 treatmentInvoiceEntity.setLastModifiedBy        (treatmentInvoiceDetailBean.getLastModifiedBy());
  7167.                 treatmentInvoiceEntity.setLastModifiedTimestamp (new Timestamp (System.currentTimeMillis()));
  7168.                
  7169.                 if(workflowParamBean!=null){
  7170.                     GOSIUtilities.cleanUp (con, ps, rs);
  7171.                    
  7172.                     String description = GOSIErrorMessages.getErrorDesc("SOI_ERR_5109") + " " + hospitalNameArb
  7173.                     + " (" + GOSIUtilities.getDateFullString(startDate)
  7174.                     + " - " + GOSIUtilities.getDateFullString(endDate) + ") ";
  7175.                     workflowParamBean.setModuleId              (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  7176.                     workflowParamBean.setStepShortName         ("REG_HOS_INVC_ENTER");
  7177.                     workflowParamBean.setrecordDescription     (description);
  7178.                     workflowParamBean.setRoutingCriterion      (GOSIConstants.COMPLETED);
  7179.                     workflowParamBean.setKeyVal1               (hospitalCode.toString());
  7180.                     workflowParamBean.setPrimaryKeyOfTherecord (invoiceHeaderId.toString());
  7181.                     workflowParamBean.setDestinationLocationId(fieldOfficeCode);
  7182.                     Long userId=workflowParamBean.getUserId();
  7183.                     Boolean ishadDeduction=false;
  7184.                     if((treatmentInvoiceDetailBean.getRejectedServiceAmount()!=null && treatmentInvoiceDetailBean.getRejectedServiceAmount()>0 &&
  7185.                             treatmentInvoiceDetailBean.getRejectedServiceAmount()!=treatmentInvoiceDetailBean.getServicesAmount()) ||
  7186.                             (treatmentInvoiceDetailBean.getRejectedMedicineAmount()!=null && treatmentInvoiceDetailBean.getRejectedMedicineAmount()>0 &&
  7187.                             treatmentInvoiceDetailBean.getRejectedMedicineAmount()!=treatmentInvoiceDetailBean.getMedicinesAmount()) ||
  7188.                             (treatmentInvoiceDetailBean.getRejectedNoDiscountAmount()!=null && treatmentInvoiceDetailBean.getRejectedNoDiscountAmount()>0 &&
  7189.                             treatmentInvoiceDetailBean.getRejectedNoDiscountAmount()!=treatmentInvoiceDetailBean.getNoDiscountAmount()))
  7190.                         ishadDeduction=true;
  7191.                    
  7192.                     ArrayList deductionList=null;
  7193.                    
  7194.                     if(!ishadDeduction)
  7195.                         deductionList=getDeductionTreatmentInvoiceDetails(invoiceHeaderId, hospitalCode);
  7196.                    
  7197.                     if (ishadDeduction || (deductionList != null && !deductionList.isEmpty()))
  7198.                     {
  7199.                         treatmentInvoiceEntity.setAppealStartDate(appealStartDate);
  7200.                         LetterHeaderBean letterHeader = null;
  7201.                         HashMap letterMap=null;
  7202.                         TreeMap parameterList = null;
  7203.                         long printSerialNumber = 0;
  7204.                         EstablishmentBean hospitalBean =  EstablishmentUtility.
  7205.                         getEstablishmentDetails(hospitalCode.longValue(),
  7206.                             true,false);
  7207.                         Long contactId = hospitalBean.getEstablishmentContactId();
  7208.                         if(hospitalCode!=null &&  isRegisteredHospital(hospitalCode))
  7209.                         {
  7210.                             letterHeader = new LetterHeaderBean();
  7211.                             letterHeader.setRequestedBy(userId);   
  7212.                             letterHeader.setReportId("16_02_0025");
  7213.                             letterHeader.setLetterStatusFlag(new Short("5"));                
  7214.                             letterHeader.setRecordId(""+invoiceHeaderId);
  7215.  
  7216.                             letterHeader.setFieldOfficeCode(fieldOfficeCode);
  7217.  
  7218.                             letterMap = new HashMap();
  7219.  
  7220.                             letterHeader.setStakeHolders(new Short(
  7221.                             ReportConstants.STAKE_HOLDER_REG_HOSPITAL),
  7222.                             contactId,
  7223.                             invoiceNumber.toString());
  7224.  
  7225.                             letterMap.put("HOSPITALNAME", ""+hospitalNameArb);
  7226.                             letterMap.put("INVOICENUMBER", ""+invoiceNumber);
  7227.                             letterMap.put("STARTDATE",""+GOSIUtilities.getDateFullString(startDate));
  7228.  
  7229.                             // These S.O.P is tp Test Dynamic Field Values for Master Data
  7230.                             GOSIDebug.debugMessages("Field HOSPITALNAME : "+ letterMap.get("HOSPITALNAME"));
  7231.                             GOSIDebug.debugMessages("Field INVOICENUMBER : "+ letterMap.get("INVOICENUMBER"));
  7232.                             GOSIDebug.debugMessages("Field STARTDATE : "    + letterMap.get("STARTDATE"));
  7233.                             GOSIDebug.debugMessages("Field FIELDOFFICE : "+ letterMap.get("FIELDOFFICE"));
  7234.                            
  7235.  
  7236.                             parameterList = new TreeMap();
  7237.                             parameterList.put("1", letterMap);
  7238.                             printSerialNumber = LetterUtilities.createSingleLetter(
  7239.                                 parameterList, letterHeader);
  7240.                             GOSIDebug.debugMessages(" PRINT SERIAL NUMBER :"
  7241.                                 + printSerialNumber);
  7242.  
  7243.                             /*Start Notification Letter*/
  7244.                             String longName = CommonTransactions.getTransactionLongName(GOSIConstants.OCCUPATIONAL_HAZARDS_ID,"REG_HOSPITAL_INVOICE");
  7245.                             Long transactionId = CommonTransactions.getTransactionId(GOSIConstants.OCCUPATIONAL_HAZARDS_ID,"REG_HOSPITAL_INVOICE");
  7246.  
  7247.                             ArrayList identifiers =  new ArrayList();
  7248.                             identifiers.add(hospitalCode);
  7249.                             identifiers.add(SecurityAndWorkflowConstants.HOSPITAL_EMPLOYEE);
  7250.                             identifiers.add(SecurityAndWorkflowConstants.HOSPITAL_ADMIN);
  7251.                            
  7252.                             //Hospital:
  7253.                             NotificationLetterBean objNotificationLetterBean2  = new NotificationLetterBean();
  7254.                             objNotificationLetterBean2.setPrintSerialNumber(printSerialNumber);
  7255.                             objNotificationLetterBean2.setNotificationTitle(description);
  7256.                             objNotificationLetterBean2.setTransactionName(longName);
  7257.                             objNotificationLetterBean2.setTransactionID(transactionId);
  7258.                             objNotificationLetterBean2.setTargetUsers(GOSIConstants.GOL_GIVEN_REG_NUM_AND_ROLES.shortValue());
  7259.                             objNotificationLetterBean2.setIdentifiers(identifiers);
  7260.                             objNotificationLetterBean2.setCreatedBy(userId);
  7261.                             objNotificationLetterBean2.setIssuingFieldOffice(fieldOfficeCode);
  7262.                             objNotificationLetterBean2.setReportID(letterHeader.getReportId());
  7263.                             GOSIUtilities.sendNotificationLetter(GOSIConstants.OCCUPATIONAL_HAZARDS_ID, objNotificationLetterBean2);
  7264.                             /*End*/
  7265.                            
  7266.  
  7267.                         }
  7268.                     }
  7269.                     else
  7270.                     {
  7271.                         treatmentInvoiceEntity.markRegHospInvoiceHeaderAsPendingApproved(userId);
  7272.                     }
  7273.                    
  7274.                    
  7275.                     GOSIUtilities.startWorkflow (workflowParamBean);
  7276.                 }
  7277.            
  7278.             }
  7279.         }
  7280.         catch (GOSIException ge)
  7281.         {
  7282.             ctx.setRollbackOnly ();
  7283.  
  7284.             throw   ge;
  7285.         }
  7286.         catch (Exception e)
  7287.         {
  7288.             ctx.setRollbackOnly ();
  7289.  
  7290.             throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  7291.                                        GOSIConstants.SOCIAL_INSURANCE,
  7292.                                        this.getClass().toString(),
  7293.                                        "recalculateTreatmentInvoice()",
  7294.                                        e,
  7295.                                        "CMN_ERR_1000");
  7296.         }
  7297.         finally
  7298.         {
  7299.             GOSIUtilities.cleanUp (con, ps, rs);
  7300.         }
  7301.     }
  7302.    
  7303.     /**
  7304.     * @METHOD NAME              :   recalculateTreatmentInvoice
  7305.     * @INFORMATION              :   This method is to recalculate Treatment Invoice
  7306.     * @PARAM                    :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceDetailBean,
  7307.                                     class java.lang.Long,
  7308.                                     class gosi.core.workflow.beans.WorkflowParamBean
  7309.     * @RETURN                   :   void
  7310.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  7311.     * @LAST MODIFIED BY         :
  7312.     * @LAST MODIFIED DATE       :
  7313.     **/
  7314.     private void recalculateTreatmentInvoiceHeaderCreatedByBatch (Long invoiceHeaderId, UserBean userBean) throws GOSIException
  7315.     {
  7316.         PreparedStatement  ps  = null;
  7317.         ResultSet          rs  = null;
  7318.  
  7319.         try
  7320.         {
  7321.             String  sqlQuery    = "SELECT   hdr.invoiceheaderid, hdr.startdate, hdr.enddate, hdr.hospitalcode, hos.hospitalnamearb, hdr.invoicestatus, "
  7322.                 +" hdr.fieldoffice, hdr.invoicenumber , "+
  7323.                 "         SUM (det.servicesamount)           AS totalservicesamount, " +
  7324.                 "         SUM (det.rejectedservicesamount)   AS rejectedservicesamount, " +
  7325.                 "         SUM (det.medicinesamount)          AS totalmedicinesamount, " +
  7326.                 "         SUM (det.rejectedmedicinesamount)  AS rejectedmedicinesamount, " +
  7327.                 "         SUM (det.nodiscountamount)         AS totalnodiscountamount, " +
  7328.                 "         SUM (det.rejectednodiscountamount) AS rejectednodiscountamount " +
  7329.                 "  FROM " + SITables.T_REGHOSPINVOICEHDR + " hdr LEFT JOIN " +
  7330.                 SITables.T_REGHOSPINVOICEDET + " det on hdr.invoiceheaderid = det.invoiceheaderid  " +
  7331.                 "LEFT JOIN  "+ SITables.T_HOSPITAL + " hos on  hdr.hospitalcode = hos.hospitalcode " +
  7332.                 " WHERE   hdr.invoiceheaderid = ? " +
  7333.                 "GROUP BY hdr.invoiceheaderid, hdr.startdate, hdr.enddate, hdr.hospitalcode, hos.hospitalnamearb, hdr.invoicestatus , hdr.fieldoffice, hdr.invoicenumber  ";
  7334.  
  7335.             con = GOSIUtilities.getConnection (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  7336.  
  7337.             ps = con.prepareStatement (sqlQuery);
  7338.  
  7339.             ps.setLong (1, invoiceHeaderId.longValue());
  7340.  
  7341.             rs = ps.executeQuery ();
  7342.  
  7343.             if (rs.next())
  7344.             {
  7345.                 ArrayList discountList = getDiscountList (rs.getLong("HOSPITALCODE"), null);
  7346.  
  7347.                 double  totalServicesAmount       = rs.getDouble ("TOTALSERVICESAMOUNT");
  7348.                 double  rejectedServicesAmount    = rs.getDouble ("REJECTEDSERVICESAMOUNT");
  7349.                 double  totalMedicinesAmount      = rs.getDouble ("TOTALMEDICINESAMOUNT");
  7350.                 double  rejectedMedicinesAmount   = rs.getDouble ("REJECTEDMEDICINESAMOUNT");
  7351.                 double  totalNoDiscountAmount     = rs.getDouble ("TOTALNODISCOUNTAMOUNT");
  7352.                 double  rejectedNoDiscountAmount  = rs.getDouble ("REJECTEDNODISCOUNTAMOUNT");
  7353.  
  7354.                 double discountAmount = 0.0;
  7355.  
  7356.                 discountAmount += getDiscountAmount (discountList, totalServicesAmount - rejectedServicesAmount, OHConstants.DISC_SERVICES);
  7357.                 discountAmount += getDiscountAmount (discountList, totalMedicinesAmount - rejectedMedicinesAmount, OHConstants.DISC_MEDICINES);
  7358.  
  7359.                 RegHospitalInvoiceHeaderEntityHome treatmentInvoiceEntityHome = (RegHospitalInvoiceHeaderEntityHome)
  7360.                     ServiceLocator.getInstance ().getRemoteHome (OHConstants.REG_HOSP_INVOICE_HEADER_ENTITY_JNDI, RegHospitalInvoiceHeaderEntityHome.class);
  7361.                 Long hospitalCode=rs.getLong("HOSPITALCODE");
  7362.                 Short fieldOfficeCode =rs.getShort("FIELDOFFICE");
  7363.                 Long invoiceNumber=rs.getLong("INVOICENUMBER");
  7364.                 String hospitalNameArb=rs.getString("HOSPITALNAMEARB");
  7365.                 Timestamp appealStartDate=new Timestamp (System.currentTimeMillis());
  7366.                 Timestamp startDate=rs.getTimestamp("STARTDATE");
  7367.                 Timestamp endDate=rs.getTimestamp("ENDDATE");
  7368.                 RegHospitalInvoiceHeaderEntity treatmentInvoiceEntity = treatmentInvoiceEntityHome.findByPrimaryKey (invoiceHeaderId);
  7369.  
  7370.                 treatmentInvoiceEntity.setDiscountAmount        (discountAmount);
  7371.                 treatmentInvoiceEntity.setTotalAmount           (totalServicesAmount - rejectedServicesAmount +
  7372.                                                                  totalMedicinesAmount - rejectedMedicinesAmount +
  7373.                                                                  totalNoDiscountAmount - rejectedNoDiscountAmount);
  7374.                 treatmentInvoiceEntity.setLastModifiedBy        (userBean.getUserCode());
  7375.                 treatmentInvoiceEntity.setLastModifiedTimestamp (new Timestamp (System.currentTimeMillis()));
  7376.                 WorkflowParamBean workflowParamBean=userBean.getWorkflowParamBean();
  7377.                 String description = GOSIErrorMessages.getErrorDesc("SOI_ERR_5109") + " " + hospitalNameArb
  7378.                 + " (" + GOSIUtilities.getDateFullString(startDate)
  7379.                 + " - " + GOSIUtilities.getDateFullString(endDate) + ") ";
  7380.                 workflowParamBean.setModuleId              (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  7381.                 workflowParamBean.setStepShortName         ("REG_HOS_INVC_ENTER");
  7382.                 workflowParamBean.setrecordDescription     (description);
  7383.                 workflowParamBean.setRoutingCriterion      (GOSIConstants.COMPLETED);
  7384.                 workflowParamBean.setKeyVal1               (hospitalCode.toString());
  7385.                 workflowParamBean.setPrimaryKeyOfTherecord (invoiceHeaderId.toString());
  7386.                 workflowParamBean.setDestinationLocationId(fieldOfficeCode);
  7387.                 Long userId=workflowParamBean.getUserId();
  7388.                 ArrayList deductionList=null;
  7389.                 deductionList=getDeductionTreatmentInvoiceDetails(invoiceHeaderId, hospitalCode);
  7390.                
  7391.                 if ((deductionList != null && !deductionList.isEmpty()))
  7392.                 {
  7393.                     treatmentInvoiceEntity.setAppealStartDate(appealStartDate);
  7394.                     LetterHeaderBean letterHeader = null;
  7395.                     HashMap letterMap=null;
  7396.                     TreeMap parameterList = null;
  7397.                     long printSerialNumber = 0;
  7398.                     EstablishmentBean hospitalBean =  EstablishmentUtility.
  7399.                     getEstablishmentDetails(hospitalCode.longValue(),
  7400.                             true,false);
  7401.                     Long contactId = hospitalBean.getEstablishmentContactId();
  7402.                     if(hospitalCode!=null &&  isRegisteredHospital(hospitalCode))
  7403.                     {
  7404.                         letterHeader = new LetterHeaderBean();
  7405.                         letterHeader.setRequestedBy(userId);   
  7406.                         letterHeader.setReportId("16_02_0025");
  7407.                         letterHeader.setLetterStatusFlag(new Short("5"));                
  7408.                         letterHeader.setRecordId(""+invoiceHeaderId);
  7409.                         letterHeader.setFieldOfficeCode(fieldOfficeCode);
  7410.                         letterMap = new HashMap();
  7411.                         letterHeader.setStakeHolders(new Short(ReportConstants.STAKE_HOLDER_REG_HOSPITAL),contactId,invoiceNumber.toString());
  7412.                         letterMap.put("HOSPITALNAME", ""+hospitalNameArb);
  7413.                         letterMap.put("INVOICENUMBER", ""+invoiceNumber);
  7414.                         letterMap.put("STARTDATE",""+GOSIUtilities.getDateFullString(startDate));
  7415.  
  7416.                         // These S.O.P is tp Test Dynamic Field Values for Master Data
  7417.                         GOSIDebug.debugMessages("Field HOSPITALNAME : "+ letterMap.get("HOSPITALNAME"));
  7418.                         GOSIDebug.debugMessages("Field INVOICENUMBER : "+ letterMap.get("INVOICENUMBER"));
  7419.                         GOSIDebug.debugMessages("Field STARTDATE : "    + letterMap.get("STARTDATE"));
  7420.                         GOSIDebug.debugMessages("Field FIELDOFFICE : "+ letterMap.get("FIELDOFFICE"));
  7421.                        
  7422.                         parameterList = new TreeMap();
  7423.                         parameterList.put("1", letterMap);
  7424.                         printSerialNumber = LetterUtilities.createSingleLetter(
  7425.                             parameterList, letterHeader);
  7426.                         GOSIDebug.debugMessages(" PRINT SERIAL NUMBER :"
  7427.                             + printSerialNumber);
  7428.  
  7429.                         /*Start Notification Letter*/
  7430.                         String longName = CommonTransactions.getTransactionLongName(GOSIConstants.OCCUPATIONAL_HAZARDS_ID,"REG_HOSPITAL_INVOICE");
  7431.                         Long transactionId = CommonTransactions.getTransactionId(GOSIConstants.OCCUPATIONAL_HAZARDS_ID,"REG_HOSPITAL_INVOICE");
  7432.  
  7433.                         ArrayList identifiers =  new ArrayList();
  7434.                         identifiers.add(hospitalCode);
  7435.                         identifiers.add(SecurityAndWorkflowConstants.HOSPITAL_EMPLOYEE);
  7436.                         identifiers.add(SecurityAndWorkflowConstants.HOSPITAL_ADMIN);
  7437.                        
  7438.                         //Hospital:
  7439.                         NotificationLetterBean objNotificationLetterBean2  = new NotificationLetterBean();
  7440.                         objNotificationLetterBean2.setPrintSerialNumber(printSerialNumber);
  7441.                         objNotificationLetterBean2.setNotificationTitle(description);
  7442.                         objNotificationLetterBean2.setTransactionName(longName);
  7443.                         objNotificationLetterBean2.setTransactionID(transactionId);
  7444.                         objNotificationLetterBean2.setTargetUsers(GOSIConstants.GOL_GIVEN_REG_NUM_AND_ROLES.shortValue());
  7445.                         objNotificationLetterBean2.setIdentifiers(identifiers);
  7446.                         objNotificationLetterBean2.setCreatedBy(userId);
  7447.                         objNotificationLetterBean2.setIssuingFieldOffice(fieldOfficeCode);
  7448.                         objNotificationLetterBean2.setReportID(letterHeader.getReportId());
  7449.                         GOSIUtilities.sendNotificationLetter(GOSIConstants.OCCUPATIONAL_HAZARDS_ID, objNotificationLetterBean2);
  7450.                         /*End*/
  7451.                         }
  7452.                     treatmentInvoiceEntity.markRegHospInvoiceHeaderAsEntered(userId);
  7453.                     }
  7454.                     else
  7455.                     {
  7456.                         treatmentInvoiceEntity.markRegHospInvoiceHeaderAsPendingApproved(userId);
  7457.                     }
  7458.                    
  7459.                    
  7460.                     GOSIUtilities.startWorkflow (workflowParamBean);
  7461.            
  7462.             }
  7463.         }
  7464.         catch (GOSIException ge)
  7465.         {
  7466.             ctx.setRollbackOnly ();
  7467.  
  7468.             throw   ge;
  7469.         }
  7470.         catch (Exception e)
  7471.         {
  7472.             ctx.setRollbackOnly ();
  7473.  
  7474.             throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  7475.                                        GOSIConstants.SOCIAL_INSURANCE,
  7476.                                        this.getClass().toString(),
  7477.                                        "recalculateTreatmentInvoice()",
  7478.                                        e,
  7479.                                        "CMN_ERR_1000");
  7480.         }
  7481.         finally
  7482.         {
  7483.             GOSIUtilities.cleanUp (con, ps, rs);
  7484.         }
  7485.     }
  7486.  
  7487.     /**
  7488.     * @METHOD NAME              :   hasPendingTreatmentServices
  7489.     * @INFORMATION              :   This method is to has Pending Treatment Services
  7490.     * @PARAM                    :   class java.lang.Long,
  7491.                                     class java.lang.Long
  7492.     * @RETURN                   :   class java.lang.Boolean
  7493.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  7494.     * @LAST MODIFIED BY         :
  7495.     * @LAST MODIFIED DATE       :
  7496.     **/
  7497.     private Boolean hasPendingTreatmentServices (Long treatmentInvoiceHeaderId, Long treatmentServicesWorkflowId) throws GOSIException
  7498.     {
  7499.         Boolean  hasPendingTreatmentServices  = null;
  7500.  
  7501.         PreparedStatement  ps  = null;
  7502.         ResultSet          rs  = null;
  7503.  
  7504.         try
  7505.         {
  7506.             String  sqlQuery    = "SELECT COUNT (DISTINCT tdet.trmtservicedetid) AS num_pending_trmt_services " +
  7507.                                   "  FROM " + SITables.T_REGHOSPINVOICEHDR + " ihdr, " +
  7508.                                   "       " + SITables.T_REGHOSPINVOICEDET + " idet, " +
  7509.                                   "       " + SITables.T_TRMTSERVICESHDR   + " thdr, " +
  7510.                                   "       " + SITables.T_TRMTSERVICESDET   + " tdet " +
  7511.                                   " WHERE ihdr.invoiceheaderid = idet.invoiceheaderid " +
  7512.                                   "   AND idet.invoicedetailsid = thdr.invoicedetailsid " +
  7513.                                   "   AND thdr.trmtservicehdrid = tdet.trmtservicehdrid " +
  7514.                                   "   AND ihdr.invoiceheaderid = ? " +
  7515.                                   "   AND ( tdet.trmtsrvcwrkfloid <> ? OR tdet.trmtsrvcwrkfloid is null ) " +
  7516.                                   "   AND tdet.trmtsrvcstatus in ( ? , ? , ? ) ";
  7517.  
  7518.             ps = con.prepareStatement (sqlQuery);
  7519.  
  7520.             ps.setLong  (1, treatmentInvoiceHeaderId);
  7521.             ps.setLong  (2, treatmentServicesWorkflowId);
  7522.             ps.setShort (3, OHConstants.TRMT_SRVC_STS_ENTERED);
  7523.             ps.setShort (4, OHConstants.TRMT_SRVC_STS_PENDING_WORKFLOW_ENTRY);
  7524.             ps.setShort (5, OHConstants.TRMT_SRVC_STS_PENDING_WORKFLOW_ENTRY_RECORRECTED);
  7525.  
  7526.  
  7527.             rs = ps.executeQuery ();
  7528.  
  7529.             if (rs.next())
  7530.             {
  7531.                 if (rs.getInt("NUM_PENDING_TRMT_SERVICES") > 0)
  7532.                 {
  7533.                     hasPendingTreatmentServices = Boolean.TRUE;
  7534.                 }
  7535.                 else
  7536.                 {
  7537.                     hasPendingTreatmentServices = Boolean.FALSE;
  7538.                 }
  7539.             }
  7540.         }
  7541.         catch (Exception e)
  7542.         {
  7543.             throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  7544.                                        GOSIConstants.SOCIAL_INSURANCE,
  7545.                                        this.getClass().toString(),
  7546.                                        "hasPendingTreatmentServices()",
  7547.                                        e,
  7548.                                        "CMN_ERR_1000");
  7549.         }
  7550.         finally
  7551.         {
  7552.             GOSIUtilities.cleanUp (ps, rs);
  7553.         }
  7554.  
  7555.         return  hasPendingTreatmentServices;
  7556.     }
  7557.    
  7558.     /**
  7559.     * @METHOD NAME              :   hasPendingTreatmentServices
  7560.     * @INFORMATION              :   This method is to has Pending Treatment Services
  7561.     * @PARAM                    :   class java.lang.Long,
  7562.                                     class java.lang.Long
  7563.     * @RETURN                   :   class java.lang.Boolean
  7564.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  7565.     * @LAST MODIFIED BY         :
  7566.     * @LAST MODIFIED DATE       :
  7567.     **/
  7568.     private Boolean hasPendingTreatmentServices (Long treatmentInvoiceDetailsId) throws GOSIException
  7569.     {
  7570.         Boolean  hasPendingTreatmentServices  = null;
  7571.  
  7572.         PreparedStatement  ps  = null;
  7573.         ResultSet          rs  = null;
  7574.  
  7575.         try
  7576.         {
  7577.             String  sqlQuery    = "SELECT COUNT (DISTINCT tdet.trmtservicedetid) AS num_pending_trmt_services " +
  7578.                                   "  FROM " + SITables.T_REGHOSPINVOICEDET + " idet, " +
  7579.                                   "       " + SITables.T_TRMTSERVICESHDR   + " thdr, " +
  7580.                                   "       " + SITables.T_TRMTSERVICESDET   + " tdet " +
  7581.                                   " WHERE idet.invoicedetailsid = thdr.invoicedetailsid " +
  7582.                                   "   AND thdr.trmtservicehdrid = tdet.trmtservicehdrid " +
  7583.                                   "   AND idet.invoicedetailsid = ? " +
  7584.                                   "   AND tdet.trmtsrvcstatus in ( ? , ? , ? ) ";
  7585.  
  7586.             ps = con.prepareStatement (sqlQuery);
  7587.  
  7588.             ps.setLong  (1, treatmentInvoiceDetailsId);
  7589.             ps.setShort (2, OHConstants.TRMT_SRVC_STS_ENTERED);
  7590.             ps.setShort (3, OHConstants.TRMT_SRVC_STS_PENDING_WORKFLOW_ENTRY);
  7591.             ps.setShort (4, OHConstants.TRMT_SRVC_STS_PENDING_WORKFLOW_ENTRY_RECORRECTED);
  7592.  
  7593.  
  7594.             rs = ps.executeQuery ();
  7595.  
  7596.             if (rs.next())
  7597.             {
  7598.                 if (rs.getInt("NUM_PENDING_TRMT_SERVICES") > 0)
  7599.                 {
  7600.                     hasPendingTreatmentServices = Boolean.TRUE;
  7601.                 }
  7602.                 else
  7603.                 {
  7604.                     hasPendingTreatmentServices = Boolean.FALSE;
  7605.                 }
  7606.             }
  7607.         }
  7608.         catch (Exception e)
  7609.         {
  7610.             throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  7611.                                        GOSIConstants.SOCIAL_INSURANCE,
  7612.                                        this.getClass().toString(),
  7613.                                        "hasPendingTreatmentServices()",
  7614.                                        e,
  7615.                                        "CMN_ERR_1000");
  7616.         }
  7617.         finally
  7618.         {
  7619.             GOSIUtilities.cleanUp (ps, rs);
  7620.         }
  7621.  
  7622.         return  hasPendingTreatmentServices;
  7623.     }
  7624.     /**
  7625.     * @METHOD NAME              :   getTreatmentInvoiceDetailsList
  7626.     * @INFORMATION              :   This method is to get Treatment Invoice Details List
  7627.     * @PARAM                    :   class java.lang.Long,
  7628.                                     class java.lang.Long,
  7629.                                     class java.lang.Long
  7630.     * @RETURN                   :   class java.util.ArrayList
  7631.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  7632.     * @LAST MODIFIED BY         :
  7633.     * @LAST MODIFIED DATE       :
  7634.     **/
  7635.     public ArrayList getTreatmentInvoiceDetailsList (Long treatmentInvoiceHeaderId, Long treatmentInvoicePageNumber, Long hospitalCode
  7636.             , Long socInsNumber) throws GOSIException
  7637.     {
  7638.         ArrayList treatmentInvoiceDetailsList = new ArrayList ();
  7639.  
  7640.         PreparedStatement ps = null;
  7641.         ResultSet         rs = null;
  7642.  
  7643.         try
  7644.         {
  7645.             StringBuilder sqlQuery=new StringBuilder();
  7646.            
  7647.             sqlQuery.append("SELECT   invcdet.invoicedetailsid, invcdet.invoiceheaderid, invcdet.trmtstartdate, " );
  7648.             sqlQuery.append("         invcdet.trmtstartdateentfmt, invcdet.trmtenddate, invcdet.trmtenddateentfmt, " );
  7649.             sqlQuery.append("         invcdet.servicesamount, invcdet.medicinesamount, invcdet.nodiscountamount, " );
  7650.             sqlQuery.append("         invcdet.rejectedservicesamount, invcdet.rejectedmedicinesamount, " );
  7651.             sqlQuery.append("         invcdet.rejectednodiscountamount, invcdet.pagenumber, invcdet.routingcriteria, invcdet.status, " );
  7652.             sqlQuery.append("         NVL (inj.socinsnumber, NVL (disbassmt.socialinsurancenumber, invcdet.socialinsurancenumber)) AS socinsnumber, " );
  7653.             sqlQuery.append("         NVL (inj.datecomplication, NVL (inj.injurydate, disbassmt.assessmentdate)) AS assessmentdate, " );
  7654.             sqlQuery.append("         NVL (inj.datecomplicationentfmt, NVL (inj.injurydateentfmt, disbassmt.assessmentdateentfmt)) AS assessmentdateentfmt, " );
  7655.             sqlQuery.append("         inj.injuryid, inj.datecomplication, inj.injurynumber, disbassmt.SCHEDULEID, disbassmt.disabilitynumber, mbappt.sessionnumber, " );
  7656.             sqlQuery.append("         per.firstname, per.secondname, per.thirdname, per.surname, invchdr.hospitalcode " );
  7657.             sqlQuery.append("    FROM "+ SITables.T_REGHOSPINVOICEHDR + " invchdr " );
  7658.             sqlQuery.append("         LEFT JOIN " + SITables.T_REGHOSPINVOICEDET + " invcdet    ON invchdr.invoiceheaderid = invcdet.invoiceheaderid " );
  7659.             sqlQuery.append("         LEFT JOIN " + SITables.T_INJURY + "            inj        ON invcdet.injuryid = inj.injuryid " );
  7660.             sqlQuery.append("         LEFT JOIN " + SITables.T_DISBASSMT + "         disbassmt  ON invcdet.disbassmtid = disbassmt.SCHEDULEID " );
  7661.             sqlQuery.append("         LEFT JOIN " + SITables.T_MBAPPOINTMENT +"     mbappt     ON disbassmt.scheduleid = mbappt.scheduleid " );
  7662.             sqlQuery.append("         LEFT JOIN " + SITables.T_CONTRIBUTOR + "       con        ON (inj.contributorid IS NOT NULL AND inj.contributorid = con.contributorid) " );
  7663.             sqlQuery.append("                                                                   OR (inj.contributorid IS NULL AND " );
  7664.             sqlQuery.append("                                                                       NVL (disbassmt.socialinsurancenumber, invcdet.socialinsurancenumber) = con.socialinsurancenumber) " );
  7665.             sqlQuery.append("         LEFT JOIN " + SITables.T_PERSON + "            per        ON con.personid = per.personid " );
  7666.             sqlQuery.append("   WHERE invchdr.invoiceheaderid = ? " );
  7667.             if(socInsNumber!=null)
  7668.             {
  7669.                 sqlQuery.append(" AND invcdet.socialinsurancenumber = ? ");
  7670.             }
  7671.             else
  7672.             {
  7673.                 sqlQuery.append("     AND invcdet.pagenumber = ? " );
  7674.             }
  7675.             sqlQuery.append("     AND invchdr.invoicestatus <> ? " );
  7676.             sqlQuery.append("     AND invcdet.status <> ? ");
  7677.            
  7678.             con = GOSIUtilities.getConnection (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  7679.             GOSIDebug.debugMessages("query : "+sqlQuery.toString());
  7680.             ps = con.prepareStatement (sqlQuery.toString());
  7681.  
  7682.             ps.setLong  (1, treatmentInvoiceHeaderId);
  7683.             if(socInsNumber!=null)
  7684.             {
  7685.                 ps.setLong  (2, socInsNumber);
  7686.             }
  7687.             else
  7688.             {
  7689.                 ps.setLong  (2, treatmentInvoicePageNumber);
  7690.             }
  7691.             ps.setShort (3, OHConstants.REG_HOSP_INVC_CANCELLED);
  7692.             ps.setShort (4, OHConstants.REG_HOSP_INVC_DETAILS_CANCELLED);
  7693.            
  7694.  
  7695.             rs = ps.executeQuery ();
  7696.  
  7697.             while (rs.next())
  7698.             {
  7699.                 if (! hospitalCode.equals(rs.getLong("HOSPITALCODE")))
  7700.                 {
  7701.                     throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  7702.                                                GOSIConstants.SOCIAL_INSURANCE,
  7703.                                                this.getClass().toString(),
  7704.                                                "getTreatmentInvoiceDetailsList()",
  7705.                                                null,
  7706.                                                "SOI_ERR_5864");
  7707.                 }
  7708.  
  7709.                 RegHospInvoiceDetailBean invoiceDetailBean = new RegHospInvoiceDetailBean ();
  7710.  
  7711.                 invoiceDetailBean.setInvoiceDetailsId (new Long(rs.getLong("INVOICEDETAILSID")));
  7712.                 invoiceDetailBean.setInvoiceHeaderId  (new Long(rs.getLong("INVOICEHEADERID")));
  7713.  
  7714.                 if (rs.getObject("TRMTSTARTDATE") != null)
  7715.                 {
  7716.                     invoiceDetailBean.setTrmtStartDate       (rs.getTimestamp("TRMTSTARTDATE"));
  7717.                     invoiceDetailBean.setTrmtStartDateEntFmt (rs.getString("TRMTSTARTDATEENTFMT"));
  7718.                     invoiceDetailBean.setTrmtStartDateStr    (OHUtilities.getDateStr(invoiceDetailBean.getTrmtStartDate(), invoiceDetailBean.getTrmtStartDateEntFmt()));
  7719.                 }
  7720.  
  7721.                 if (rs.getObject("TRMTENDDATE") != null)
  7722.                 {
  7723.                     invoiceDetailBean.setTrmtEndDate       (rs.getTimestamp("TRMTENDDATE"));
  7724.                     invoiceDetailBean.setTrmtEndDateEntFmt (rs.getString("TRMTENDDATEENTFMT"));
  7725.                     invoiceDetailBean.setTrmtEndDateStr    (OHUtilities.getDateStr(invoiceDetailBean.getTrmtEndDate(), invoiceDetailBean.getTrmtEndDateEntFmt()));
  7726.                 }
  7727.  
  7728.                 invoiceDetailBean.setServicesAmount           (new Double(rs.getDouble("SERVICESAMOUNT")));
  7729.                 invoiceDetailBean.setMedicinesAmount          (new Double(rs.getDouble("MEDICINESAMOUNT")));
  7730.                 invoiceDetailBean.setNoDiscountAmount         (new Double(rs.getDouble("NODISCOUNTAMOUNT")));
  7731.                 invoiceDetailBean.setRejectedServiceAmount    (new Double(rs.getDouble("REJECTEDSERVICESAMOUNT")));
  7732.                 invoiceDetailBean.setRejectedMedicineAmount   (new Double(rs.getDouble("REJECTEDMEDICINESAMOUNT")));
  7733.                 invoiceDetailBean.setRejectedNoDiscountAmount (new Double(rs.getDouble("REJECTEDNODISCOUNTAMOUNT")));
  7734.  
  7735.                 invoiceDetailBean.setPageNumber (new Long (rs.getLong("PAGENUMBER")));
  7736.  
  7737.                 if (rs.getObject("ROUTINGCRITERIA") != null)
  7738.                 {
  7739.                     invoiceDetailBean.setRoutingCriteria (new Short(rs.getShort("ROUTINGCRITERIA")));
  7740.                 }
  7741.  
  7742.                 invoiceDetailBean.setStatus  (new Short(rs.getShort("STATUS")));
  7743.                 invoiceDetailBean.setMode    (invoiceDetailBean.OLD_MODE);
  7744.  
  7745.                 if (rs.getObject("SOCINSNUMBER") != null)
  7746.                 {
  7747.                     invoiceDetailBean.setSocInsNumber (new Long(rs.getLong("SOCINSNUMBER")));
  7748.                 }
  7749.  
  7750.                 if (rs.getObject("ASSESSMENTDATE") != null)
  7751.                 {
  7752.                     invoiceDetailBean.setInjuryDate       (rs.getTimestamp("ASSESSMENTDATE"));
  7753.                     invoiceDetailBean.setInjuryDateEntFmt (rs.getString("ASSESSMENTDATEENTFMT"));
  7754.                     invoiceDetailBean.setInjuryDateStr    (OHUtilities.getDateStr(invoiceDetailBean.getInjuryDate(), invoiceDetailBean.getInjuryDateEntFmt()));
  7755.                 }
  7756.  
  7757.                 if (rs.getObject("INJURYID") != null)
  7758.                 {
  7759.                     invoiceDetailBean.setInjuryId     (new Long(rs.getLong("INJURYID")));
  7760.                     invoiceDetailBean.setInjuryNumber (new Long(rs.getLong("INJURYNUMBER")));
  7761.                     invoiceDetailBean.setServiceType  (OHConstants.SERVICE_TYPE_TRMT);
  7762.  
  7763.                     if (rs.getObject("DATECOMPLICATION") != null)
  7764.                     {
  7765.                         invoiceDetailBean.setServiceType (OHConstants.SERVICE_TYPE_COMPLICATION_TRMT);
  7766.                         invoiceDetailBean.setDateComplication(rs.getTimestamp("DATECOMPLICATION"));
  7767.                     }
  7768.                 }
  7769.                 else if (rs.getObject("SCHEDULEID") != null)
  7770.                 {
  7771.                     invoiceDetailBean.setDisbAssmtId   (new Long(rs.getLong("SCHEDULEID")));
  7772.                     invoiceDetailBean.setInjuryNumber  (new Long(rs.getLong("DISABILITYNUMBER")));
  7773.                     invoiceDetailBean.setSessionNumber (new Long(rs.getLong("SESSIONNUMBER")));
  7774.                     invoiceDetailBean.setServiceType   (OHConstants.SERVICE_TYPE_DISB_TRMT);
  7775.                 }
  7776.                 else
  7777.                 {
  7778.                     invoiceDetailBean.setServiceType (OHConstants.SERVICE_TYPE_MISC);
  7779.                 }
  7780.  
  7781.                 invoiceDetailBean.setName (OHUtilities.getFullName(rs.getString("FIRSTNAME"), rs.getString("SECONDNAME"),
  7782.                                                                    rs.getString("THIRDNAME"), rs.getString("SURNAME")));
  7783.  
  7784.                 treatmentInvoiceDetailsList.add (invoiceDetailBean);
  7785.             }
  7786.         }
  7787.         catch (GOSIException ge)
  7788.         {
  7789.             throw   ge;
  7790.         }
  7791.         catch (Exception e)
  7792.         {
  7793.             throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  7794.                                        GOSIConstants.SOCIAL_INSURANCE,
  7795.                                        this.getClass().toString(),
  7796.                                        "getTreatmentInvoiceDetailsList()",
  7797.                                        e,
  7798.                                        "CMN_ERR_1000");
  7799.         }
  7800.         finally
  7801.         {
  7802.             GOSIUtilities.cleanUp (con, ps, rs);
  7803.         }
  7804.  
  7805.         return treatmentInvoiceDetailsList;
  7806.     }
  7807.  
  7808.     /**
  7809.     * @METHOD NAME              :   getTreatmentInvoiceDetailBean
  7810.     * @INFORMATION              :   This method is to get Treatment Invoice Detail Bean
  7811.     * @PARAM                    :   class java.lang.Long
  7812.     * @RETURN                   :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceDetailBean
  7813.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  7814.     * @LAST MODIFIED BY         :
  7815.     * @LAST MODIFIED DATE       :
  7816.     **/
  7817.     public RegHospInvoiceDetailBean getTreatmentInvoiceDetailBean (Long treatmentInvoiceDetailId) throws GOSIException
  7818.     {
  7819.         RegHospInvoiceDetailBean invoiceDetailBean = null;
  7820.  
  7821.         PreparedStatement ps = null;
  7822.         ResultSet         rs = null;
  7823.  
  7824.         try
  7825.         {
  7826.             String sqlQuery = "SELECT   invcdet.invoicedetailsid, invcdet.invoiceheaderid, invcdet.trmtstartdate, " +
  7827.                               "         invcdet.trmtstartdateentfmt, invcdet.trmtenddate, invcdet.trmtenddateentfmt, " +
  7828.                               "         invcdet.servicesamount, invcdet.medicinesamount, invcdet.nodiscountamount, " +
  7829.                               "         invcdet.rejectedservicesamount, invcdet.rejectedmedicinesamount, " +
  7830.                               "         invcdet.rejectednodiscountamount, invcdet.pagenumber, invcdet.routingcriteria, invcdet.status, " +
  7831.                               "         NVL (inj.socinsnumber, NVL (disbassmt.socialinsurancenumber, invcdet.socialinsurancenumber)) AS socinsnumber, " +
  7832.                               "         NVL (inj.datecomplication, NVL (inj.injurydate, disbassmt.assessmentdate)) AS assessmentdate, " +
  7833.                               "         NVL (inj.datecomplicationentfmt, NVL (inj.injurydateentfmt, disbassmt.assessmentdateentfmt)) AS assessmentdateentfmt, " +
  7834.                               "         inj.injuryid, inj.datecomplication, inj.injurynumber, disbassmt.SCHEDULEID, disbassmt.disabilitynumber, mbappt.sessionnumber, " +
  7835.                               "         per.firstname, per.secondname, per.thirdname, per.surname " +
  7836.                               "    FROM " + SITables.T_REGHOSPINVOICEDET + " invcdet " +
  7837.                               "         LEFT JOIN " + SITables.T_INJURY + "         inj        ON invcdet.injuryid = inj.injuryid " +
  7838.                               "         LEFT JOIN " + SITables.T_DISBASSMT + "      disbassmt  ON invcdet.disbassmtid = disbassmt.SCHEDULEID " +
  7839.                               "         LEFT JOIN " + SITables.T_MBAPPOINTMENT + "  mbappt     ON disbassmt.scheduleid = mbappt.scheduleid " +
  7840.                               "         LEFT JOIN " + SITables.T_CONTRIBUTOR + "    con        ON (inj.contributorid IS NOT NULL AND inj.contributorid = con.contributorid) " +
  7841.                               "                                                                OR (inj.contributorid IS NULL AND " +
  7842.                               "                                                                    NVL (disbassmt.socialinsurancenumber, invcdet.socialinsurancenumber) = con.socialinsurancenumber) " +
  7843.                               "         LEFT JOIN " + SITables.T_PERSON + "         per        ON con.personid = per.personid " +
  7844.                               "   WHERE invcdet.invoicedetailsid = ? " +
  7845.                               "     AND invcdet.status <> ? ";
  7846.  
  7847.             con = GOSIUtilities.getConnection (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  7848.  
  7849.             ps = con.prepareStatement (sqlQuery);
  7850.  
  7851.             ps.setLong  (1, treatmentInvoiceDetailId);
  7852.             ps.setShort (2, OHConstants.REG_HOSP_INVC_DETAILS_CANCELLED);
  7853.  
  7854.             rs = ps.executeQuery ();
  7855.  
  7856.             if (rs.next())
  7857.             {
  7858.                 invoiceDetailBean = new RegHospInvoiceDetailBean ();
  7859.  
  7860.                 invoiceDetailBean.setInvoiceDetailsId (new Long(rs.getLong("INVOICEDETAILSID")));
  7861.                 invoiceDetailBean.setInvoiceHeaderId  (new Long(rs.getLong("INVOICEHEADERID")));
  7862.  
  7863.                 if (rs.getObject("TRMTSTARTDATE") != null)
  7864.                 {
  7865.                     invoiceDetailBean.setTrmtStartDate       (rs.getTimestamp("TRMTSTARTDATE"));
  7866.                     invoiceDetailBean.setTrmtStartDateEntFmt (rs.getString("TRMTSTARTDATEENTFMT"));
  7867.                     invoiceDetailBean.setTrmtStartDateStr    (OHUtilities.getDateStr(invoiceDetailBean.getTrmtStartDate(), invoiceDetailBean.getTrmtStartDateEntFmt()));
  7868.                 }
  7869.  
  7870.                 if (rs.getObject("TRMTENDDATE") != null)
  7871.                 {
  7872.                     invoiceDetailBean.setTrmtEndDate       (rs.getTimestamp("TRMTENDDATE"));
  7873.                     invoiceDetailBean.setTrmtEndDateEntFmt (rs.getString("TRMTENDDATEENTFMT"));
  7874.                     invoiceDetailBean.setTrmtEndDateStr    (OHUtilities.getDateStr(invoiceDetailBean.getTrmtEndDate(), invoiceDetailBean.getTrmtEndDateEntFmt()));
  7875.                 }
  7876.  
  7877.                 invoiceDetailBean.setServicesAmount           (new Double(rs.getDouble("SERVICESAMOUNT")));
  7878.                 invoiceDetailBean.setMedicinesAmount          (new Double(rs.getDouble("MEDICINESAMOUNT")));
  7879.                 invoiceDetailBean.setNoDiscountAmount         (new Double(rs.getDouble("NODISCOUNTAMOUNT")));
  7880.                 invoiceDetailBean.setRejectedServiceAmount    (new Double(rs.getDouble("REJECTEDSERVICESAMOUNT")));
  7881.                 invoiceDetailBean.setRejectedMedicineAmount   (new Double(rs.getDouble("REJECTEDMEDICINESAMOUNT")));
  7882.                 invoiceDetailBean.setRejectedNoDiscountAmount (new Double(rs.getDouble("REJECTEDNODISCOUNTAMOUNT")));
  7883.  
  7884.                 invoiceDetailBean.setPageNumber (new Long (rs.getLong("PAGENUMBER")));
  7885.  
  7886.                 if (rs.getObject("ROUTINGCRITERIA") != null)
  7887.                 {
  7888.                     invoiceDetailBean.setRoutingCriteria (new Short(rs.getShort("ROUTINGCRITERIA")));
  7889.                 }
  7890.  
  7891.                 invoiceDetailBean.setStatus  (new Short(rs.getShort("STATUS")));
  7892.                 invoiceDetailBean.setMode    (invoiceDetailBean.OLD_MODE);
  7893.  
  7894.                 if (rs.getObject("SOCINSNUMBER") != null)
  7895.                 {
  7896.                     invoiceDetailBean.setSocInsNumber (new Long(rs.getLong("SOCINSNUMBER")));
  7897.                 }
  7898.  
  7899.                 if (rs.getObject("ASSESSMENTDATE") != null)
  7900.                 {
  7901.                     invoiceDetailBean.setInjuryDate       (rs.getTimestamp("ASSESSMENTDATE"));
  7902.                     invoiceDetailBean.setInjuryDateEntFmt (rs.getString("ASSESSMENTDATEENTFMT"));
  7903.                     invoiceDetailBean.setInjuryDateStr    (OHUtilities.getDateStr(invoiceDetailBean.getInjuryDate(), invoiceDetailBean.getInjuryDateEntFmt()));
  7904.                 }
  7905.  
  7906.                 if (rs.getObject("INJURYID") != null)
  7907.                 {
  7908.                     invoiceDetailBean.setInjuryId     (new Long(rs.getLong("INJURYID")));
  7909.                     invoiceDetailBean.setInjuryNumber (new Long(rs.getLong("INJURYNUMBER")));
  7910.                     invoiceDetailBean.setServiceType  (OHConstants.SERVICE_TYPE_TRMT);
  7911.  
  7912.                     if (rs.getObject("DATECOMPLICATION") != null)
  7913.                     {
  7914.                         invoiceDetailBean.setServiceType (OHConstants.SERVICE_TYPE_COMPLICATION_TRMT);
  7915.                     }
  7916.                 }
  7917.                 else if (rs.getObject("SCHEDULEID") != null)
  7918.                 {
  7919.                     invoiceDetailBean.setDisbAssmtId   (new Long(rs.getLong("SCHEDULEID")));
  7920.                     invoiceDetailBean.setInjuryNumber  (new Long(rs.getLong("DISABILITYNUMBER")));
  7921.                     invoiceDetailBean.setSessionNumber (new Long(rs.getLong("SESSIONNUMBER")));
  7922.                     invoiceDetailBean.setServiceType   (OHConstants.SERVICE_TYPE_DISB_TRMT);
  7923.                 }
  7924.                 else
  7925.                 {
  7926.                     invoiceDetailBean.setServiceType (OHConstants.SERVICE_TYPE_MISC);
  7927.                 }
  7928.  
  7929.                 invoiceDetailBean.setName (OHUtilities.getFullName(rs.getString("FIRSTNAME"), rs.getString("SECONDNAME"),
  7930.                                                                    rs.getString("THIRDNAME"), rs.getString("SURNAME")));
  7931.             }
  7932.         }
  7933.         catch (GOSIException ge)
  7934.         {
  7935.             throw   ge;
  7936.         }
  7937.         catch (Exception e)
  7938.         {
  7939.             throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  7940.                                        GOSIConstants.SOCIAL_INSURANCE,
  7941.                                        this.getClass().toString(),
  7942.                                        "getTreatmentInvoiceDetailBean()",
  7943.                                        e,
  7944.                                        "CMN_ERR_1000");
  7945.         }
  7946.         finally
  7947.         {
  7948.             GOSIUtilities.cleanUp (con, ps, rs);
  7949.         }
  7950.  
  7951.         return invoiceDetailBean;
  7952.     }
  7953.     /**
  7954.     * @METHOD NAME              :   getTreatmentServices
  7955.     * @INFORMATION              :   This method is to get Treatment Services
  7956.     * @PARAM                    :   class java.lang.Long,
  7957.                                     class java.lang.Long
  7958.     * @RETURN                   :   class java.util.ArrayList
  7959.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  7960.     * @LAST MODIFIED BY         :
  7961.     * @LAST MODIFIED DATE       :
  7962.     **/
  7963.     public ArrayList getTreatmentServices (Long treatmentInvoiceDetailId, Long hospitalCode) throws GOSIException
  7964.     {
  7965.         PreparedStatement ps = null;
  7966.         ResultSet         rs = null;
  7967.         PreparedStatement ps2 = null;
  7968.         ResultSet         rs2= null;
  7969.  
  7970.         ArrayList treatmentServices = new ArrayList ();
  7971.  
  7972.         try
  7973.         {
  7974.             String sqlQuery = "SELECT trmtsvcsdet.trmtservicehdrid, trmtsvcsdet.trmtservicedetid, trmtsvcsdet.trmtdate, trmtsvcsdet.icd10trmtdiagnosiscode, trmtsvcsdet.trmtdesc, trmtsvcsdet.RejectedTrmtAmt , " +
  7975.                               "       trmtsvcsdet.units, trmtsvcsdet.approvedunits, trmtsvcsdet.unitprice, trmtsvcsdet.trmtamt, trmtsvcsdet.trmtsrvcstatus,trmtsvcsdet.uom , trmtsvcsdet.reasonfordeduction , trmtsvcsdet.IOFlag ," +
  7976.                               "     trmtsvcsdet.discountpercentage, trmtsvcsdet.approveddiscpercentage, trmtsvcsdet.SFDACode , inj.injuryid, disbassmt.SCHEDULEID, NVL(inj.socinsnumber,disbassmt.socialinsurancenumber) AS socinsnumber, " +
  7977.                               "       trmtsvcshdr.patientnumber, trmtsvcshdr.hospitalcode " +
  7978.                               "  FROM " + SITables.T_REGHOSPINVOICEDET + " invcdet " +
  7979.                               "       LEFT JOIN " + SITables.T_TRMTSERVICESHDR + " trmtsvcshdr  ON invcdet.invoicedetailsid = trmtsvcshdr.invoicedetailsid " +
  7980.                               "       LEFT JOIN " + SITables.T_TRMTSERVICESDET + " trmtsvcsdet  ON trmtsvcshdr.trmtservicehdrid = trmtsvcsdet.trmtservicehdrid " +
  7981.                               "       LEFT JOIN " + SITables.T_INJURY + "          inj          ON trmtsvcshdr.injuryid = inj.injuryid " +
  7982.                               "       LEFT JOIN " + SITables.T_DISBASSMT + "       disbassmt    ON trmtsvcshdr.disassmtid = disbassmt.SCHEDULEID " +
  7983.                               " WHERE trmtsvcsdet.trmtservicedetid IS NOT NULL " +
  7984.                               "   AND invcdet.invoicedetailsid = ? " +
  7985.                               " ORDER BY NVL(trmtsvcsdet.SFDACODE,trmtsvcsdet.ICD10TRMTDIAGNOSISCODE) , trmtsvcsdet.TRMTDATE  ASC";
  7986.  
  7987.             con = GOSIUtilities.getConnection (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  7988.  
  7989.             ps = con.prepareStatement (sqlQuery);
  7990.  
  7991.             ps.setLong (1, treatmentInvoiceDetailId);
  7992.  
  7993.             rs = ps.executeQuery ();
  7994.  
  7995.             while (rs.next())
  7996.             {
  7997.                 if (! hospitalCode.equals(rs.getLong("HOSPITALCODE")))
  7998.                 {
  7999.                     throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  8000.                                                GOSIConstants.SOCIAL_INSURANCE,
  8001.                                                this.getClass().toString(),
  8002.                                                "getTreatmentServices()",
  8003.                                                null,
  8004.                                                "SOI_ERR_5872");
  8005.                 }
  8006.  
  8007.                 TreatmentServiceBean serviceBean = new TreatmentServiceBean ();
  8008.  
  8009.                 serviceBean.setTrmtServiceHdrId (new Long(rs.getLong("TRMTSERVICEHDRID")));
  8010.                 serviceBean.setTrmtServiceDetId (new Long(rs.getLong("TRMTSERVICEDETID")));
  8011.                 serviceBean.setTrmtDateGreg     (rs.getTimestamp("TRMTDATE"));
  8012.                 serviceBean.setTrmtCode         (rs.getString("ICD10TRMTDIAGNOSISCODE"));
  8013.                 serviceBean.setTrmt             (rs.getString("TRMTDESC"));
  8014.                 serviceBean.setUnits            (rs.getFloat("UNITS"));
  8015.                
  8016.                 if(rs.getObject("APPROVEDUNITS")!=null)
  8017.                     serviceBean.setApprovedUnits    (rs.getFloat("APPROVEDUNITS"));
  8018.                 else
  8019.                     serviceBean.setApprovedUnits    (serviceBean.getUnits());
  8020.                
  8021.                 serviceBean.setUnitPrice        (new Double(rs.getDouble("UNITPRICE")));
  8022.                 serviceBean.setTrmtAmt          (new Double(rs.getDouble("TRMTAMT")));
  8023.                 serviceBean.setTrmtSrvcStatus   (new Short(rs.getShort("TRMTSRVCSTATUS")));
  8024.  
  8025.                 if (rs.getObject("INJURYID") != null)
  8026.                 {
  8027.                     serviceBean.setInjuryId (new Long(rs.getLong("INJURYID")));
  8028.                 }
  8029.  
  8030.                 if (rs.getObject("SCHEDULEID") != null)
  8031.                 {
  8032.                     serviceBean.setDisbAssmtId (new Long(rs.getLong("SCHEDULEID")));
  8033.                 }
  8034.  
  8035.                 if (rs.getObject("SOCINSNUMBER") != null)
  8036.                 {
  8037.                     serviceBean.setSocInsNumber (new Long(rs.getLong("SOCINSNUMBER")));
  8038.                 }
  8039.  
  8040.                 if (rs.getObject("PATIENTNUMBER") != null)
  8041.                 {
  8042.                     serviceBean.setPatientNumber (rs.getString("PATIENTNUMBER"));
  8043.                 }
  8044.                
  8045.                 if (rs.getObject("UOM") != null)
  8046.                 {
  8047.                     serviceBean.setUOM(rs.getString("UOM"));
  8048.                 }
  8049.                 if (rs.getObject("DISCOUNTPERCENTAGE") != null)
  8050.                 {
  8051.                     serviceBean.setDiscountPercentage(rs.getDouble("DISCOUNTPERCENTAGE"));
  8052.                 }
  8053.                 if (rs.getObject("APPROVEDDISCPERCENTAGE") != null)
  8054.                 {
  8055.                     serviceBean.setApprovedDiscPercentage(rs.getDouble("APPROVEDDISCPERCENTAGE"));
  8056.                 }
  8057.                 if (rs.getObject("REASONFORDEDUCTION") != null)
  8058.                 {
  8059.                     serviceBean.setReasonForDeduction(rs.getString("REASONFORDEDUCTION"));
  8060.                 }
  8061.                 if (rs.getObject("IOFLAG") != null)
  8062.                 {
  8063.                     serviceBean.setIOFlag(rs.getString("IOFLAG").charAt(0));
  8064.                 }
  8065.                 if (rs.getObject("REJECTEDTRMTAMT") != null)
  8066.                 {
  8067.                     serviceBean.setRejectedTrmtAmt(rs.getDouble("REJECTEDTRMTAMT"));
  8068.                 }
  8069.                 if (rs.getObject("SFDACODE") != null)
  8070.                 {
  8071.                     String SFDACode=rs.getString("SFDACODE");
  8072.                     serviceBean.setSFDACode(SFDACode);
  8073.                    
  8074.                     if(!SFDACode.equals(""))
  8075.                     {
  8076.                        
  8077.                         sqlQuery="SELECT ID, REGISTRATIONNUM ,PUBLICPRICE , DRUGTYPE from T_SFDA where REGISTRATIONNUM=? ";
  8078.                         ps2 = con.prepareStatement (sqlQuery);
  8079.                         ps2.setString (1, SFDACode);
  8080.                         rs2 = ps2.executeQuery ();
  8081.                         if(rs2.next()) {
  8082.                             if(rs2.getObject("PUBLICPRICE")!=null)
  8083.                                 serviceBean.setSFDAMedicinePrice(rs2.getDouble("PUBLICPRICE"));
  8084.                            
  8085.                             if(rs2.getObject("DRUGTYPE")!=null)
  8086.                                 serviceBean.setDrugType(rs2.getString("DRUGTYPE").charAt(0));
  8087.  
  8088.                         }
  8089.                     }
  8090.                     GOSIUtilities.cleanUp (ps2, rs2);
  8091.                 }
  8092.                
  8093.  
  8094.                 treatmentServices.add (serviceBean);
  8095.             }
  8096.  
  8097.             return  treatmentServices;
  8098.         }
  8099.         catch (GOSIException ge)
  8100.         {
  8101.             throw   ge;
  8102.         }
  8103.         catch (Exception e)
  8104.         {
  8105.             throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  8106.                                        GOSIConstants.SOCIAL_INSURANCE,
  8107.                                        this.getClass().toString(),
  8108.                                        "getTreatmentServices()",
  8109.                                        e,
  8110.                                        "CMN_ERR_1000");
  8111.         }
  8112.         finally
  8113.         {
  8114.             GOSIUtilities.cleanUp (con, ps, rs);
  8115.         }
  8116.     }
  8117.    
  8118.     /**
  8119.     * @METHOD NAME              :   getDeductionTreatmentServices
  8120.     * @INFORMATION              :   This method is to get Treatment Services
  8121.     * @PARAM                    :   class java.lang.Long,
  8122.                                     class java.lang.Long
  8123.     * @RETURN                   :   class java.util.ArrayList
  8124.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  8125.     * @LAST MODIFIED BY         :
  8126.     * @LAST MODIFIED DATE       :
  8127.     **/
  8128.     public ArrayList getDeductionTreatmentServices (Long treatmentInvoiceDetailId, Long hospitalCode) throws GOSIException
  8129.     {
  8130.         PreparedStatement ps = null;
  8131.         ResultSet         rs = null;
  8132.         PreparedStatement ps2 = null;
  8133.         ResultSet         rs2= null;
  8134.  
  8135.         ArrayList treatmentServices = new ArrayList ();
  8136.        
  8137.        
  8138.  
  8139.         try
  8140.         {
  8141.            
  8142.             con = GOSIUtilities.getConnection (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  8143.            
  8144.             if( hasPendingTreatmentServices(treatmentInvoiceDetailId) )
  8145.             {
  8146.                 throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  8147.                         GOSIConstants.SOCIAL_INSURANCE,
  8148.                         this.getClass().toString(),
  8149.                         "getDeductionTreatmentServices()",
  8150.                         null,
  8151.                         "SOI_ERR_5930");
  8152.             }
  8153.            
  8154.             String sqlQuery = "SELECT trmtsvcsdet.trmtservicehdrid, trmtsvcsdet.trmtservicedetid, trmtsvcsdet.trmtdate, trmtsvcsdet.icd10trmtdiagnosiscode, " +
  8155.                     "trmtsvcsdet.trmtdesc, trmtsvcsdet.RejectedTrmtAmt ,trmtsvcsdet.APPEALDEDCUTIONSTATUS , trmtsvcsdet.REASONOFAPPEALDEDCUTION , " +
  8156.                               "       trmtsvcsdet.units, trmtsvcsdet.approvedunits, trmtsvcsdet.unitprice, trmtsvcsdet.trmtamt, " +
  8157.                               "trmtsvcsdet.trmtsrvcstatus,trmtsvcsdet.uom , trmtsvcsdet.reasonfordeduction , trmtsvcsdet.IOFlag ," +
  8158.                               "       trmtsvcsdet.approveddiscpercentage, trmtsvcsdet.SFDACode , inj.injuryid, disbassmt.SCHEDULEID," +
  8159.                               " NVL(inj.socinsnumber,disbassmt.socialinsurancenumber) AS socinsnumber, trmtsvcsdet.discountpercentage , " +
  8160.                               "       trmtsvcshdr.patientnumber, trmtsvcshdr.hospitalcode " +
  8161.                               "  FROM " + SITables.T_REGHOSPINVOICEDET + " invcdet " +
  8162.                               "       LEFT JOIN " + SITables.T_TRMTSERVICESHDR + " trmtsvcshdr  ON invcdet.invoicedetailsid = trmtsvcshdr.invoicedetailsid " +
  8163.                               "       LEFT JOIN " + SITables.T_TRMTSERVICESDET + " trmtsvcsdet  ON trmtsvcshdr.trmtservicehdrid = trmtsvcsdet.trmtservicehdrid " +
  8164.                               "       LEFT JOIN " + SITables.T_INJURY + "          inj          ON trmtsvcshdr.injuryid = inj.injuryid " +
  8165.                               "       LEFT JOIN " + SITables.T_DISBASSMT + "       disbassmt    ON trmtsvcshdr.disassmtid = disbassmt.SCHEDULEID " +
  8166.                               " WHERE trmtsvcsdet.trmtservicedetid IS NOT NULL  AND ( trmtsvcsdet.RejectedTrmtAmt>0 OR TRMTSVCSDET.REASONFORDEDUCTION is not null ) " +
  8167.                               "   AND invcdet.invoicedetailsid = ? " +
  8168.                               " ORDER BY NVL(trmtsvcsdet.SFDACODE,trmtsvcsdet.ICD10TRMTDIAGNOSISCODE) , trmtsvcsdet.TRMTDATE  ASC";
  8169.  
  8170.  
  8171.  
  8172.             ps = con.prepareStatement (sqlQuery);
  8173.  
  8174.             ps.setLong (1, treatmentInvoiceDetailId);
  8175.  
  8176.             rs = ps.executeQuery ();
  8177.  
  8178.             while (rs.next())
  8179.             {
  8180.                 if (! hospitalCode.equals(rs.getLong("HOSPITALCODE")))
  8181.                 {
  8182.                     throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  8183.                                                GOSIConstants.SOCIAL_INSURANCE,
  8184.                                                this.getClass().toString(),
  8185.                                                "getDeductionTreatmentServices()",
  8186.                                                null,
  8187.                                                "SOI_ERR_5872");
  8188.                 }
  8189.  
  8190.                 TreatmentServiceBean serviceBean = new TreatmentServiceBean ();
  8191.  
  8192.                 serviceBean.setTrmtServiceHdrId (new Long(rs.getLong("TRMTSERVICEHDRID")));
  8193.                 serviceBean.setTrmtServiceDetId (new Long(rs.getLong("TRMTSERVICEDETID")));
  8194.                 serviceBean.setTrmtDateGreg     (rs.getTimestamp("TRMTDATE"));
  8195.                 serviceBean.setTrmtCode         (rs.getString("ICD10TRMTDIAGNOSISCODE"));
  8196.                 serviceBean.setTrmt             (rs.getString("TRMTDESC"));
  8197.                 serviceBean.setUnits            (rs.getFloat("UNITS"));
  8198.                 serviceBean.setApprovedUnits    (rs.getFloat("APPROVEDUNITS"));
  8199.                 serviceBean.setUnitPrice        (new Double(rs.getDouble("UNITPRICE")));
  8200.                 serviceBean.setTrmtAmt          (new Double(rs.getDouble("TRMTAMT")));
  8201.                 serviceBean.setTrmtSrvcStatus   (new Short(rs.getShort("TRMTSRVCSTATUS")));
  8202.  
  8203.                 if (rs.getObject("INJURYID") != null)
  8204.                 {
  8205.                     serviceBean.setInjuryId (new Long(rs.getLong("INJURYID")));
  8206.                 }
  8207.  
  8208.                 if (rs.getObject("SCHEDULEID") != null)
  8209.                 {
  8210.                     serviceBean.setDisbAssmtId (new Long(rs.getLong("SCHEDULEID")));
  8211.                 }
  8212.  
  8213.                 if (rs.getObject("SOCINSNUMBER") != null)
  8214.                 {
  8215.                     serviceBean.setSocInsNumber (new Long(rs.getLong("SOCINSNUMBER")));
  8216.                 }
  8217.  
  8218.                 if (rs.getObject("PATIENTNUMBER") != null)
  8219.                 {
  8220.                     serviceBean.setPatientNumber (rs.getString("PATIENTNUMBER"));
  8221.                 }
  8222.                
  8223.                 if (rs.getObject("UOM") != null)
  8224.                 {
  8225.                     serviceBean.setUOM(rs.getString("UOM"));
  8226.                 }
  8227.                 if (rs.getObject("DISCOUNTPERCENTAGE") != null)
  8228.                 {
  8229.                     serviceBean.setDiscountPercentage(rs.getDouble("DISCOUNTPERCENTAGE"));
  8230.                 }
  8231.                 if (rs.getObject("APPROVEDDISCPERCENTAGE") != null)
  8232.                 {
  8233.                     serviceBean.setApprovedDiscPercentage(rs.getDouble("APPROVEDDISCPERCENTAGE"));
  8234.                 }
  8235.                 if (rs.getObject("REASONFORDEDUCTION") != null)
  8236.                 {
  8237.                     serviceBean.setReasonForDeduction(rs.getString("REASONFORDEDUCTION"));
  8238.                 }
  8239.                 if (rs.getObject("IOFLAG") != null)
  8240.                 {
  8241.                     serviceBean.setIOFlag(rs.getString("IOFLAG").charAt(0));
  8242.                 }
  8243.                 if (rs.getObject("REJECTEDTRMTAMT") != null)
  8244.                 {
  8245.                     serviceBean.setRejectedTrmtAmt(rs.getDouble("REJECTEDTRMTAMT"));
  8246.                 }
  8247.                 if (rs.getObject("APPEALDEDCUTIONSTATUS") != null)
  8248.                 {
  8249.                     serviceBean.setAppealDedcutionStatus(rs.getShort("APPEALDEDCUTIONSTATUS"));
  8250.                 }
  8251.                 if (rs.getObject("REASONOFAPPEALDEDCUTION") != null)
  8252.                 {
  8253.                     serviceBean.setReasonOfAppealDedcution(rs.getString("REASONOFAPPEALDEDCUTION"));
  8254.                 }
  8255.                 if (rs.getObject("SFDACODE") != null)
  8256.                 {
  8257.                     String SFDACode=rs.getString("SFDACODE");
  8258.                     serviceBean.setSFDACode(SFDACode);
  8259.                    
  8260.                     if(!SFDACode.equals(""))
  8261.                     {
  8262.                         sqlQuery="SELECT ID, REGISTRATIONNUM ,PUBLICPRICE , DRUGTYPE from T_SFDA where REGISTRATIONNUM=? ";
  8263.                         ps2 = con.prepareStatement (sqlQuery);
  8264.                         ps2.setString (1, SFDACode);
  8265.                         rs2 = ps2.executeQuery ();
  8266.                         if(rs2.next()) {
  8267.                             if(rs2.getObject("PUBLICPRICE")!=null)
  8268.                                 serviceBean.setSFDAMedicinePrice(rs2.getDouble("PUBLICPRICE"));
  8269.                            
  8270.                             if(rs2.getObject("DRUGTYPE")!=null)
  8271.                                 serviceBean.setDrugType(rs2.getString("DRUGTYPE").charAt(0));
  8272.  
  8273.                         }
  8274.                     }
  8275.                     GOSIUtilities.cleanUp (ps2, rs2);
  8276.                 }
  8277.                
  8278.  
  8279.                 treatmentServices.add (serviceBean);
  8280.             }
  8281.  
  8282.             return  treatmentServices;
  8283.         }
  8284.         catch (GOSIException ge)
  8285.         {
  8286.             throw   ge;
  8287.         }
  8288.         catch (Exception e)
  8289.         {
  8290.             throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  8291.                                        GOSIConstants.SOCIAL_INSURANCE,
  8292.                                        this.getClass().toString(),
  8293.                                        "getDeductionTreatmentServices()",
  8294.                                        e,
  8295.                                        "CMN_ERR_1000");
  8296.         }
  8297.         finally
  8298.         {
  8299.             GOSIUtilities.cleanUp (con, ps, rs);
  8300.         }
  8301.     }
  8302.    
  8303.     /**
  8304.     * @METHOD NAME              :   getDeductionTreatmentInvoiceDetails
  8305.     * @INFORMATION              :   This method is to get Treatment Services
  8306.     * @PARAM                    :   class java.lang.Long,
  8307.                                     class java.lang.Long
  8308.     * @RETURN                   :   class java.util.ArrayList
  8309.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  8310.     * @LAST MODIFIED BY         :
  8311.     * @LAST MODIFIED DATE       :
  8312.     **/
  8313.     public ArrayList getDeductionTreatmentInvoiceDetails (Long treatmentInvoiceHeaderId, Long hospitalCode) throws GOSIException
  8314.     {
  8315.         ArrayList treatmentInvoiceDetailsList = new ArrayList ();
  8316.  
  8317.         PreparedStatement ps = null;
  8318.         ResultSet         rs = null;
  8319.  
  8320.         try
  8321.         {
  8322.             StringBuilder sqlQuery=new StringBuilder();
  8323.             sqlQuery.append("SELECT  distinct invcdet.invoicedetailsid, invcdet.invoiceheaderid, invcdet.trmtstartdate, ");
  8324.             sqlQuery.append( "         invcdet.trmtstartdateentfmt, invcdet.trmtenddate, invcdet.trmtenddateentfmt, " );
  8325.             sqlQuery.append( "         invcdet.servicesamount, invcdet.medicinesamount, invcdet.nodiscountamount, " );
  8326.             sqlQuery.append( "         invcdet.rejectedservicesamount, invcdet.rejectedmedicinesamount, " );
  8327.             sqlQuery.append( "         invcdet.rejectednodiscountamount, invcdet.pagenumber, invcdet.routingcriteria, invcdet.status, " );
  8328.             sqlQuery.append( "         NVL (inj.socinsnumber, NVL (disbassmt.socialinsurancenumber, invcdet.socialinsurancenumber)) AS socinsnumber, " );
  8329.             sqlQuery.append( "         NVL (inj.datecomplication, NVL (inj.injurydate, disbassmt.assessmentdate)) AS assessmentdate, " );
  8330.             sqlQuery.append( "         NVL (inj.datecomplicationentfmt, NVL (inj.injurydateentfmt, disbassmt.assessmentdateentfmt)) AS assessmentdateentfmt, " );
  8331.             sqlQuery.append( "         inj.injuryid, inj.datecomplication, inj.injurynumber, disbassmt.SCHEDULEID, disbassmt.disabilitynumber, mbappt.sessionnumber, " );
  8332.             sqlQuery.append( "         per.firstname, per.secondname, per.thirdname, per.surname, invchdr.hospitalcode , trmthdr.appealstatus" );
  8333.             sqlQuery.append( "    FROM " + SITables.T_REGHOSPINVOICEHDR + " invchdr " );
  8334.             sqlQuery.append( "         LEFT JOIN " + SITables.T_REGHOSPINVOICEDET + " invcdet    ON invchdr.invoiceheaderid = invcdet.invoiceheaderid " );
  8335.             sqlQuery.append( "         LEFT JOIN " + SITables.T_INJURY + "            inj        ON invcdet.injuryid = inj.injuryid " );
  8336.             sqlQuery.append( "         LEFT JOIN " + SITables.T_DISBASSMT + "         disbassmt  ON invcdet.disbassmtid = disbassmt.SCHEDULEID " );
  8337.             sqlQuery.append( "         LEFT JOIN " + SITables.T_MBAPPOINTMENT + "     mbappt     ON disbassmt.scheduleid = mbappt.scheduleid " );
  8338.             sqlQuery.append( "          LEFT JOIN " + SITables.T_TRMTSERVICESHDR+ "     trmthdr   ON invcdet.invoicedetailsid = trmthdr.invoicedetailsid " );
  8339.             sqlQuery.append( "          LEFT JOIN " + SITables.T_TRMTSERVICESDET+ "     trmtdet    on trmthdr.trmtservicehdrid = trmtdet.trmtservicehdrid " );
  8340.             sqlQuery.append( "         LEFT JOIN " + SITables.T_CONTRIBUTOR + "       con        ON (inj.contributorid IS NOT NULL AND inj.contributorid = con.contributorid) " );
  8341.             sqlQuery.append( "                                                                   OR (inj.contributorid IS NULL AND " );
  8342.             sqlQuery.append( "                                                                       NVL (disbassmt.socialinsurancenumber, invcdet.socialinsurancenumber) = con.socialinsurancenumber) " );
  8343.             sqlQuery.append( "         LEFT JOIN " + SITables.T_PERSON + "            per        ON con.personid = per.personid " );
  8344.             sqlQuery.append( "   WHERE invchdr.invoiceheaderid = ? " );
  8345.             sqlQuery.append( "     AND invchdr.invoicestatus <> ? " );
  8346.             sqlQuery.append( " AND invcdet.status <> ?     " );
  8347.             sqlQuery.append( " AND(  (TRMTDET.REJECTEDTRMTAMT > 0 AND TRMTDET.TRMTSRVCSTATUS = ?)");
  8348.             sqlQuery.append( " OR trmthdr.appealstatus in ( ? , ? , ?) ) ");
  8349.             sqlQuery.append( " ORDER BY   (invcdet.rejectedservicesamount+invcdet.rejectedmedicinesamount+invcdet.rejectednodiscountamount) desc ");
  8350.  
  8351.             con = GOSIUtilities.getConnection (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  8352.  
  8353.             ps = con.prepareStatement (sqlQuery.toString());
  8354.  
  8355.             ps.setLong  (1, treatmentInvoiceHeaderId);     
  8356.             ps.setShort (2, OHConstants.REG_HOSP_INVC_CANCELLED);
  8357.             ps.setShort (3, OHConstants.REG_HOSP_INVC_DETAILS_CANCELLED);
  8358.             ps.setShort (4, OHConstants.TRMT_SRVC_STS_APPROVED);
  8359.             ps.setShort (5, OHConstants.TRMT_SRVC_HDR_APPEAL_STS_ENTERED);
  8360.             ps.setShort (6, OHConstants.TRMT_SRVC_HDR_APPEAL_STS_APPROVED);
  8361.             ps.setShort (7, OHConstants.TRMT_SRVC_HDR_APPEAL_STS_REJECTED);
  8362.  
  8363.             rs = ps.executeQuery ();
  8364.  
  8365.             while (rs.next())
  8366.             {
  8367.                 if (! hospitalCode.equals(rs.getLong("HOSPITALCODE")))
  8368.                 {
  8369.                     throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  8370.                                                GOSIConstants.SOCIAL_INSURANCE,
  8371.                                                this.getClass().toString(),
  8372.                                                "getTreatmentInvoiceDetailsList()",
  8373.                                                null,
  8374.                                                "SOI_ERR_5864");
  8375.                 }
  8376.  
  8377.                 RegHospInvoiceDetailBean invoiceDetailBean = new RegHospInvoiceDetailBean ();
  8378.  
  8379.                 invoiceDetailBean.setInvoiceDetailsId (new Long(rs.getLong("INVOICEDETAILSID")));
  8380.                 invoiceDetailBean.setInvoiceHeaderId  (new Long(rs.getLong("INVOICEHEADERID")));
  8381.  
  8382.                 if (rs.getObject("TRMTSTARTDATE") != null)
  8383.                 {
  8384.                     invoiceDetailBean.setTrmtStartDate       (rs.getTimestamp("TRMTSTARTDATE"));
  8385.                     invoiceDetailBean.setTrmtStartDateEntFmt (rs.getString("TRMTSTARTDATEENTFMT"));
  8386.                     invoiceDetailBean.setTrmtStartDateStr    (OHUtilities.getDateStr(invoiceDetailBean.getTrmtStartDate(), invoiceDetailBean.getTrmtStartDateEntFmt()));
  8387.                 }
  8388.  
  8389.                 if (rs.getObject("TRMTENDDATE") != null)
  8390.                 {
  8391.                     invoiceDetailBean.setTrmtEndDate       (rs.getTimestamp("TRMTENDDATE"));
  8392.                     invoiceDetailBean.setTrmtEndDateEntFmt (rs.getString("TRMTENDDATEENTFMT"));
  8393.                     invoiceDetailBean.setTrmtEndDateStr    (OHUtilities.getDateStr(invoiceDetailBean.getTrmtEndDate(), invoiceDetailBean.getTrmtEndDateEntFmt()));
  8394.                 }
  8395.  
  8396.                 invoiceDetailBean.setServicesAmount           (new Double(rs.getDouble("SERVICESAMOUNT")));
  8397.                 invoiceDetailBean.setMedicinesAmount          (new Double(rs.getDouble("MEDICINESAMOUNT")));
  8398.                 invoiceDetailBean.setNoDiscountAmount         (new Double(rs.getDouble("NODISCOUNTAMOUNT")));
  8399.                 invoiceDetailBean.setRejectedServiceAmount    (new Double(rs.getDouble("REJECTEDSERVICESAMOUNT")));
  8400.                 invoiceDetailBean.setRejectedMedicineAmount   (new Double(rs.getDouble("REJECTEDMEDICINESAMOUNT")));
  8401.                 invoiceDetailBean.setRejectedNoDiscountAmount (new Double(rs.getDouble("REJECTEDNODISCOUNTAMOUNT")));
  8402.  
  8403.                 invoiceDetailBean.setPageNumber (new Long (rs.getLong("PAGENUMBER")));
  8404.  
  8405.                 if (rs.getObject("ROUTINGCRITERIA") != null)
  8406.                 {
  8407.                     invoiceDetailBean.setRoutingCriteria (new Short(rs.getShort("ROUTINGCRITERIA")));
  8408.                 }
  8409.  
  8410.                 invoiceDetailBean.setStatus  (new Short(rs.getShort("STATUS")));
  8411.                 invoiceDetailBean.setMode    (invoiceDetailBean.OLD_MODE);
  8412.  
  8413.                 if (rs.getObject("SOCINSNUMBER") != null)
  8414.                 {
  8415.                     invoiceDetailBean.setSocInsNumber (new Long(rs.getLong("SOCINSNUMBER")));
  8416.                 }
  8417.  
  8418.                 if (rs.getObject("ASSESSMENTDATE") != null)
  8419.                 {
  8420.                     invoiceDetailBean.setInjuryDate       (rs.getTimestamp("ASSESSMENTDATE"));
  8421.                     invoiceDetailBean.setInjuryDateEntFmt (rs.getString("ASSESSMENTDATEENTFMT"));
  8422.                     invoiceDetailBean.setInjuryDateStr    (OHUtilities.getDateStr(invoiceDetailBean.getInjuryDate(), invoiceDetailBean.getInjuryDateEntFmt()));
  8423.                 }
  8424.  
  8425.                 if (rs.getObject("INJURYID") != null)
  8426.                 {
  8427.                     invoiceDetailBean.setInjuryId     (new Long(rs.getLong("INJURYID")));
  8428.                     invoiceDetailBean.setInjuryNumber (new Long(rs.getLong("INJURYNUMBER")));
  8429.                     invoiceDetailBean.setServiceType  (OHConstants.SERVICE_TYPE_TRMT);
  8430.  
  8431.                     if (rs.getObject("DATECOMPLICATION") != null)
  8432.                     {
  8433.                         invoiceDetailBean.setServiceType (OHConstants.SERVICE_TYPE_COMPLICATION_TRMT);
  8434.                     }
  8435.                 }
  8436.                 else if (rs.getObject("SCHEDULEID") != null)
  8437.                 {
  8438.                     invoiceDetailBean.setDisbAssmtId   (new Long(rs.getLong("SCHEDULEID")));
  8439.                     invoiceDetailBean.setInjuryNumber  (new Long(rs.getLong("DISABILITYNUMBER")));
  8440.                     invoiceDetailBean.setSessionNumber (new Long(rs.getLong("SESSIONNUMBER")));
  8441.                     invoiceDetailBean.setServiceType   (OHConstants.SERVICE_TYPE_DISB_TRMT);
  8442.                 }
  8443.                 else
  8444.                 {
  8445.                     invoiceDetailBean.setServiceType (OHConstants.SERVICE_TYPE_MISC);
  8446.                 }
  8447.                 if (rs.getObject("APPEALSTATUS") != null)
  8448.                     invoiceDetailBean.setAppealStatus (rs.getShort("APPEALSTATUS"));                   
  8449.                 else
  8450.                     invoiceDetailBean.setAppealStatus (OHConstants.TRMT_SRVC_HDR_APPEAL_STS_PENDING_DATA_ENTRY);
  8451.  
  8452.                 invoiceDetailBean.setName (OHUtilities.getFullName(rs.getString("FIRSTNAME"), rs.getString("SECONDNAME"),
  8453.                                                                    rs.getString("THIRDNAME"), rs.getString("SURNAME")));
  8454.  
  8455.                 treatmentInvoiceDetailsList.add (invoiceDetailBean);
  8456.             }
  8457.         }
  8458.         catch (GOSIException ge)
  8459.         {
  8460.             throw   ge;
  8461.         }
  8462.         catch (Exception e)
  8463.         {
  8464.             throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  8465.                                        GOSIConstants.SOCIAL_INSURANCE,
  8466.                                        this.getClass().toString(),
  8467.                                        "getDeductionTreatmentInvoiceDetails()",
  8468.                                        e,
  8469.                                        "CMN_ERR_1000");
  8470.         }
  8471.         finally
  8472.         {
  8473.             GOSIUtilities.cleanUp (con, ps, rs);
  8474.         }
  8475.  
  8476.         return treatmentInvoiceDetailsList;
  8477.     }
  8478.    
  8479.    
  8480.     /**
  8481.     * @METHOD NAME              :   setNoAppealDeductionTrmtServiceInvoice
  8482.     * @INFORMATION              :   This method is to get Treatment Services
  8483.     * @PARAM                    :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.TreatmentServiceBean,
  8484.                                     class java.lang.Long
  8485.     * @RETURN                   :   class java.util.String
  8486.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  8487.     * @LAST MODIFIED BY         :
  8488.     * @LAST MODIFIED DATE       :
  8489.     **/
  8490.     public String setNoAppealDeductionTrmtServiceInvoice (Long treatmentInvoiceHeaderId, TreatmentServiceBean serviceBean) throws GOSIException
  8491.     {
  8492.         String message ="";
  8493.         TreatmentServiceDetailEntityHome serviceHome= (TreatmentServiceDetailEntityHome)
  8494.                 ServiceLocator.getInstance().getRemoteHome( OHConstants.TRMT_SRVC_DET_ENTITY_JNDI,
  8495.                 TreatmentServiceDetailEntityHome.class);
  8496.        
  8497.         TreatmentServiceHeaderEntityHome hdrServiceHome= (TreatmentServiceHeaderEntityHome)
  8498.                 ServiceLocator.getInstance().getRemoteHome( OHConstants.TRMT_SRVC_HDR_ENTITY_JNDI,
  8499.                         TreatmentServiceHeaderEntityHome.class);
  8500.         RegHospitalInvoiceHeaderEntityHome RegHosInvHome= (RegHospitalInvoiceHeaderEntityHome)
  8501.         ServiceLocator.getInstance().getRemoteHome( OHConstants.REG_HOSP_INVOICE_HEADER_ENTITY_JNDI,
  8502.                 RegHospitalInvoiceHeaderEntityHome.class);
  8503.    
  8504.         PreparedStatement ps = null;
  8505.         ResultSet         rs = null;
  8506.        
  8507.  
  8508.         try
  8509.         {
  8510.             String sqlQuery = "SELECT trmtsvcsdet.trmtservicedetid , trmtsvcshdr.trmtservicehdrid " +
  8511.             "  FROM " + SITables.T_REGHOSPINVOICEDET + " invcdet " +
  8512.             "       LEFT JOIN " + SITables.T_TRMTSERVICESHDR + " trmtsvcshdr  ON invcdet.invoicedetailsid = trmtsvcshdr.invoicedetailsid " +
  8513.             "       LEFT JOIN " + SITables.T_TRMTSERVICESDET + " trmtsvcsdet  ON trmtsvcshdr.trmtservicehdrid = trmtsvcsdet.trmtservicehdrid " +
  8514.             " WHERE trmtsvcsdet.trmtservicedetid IS NOT NULL  AND ( trmtsvcsdet.RejectedTrmtAmt>0 OR TRMTSVCSDET.REASONFORDEDUCTION is not null ) " +
  8515.             "   AND invcdet.invoiceheaderid = ? AND invcdet.status <> ? ";
  8516.  
  8517.  
  8518.             con = GOSIUtilities.getConnection (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  8519.  
  8520.             ps = con.prepareStatement (sqlQuery);
  8521.  
  8522.             ps.setLong  (1, treatmentInvoiceHeaderId);     
  8523.             ps.setShort (2, OHConstants.REG_HOSP_INVC_DETAILS_CANCELLED);
  8524.  
  8525.             rs = ps.executeQuery ();
  8526.            
  8527.             while (rs.next())
  8528.             {
  8529.                 Long trmtServiceDetId= rs.getLong("TRMTSERVICEDETID");
  8530.                 Long trmtServiceHdrId= rs.getLong("TRMTSERVICEHDRID");
  8531.                
  8532.                 TreatmentServiceDetailEntity serviceRemote = serviceHome.
  8533.                     findByPrimaryKey(trmtServiceDetId);
  8534.                 serviceRemote.modifyAppealDedcution(serviceBean);
  8535.                 TreatmentServiceHeaderEntity hdrService=hdrServiceHome.findByPrimaryKey(trmtServiceHdrId);
  8536.                 hdrService.setAppealStatus(OHConstants.TRMT_SRVC_HDR_APPEAL_STS_NO_APPEAL,serviceBean.getLastModifiedBy(),serviceBean.getLastModifiedTimestamp());
  8537.                 message=GOSIErrorMessages.getErrorDesc("SOI_ERR_5927");
  8538.             }
  8539.            
  8540.             RegHospitalInvoiceHeaderEntity RegHosInvRemote = RegHosInvHome.
  8541.             findByPrimaryKey(treatmentInvoiceHeaderId);
  8542.             RegHosInvRemote.markRegHospInvoiceHeaderAsPendingApproved(serviceBean.getLastModifiedBy());
  8543.         }
  8544.         catch (GOSIException ge)
  8545.         {
  8546.             throw   ge;
  8547.         }
  8548.         catch (Exception e)
  8549.         {
  8550.             throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  8551.                                        GOSIConstants.SOCIAL_INSURANCE,
  8552.                                        this.getClass().toString(),
  8553.                                        "setNoAppealDeductionTrmtServiceInvoice()",
  8554.                                        e,
  8555.                                        "CMN_ERR_1000");
  8556.         }
  8557.         finally
  8558.         {
  8559.             GOSIUtilities.cleanUp (con, ps, rs);
  8560.         }
  8561.  
  8562.         return message;
  8563.     }
  8564.     /**
  8565.     * @METHOD NAME              :   hasDeductionTreatmentServiceAlreadyEntered
  8566.     * @INFORMATION              :   This method is to get Treatment Services
  8567.     * @PARAM                    :   class java.lang.Long
  8568.     * @RETURN                   :   class java.util.String
  8569.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  8570.     * @LAST MODIFIED BY         :
  8571.     * @LAST MODIFIED DATE       :
  8572.     **/
  8573.     public Boolean hasDeductionTreatmentServiceAlreadyEntered (Long treatmentInvoiceHeaderId) throws GOSIException
  8574.     {
  8575.         Boolean hasDeductionTreatmentServiceAlreadyEntered =false;
  8576.         PreparedStatement ps = null;
  8577.         ResultSet         rs = null;
  8578.        
  8579.  
  8580.         try
  8581.         {
  8582.             String sqlQuery = "SELECT trmtsvcshdr.invoicedetailsid " +
  8583.             "  FROM " + SITables.T_REGHOSPINVOICEDET + " invcdet " +
  8584.             "       LEFT JOIN " + SITables.T_TRMTSERVICESHDR + " trmtsvcshdr  ON invcdet.invoicedetailsid = trmtsvcshdr.invoicedetailsid " +
  8585.             " WHERE   invcdet.invoiceheaderid = ? AND invcdet.status <> ? "+
  8586.             " AND trmtsvcshdr.appealStatus in ( ? , ? )";
  8587.  
  8588.  
  8589.             con = GOSIUtilities.getConnection (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  8590.  
  8591.             ps = con.prepareStatement (sqlQuery);
  8592.  
  8593.             ps.setLong  (1, treatmentInvoiceHeaderId);     
  8594.             ps.setShort (2, OHConstants.REG_HOSP_INVC_DETAILS_CANCELLED);
  8595.             ps.setShort (3, OHConstants.TRMT_SRVC_HDR_APPEAL_STS_ENTERED);
  8596.             ps.setShort (4, OHConstants.TRMT_SRVC_HDR_APPEAL_STS_PENDING_DATA_ENTRY);
  8597.  
  8598.             rs = ps.executeQuery ();
  8599.            
  8600.             if (rs.next())
  8601.             {
  8602.                 hasDeductionTreatmentServiceAlreadyEntered=true;   
  8603.             }
  8604.         }
  8605.         catch (GOSIException ge)
  8606.         {
  8607.             throw   ge;
  8608.         }
  8609.         catch (Exception e)
  8610.         {
  8611.             throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  8612.                                        GOSIConstants.SOCIAL_INSURANCE,
  8613.                                        this.getClass().toString(),
  8614.                                        "hasDeductionTreatmentServiceAlreadyEntered()",
  8615.                                        e,
  8616.                                        "CMN_ERR_1000");
  8617.         }
  8618.         finally
  8619.         {
  8620.             GOSIUtilities.cleanUp (con, ps, rs);
  8621.         }
  8622.  
  8623.         return hasDeductionTreatmentServiceAlreadyEntered;
  8624.     }
  8625.     /**
  8626.     * @METHOD NAME              :   isAppealStatusIsNoAppeal
  8627.     * @INFORMATION              :   This method is to get Treatment Services
  8628.     * @PARAM                    :   class java.lang.Long
  8629.     * @RETURN                   :   class java.util.String
  8630.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  8631.     * @LAST MODIFIED BY         :
  8632.     * @LAST MODIFIED DATE       :
  8633.     **/
  8634.     public Boolean isAppealStatusIsNoAppeal (Long treatmentInvoiceHeaderId) throws GOSIException
  8635.     {
  8636.         Boolean isAppealStatusIsNoAppeal =false;
  8637.         PreparedStatement ps = null;
  8638.         ResultSet         rs = null;
  8639.        
  8640.  
  8641.         try
  8642.         {
  8643.             String sqlQuery = "SELECT trmtsvcsdet.trmtservicedetid" +
  8644.             "  FROM " + SITables.T_REGHOSPINVOICEDET + " invcdet " +
  8645.             "       LEFT JOIN " + SITables.T_TRMTSERVICESHDR + " trmtsvcshdr  ON invcdet.invoicedetailsid = trmtsvcshdr.invoicedetailsid " +
  8646.             "       LEFT JOIN " + SITables.T_TRMTSERVICESDET + " trmtsvcsdet  ON trmtsvcshdr.trmtservicehdrid = trmtsvcsdet.trmtservicehdrid " +
  8647.             " WHERE trmtsvcsdet.trmtservicedetid IS NOT NULL  AND ( trmtsvcsdet.RejectedTrmtAmt>0 OR TRMTSVCSDET.REASONFORDEDUCTION is not null ) " +
  8648.             "   AND invcdet.invoiceheaderid = ? AND invcdet.status <> ? "+
  8649.             "AND trmtsvcsdet.APPEALDEDCUTIONSTATUS = ? AND trmtsvcsdet.APPEALDEDCUTIONDATE IS NOT NULL ";
  8650.  
  8651.  
  8652.             con = GOSIUtilities.getConnection (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  8653.  
  8654.             ps = con.prepareStatement (sqlQuery);
  8655.  
  8656.             ps.setLong  (1, treatmentInvoiceHeaderId);     
  8657.             ps.setShort (2, OHConstants.REG_HOSP_INVC_DETAILS_CANCELLED);
  8658.             ps.setShort (3, OHConstants.TRMT_SRVC_APPEAL_STS_NO_APPEAL);
  8659.  
  8660.             rs = ps.executeQuery ();
  8661.            
  8662.             if (rs.next())
  8663.             {
  8664.                 isAppealStatusIsNoAppeal=true; 
  8665.             }
  8666.         }
  8667.         catch (GOSIException ge)
  8668.         {
  8669.             throw   ge;
  8670.         }
  8671.         catch (Exception e)
  8672.         {
  8673.             throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  8674.                                        GOSIConstants.SOCIAL_INSURANCE,
  8675.                                        this.getClass().toString(),
  8676.                                        "isAppealStatusIsNoAppeal()",
  8677.                                        e,
  8678.                                        "CMN_ERR_1000");
  8679.         }
  8680.         finally
  8681.         {
  8682.             GOSIUtilities.cleanUp (con, ps, rs);
  8683.         }
  8684.  
  8685.         return isAppealStatusIsNoAppeal;
  8686.     }
  8687.     /**
  8688.     * @METHOD NAME              :   getInjuryListHaveApprovedTrmtForHos
  8689.     * @INFORMATION              :   This method is to get Injury List that have treatment which period date in the month of invoice
  8690.     * @PARAM                    :   class java.lang.Long
  8691.     *                               class gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceHeaderBean
  8692.     * @RETURN                   :   class java.util.ArrayList
  8693.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  8694.     * @LAST MODIFIED BY         :
  8695.     * @LAST MODIFIED DATE       :
  8696.     **/
  8697.     public ArrayList getInjuryListHaveApprovedTrmtForHos (Long hospitalCode , RegHospInvoiceHeaderBean invoiceHeaderBean ) throws GOSIException
  8698.     {
  8699.         PreparedStatement  ps  = null;
  8700.         ResultSet          rs  = null;
  8701.         ArrayList injuryList=new ArrayList();
  8702.         try
  8703.         {
  8704.             String sqlQuery = "SELECT inj.injuryid, inj.injurynumber, inj.contributorid, inj.socinsnumber, inj.injurydate,inj.injurydateentfmt, " +
  8705.                               "       inj.datecomplication,inj.datecomplicationentfmt ,inj.enteredby , inj.hospitalcode , est.establishmentid, est.registrationnumber, est.establishmentnamearb, " +
  8706.                               "       per.firstname, per.secondname, per.thirdname, per.surname " +
  8707.                               "  FROM " + SITables.T_INJURY + " inj " +
  8708.                               "       LEFT JOIN " + SITables.T_ESTABLISHMENT + " est  ON inj.establishmentid = est.establishmentid " +
  8709.                               "       LEFT JOIN " + SITables.T_CONTRIBUTOR + "   con  ON inj.contributorid = con.contributorid " +
  8710.                               "       LEFT JOIN " + SITables.T_PERSON + "        per  ON con.personid = per.personid " +
  8711.                               " WHERE inj.injuryid in (select distinct t.injuryid from "+ SITables.T_TREATMENT+" t where t.hospitalcode=? and  t.STARTDATE<=?  AND t.ENDDATE>=? and t.treatmentstatus=? )" +
  8712.                               "   AND inj.fieldofficecode = ? AND inj.injurystatus <>  ? order by inj.injuryid desc";
  8713.  
  8714.             con = GOSIUtilities.getConnection (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  8715.             String endMonth=OHUtilities.getMonthEndDate(invoiceHeaderBean.getStartDateStr());
  8716.             ps = con.prepareStatement (sqlQuery);
  8717.             ps.setLong      (1, hospitalCode);
  8718.             ps.setTimestamp (2, OHUtilities.getGregDate(endMonth,OHConstants.GREGORIAN));
  8719.             ps.setTimestamp (3, OHUtilities.getGregDate(invoiceHeaderBean.getStartDateStr(),OHConstants.GREGORIAN));
  8720.             ps.setShort     (4, OHConstants.TRMT_STS_APPROVED);
  8721.             ps.setShort     (5, invoiceHeaderBean.getFieldOffice());
  8722.             ps.setShort     (6, OHConstants.INJ_STS_CANCELLED);
  8723.  
  8724.             rs = ps.executeQuery ();
  8725.  
  8726.             while (rs.next())
  8727.             {
  8728.                 AddInjuryHelperBean injuryBean = new AddInjuryHelperBean ();
  8729.                
  8730.                 injuryBean.setInjuryId        (new Long(rs.getLong("INJURYID")));
  8731.                 injuryBean.setInjuryNumber    (new Long(rs.getLong("INJURYNUMBER")));
  8732.                 injuryBean.setContributorId   (new Long(rs.getLong("CONTRIBUTORID")));
  8733.                 injuryBean.setSocInsNumber    (new Long(rs.getLong("SOCINSNUMBER")));
  8734.                 injuryBean.setInjuryDate      (rs.getTimestamp("INJURYDATE"));
  8735.                 injuryBean.setInjuryDateEntFmt(rs.getString("INJURYDATEENTFMT"));
  8736.                 injuryBean.setInjuryDateStr(OHUtilities.getDateStr(injuryBean.getInjuryDate()
  8737.                         , injuryBean.getInjuryDateEntFmt()));
  8738.                 if (rs.getObject("DATECOMPLICATION") != null)
  8739.                 {
  8740.                     injuryBean.setDateComplication (rs.getTimestamp("DATECOMPLICATION"));
  8741.                     injuryBean.setDateComplicationEntFmt(rs.getString("DATECOMPLICATIONENTFMT"));
  8742.                     injuryBean.setDateComplicationStr(OHUtilities.getDateStr(injuryBean.getDateComplication()
  8743.                             , injuryBean.getDateComplicationEntFmt()));
  8744.                 }
  8745.                 if (rs.getObject("HOSPITALCODE") != null)
  8746.                 {
  8747.                     injuryBean.setHospitalCode(rs.getLong(("HOSPITALCODE")));
  8748.                 }
  8749.                 if (rs.getObject("ENTEREDBY") != null)
  8750.                 {
  8751.                     injuryBean.setEnteredBy (rs.getShort(("ENTEREDBY")));
  8752.                 }
  8753.                 injuryBean.setEstablishmentId   (new Long(rs.getLong("ESTABLISHMENTID")));
  8754.                 injuryBean.setRegNumber         (new Long(rs.getLong("REGISTRATIONNUMBER")));
  8755.                 injuryBean.setEstablishmentName (rs.getString("ESTABLISHMENTNAMEARB"));
  8756.                 injuryBean.setName              (OHUtilities.getFullName(rs.getString("FIRSTNAME"), rs.getString("SECONDNAME"),
  8757.                                                                          rs.getString("THIRDNAME"), rs.getString("SURNAME")));
  8758.  
  8759.  
  8760.                 injuryList.add (injuryBean);
  8761.             }
  8762.             return injuryList;
  8763.         }
  8764.         catch (GOSIException ge)
  8765.         {
  8766.             throw   ge;
  8767.         }
  8768.         catch (Exception e)
  8769.         {
  8770.             throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  8771.                                        GOSIConstants.SOCIAL_INSURANCE,
  8772.                                        this.getClass().toString(),
  8773.                                        "getInjuryListHaveApprovedTrmtForHos()",
  8774.                                        e,
  8775.                                        "CMN_ERR_1000");
  8776.         }
  8777.         finally
  8778.         {
  8779.             GOSIUtilities.cleanUp (con, ps, rs);
  8780.         }
  8781.        
  8782.     }
  8783.  
  8784.     /**
  8785.     * @METHOD NAME              :   getTreatmentServices
  8786.     * @INFORMATION              :   This method is to get Treatment Services
  8787.     * @PARAM                    :   class java.lang.Long
  8788.     * @RETURN                   :   class java.util.ArrayList
  8789.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  8790.     * @LAST MODIFIED BY         :
  8791.     * @LAST MODIFIED DATE       :
  8792.     **/
  8793.     public ArrayList getTreatmentServices (String idName ,Long Id) throws GOSIException
  8794.     {
  8795.         PreparedStatement ps = null;
  8796.         ResultSet         rs = null;
  8797.         PreparedStatement ps2 = null;
  8798.         ResultSet         rs2= null;
  8799.  
  8800.         ArrayList treatmentServices = new ArrayList ();
  8801.  
  8802.         try
  8803.         {
  8804.             String sqlQuery = "";
  8805.             if(idName.equalsIgnoreCase("injuryid"))
  8806.             {
  8807.                
  8808.                 sqlQuery = "SELECT trmtsvcsdet.trmtservicehdrid, trmtsvcsdet.trmtservicedetid, trmtsvcsdet.trmtdate,trmtsvcsdet.uom ,trmtsvcsdet.approveddiscpercentage, trmtsvcsdet.SFDACode , " +
  8809.                 "       trmtsvcsdet.icd10trmtdiagnosiscode, trmtsvcsdet.trmtdesc, trmtsvcsdet.units, trmtsvcsdet.reasonfordeduction , trmtsvcsdet.IOFlag, trmtsvcsdet.RejectedTrmtAmt ," +
  8810.                 "       trmtsvcsdet.approvedunits, trmtsvcsdet.unitprice, trmtsvcsdet.trmtamt, trmtsvcsdet.trmtsrvcstatus, trmtsvcsdet.isperioddeducted , trmtsvcsdet.createdby ," +
  8811.                 "       inj.injuryid, inj.socinsnumber, trmtsvcshdr.patientnumber, trmtsvcshdr.hospitalcode , "+
  8812.                 "        regHdr.INVOICENUMBER" +
  8813.                 "  FROM " + SITables.T_TRMTSERVICESHDR + " trmtsvcshdr " +
  8814.                 "     LEFT JOIN " + SITables.T_TRMTSERVICESDET + " trmtsvcsdet  ON trmtsvcshdr.trmtservicehdrid = trmtsvcsdet.trmtservicehdrid " +
  8815.                 "     LEFT JOIN " + SITables.T_INJURY + "          inj          ON trmtsvcshdr.injuryid = inj.injuryid " +
  8816.                 "     LEFT JOIN " + SITables.T_REGHOSPINVOICEDET + " regDet     ON TRMTSVCSHDR.INVOICEDETAILSID = REGDET.INVOICEDETAILSID "+
  8817.                 "     LEFT JOIN " + SITables.T_REGHOSPINVOICEHDR + " regHdr     ON REGDET.INVOICEHEADERID = regHdr.INVOICEHEADERID"+
  8818.                 " WHERE trmtsvcsdet.trmtservicedetid IS NOT NULL   AND inj.injuryid = ?";
  8819.             }
  8820.             else if(idName.equalsIgnoreCase("disbAssmtId"))
  8821.             {
  8822.                 sqlQuery = "SELECT trmtsvcsdet.trmtservicehdrid, trmtsvcsdet.trmtservicedetid, trmtsvcsdet.trmtdate,trmtsvcsdet.uom ,trmtsvcsdet.approveddiscpercentage, trmtsvcsdet.SFDACode , " +
  8823.                 "       trmtsvcsdet.icd10trmtdiagnosiscode, trmtsvcsdet.trmtdesc, trmtsvcsdet.units, trmtsvcsdet.reasonfordeduction , trmtsvcsdet.IOFlag, trmtsvcsdet.RejectedTrmtAmt ," +
  8824.                 "       trmtsvcsdet.approvedunits, trmtsvcsdet.unitprice, trmtsvcsdet.trmtamt, trmtsvcsdet.trmtsrvcstatus, trmtsvcsdet.isperioddeducted , trmtsvcsdet.createdby ," +
  8825.                 "       trmtsvcshdr.patientnumber, trmtsvcshdr.hospitalcode , "+
  8826.                 "         disassmt.SCHEDULEID, disassmt.SOCIALINSURANCENUMBER, regHdr.INVOICENUMBER" +
  8827.                 "  FROM " + SITables.T_TRMTSERVICESHDR + " trmtsvcshdr " +
  8828.                 "     LEFT JOIN " + SITables.T_TRMTSERVICESDET + " trmtsvcsdet  ON trmtsvcshdr.trmtservicehdrid = trmtsvcsdet.trmtservicehdrid " +
  8829.                 "     LEFT JOIN " + SITables.T_DISBASSMT + "          disassmt          ON trmtsvcshdr.DISASSMTID = disassmt.SCHEDULEID " +
  8830.                 "     LEFT JOIN " + SITables.T_REGHOSPINVOICEDET + " regDet     ON TRMTSVCSHDR.INVOICEDETAILSID = REGDET.INVOICEDETAILSID "+
  8831.                 "     LEFT JOIN " + SITables.T_REGHOSPINVOICEHDR + " regHdr     ON REGDET.INVOICEHEADERID = regHdr.INVOICEHEADERID"+
  8832.                 " WHERE trmtsvcsdet.trmtservicedetid IS NOT NULL   AND disassmt.SCHEDULEID = ? ";
  8833.             }
  8834.  
  8835.             con = GOSIUtilities.getConnection (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  8836.             sqlQuery=sqlQuery+" ORDER BY NVL(trmtsvcsdet.SFDACODE,trmtsvcsdet.ICD10TRMTDIAGNOSISCODE) , trmtsvcsdet.TRMTDATE  ASC";
  8837.             ps = con.prepareStatement (sqlQuery);
  8838.  
  8839.             ps.setLong (1, Id);
  8840.  
  8841.             rs = ps.executeQuery ();
  8842.            
  8843.             while (rs.next())
  8844.             {
  8845.                 TreatmentServiceBean serviceBean = new TreatmentServiceBean ();
  8846.  
  8847.                 serviceBean.setTrmtServiceHdrId (new Long(rs.getLong("TRMTSERVICEHDRID")));
  8848.                 serviceBean.setTrmtServiceDetId (new Long(rs.getLong("TRMTSERVICEDETID")));
  8849.                 serviceBean.setTrmtDateGreg     (rs.getTimestamp("TRMTDATE"));
  8850.                 serviceBean.setTrmtCode         (rs.getString("ICD10TRMTDIAGNOSISCODE"));
  8851.                 serviceBean.setTrmt             (rs.getString("TRMTDESC"));
  8852.                 serviceBean.setUnits            (new Float(rs.getFloat("UNITS")));
  8853.                 serviceBean.setApprovedUnits    (rs.getFloat("APPROVEDUNITS"));
  8854.                 serviceBean.setUnitPrice        (new Double(rs.getDouble("UNITPRICE")));
  8855.                 serviceBean.setTrmtAmt          (new Double(rs.getDouble("TRMTAMT")));
  8856.                 serviceBean.setTrmtSrvcStatus   (new Short(rs.getShort("TRMTSRVCSTATUS")));
  8857.                 if(idName.equalsIgnoreCase("injuryid")) {
  8858.                     serviceBean.setInjuryId         (new Long(rs.getLong("INJURYID")));
  8859.                     serviceBean.setSocInsNumber     (new Long(rs.getLong("SOCINSNUMBER")));
  8860.                 }
  8861.                 else if(idName.equalsIgnoreCase("disbAssmtId")) {
  8862.                     serviceBean.setDisbAssmtId     (new Long(rs.getLong("SCHEDULEID")));
  8863.                     serviceBean.setSocInsNumber     (new Long(rs.getLong("SOCIALINSURANCENUMBER")));
  8864.                 }
  8865.                 serviceBean.setInvoiceNumber     (new Long(rs.getLong("INVOICENUMBER")));
  8866.                 if (rs.getObject("PATIENTNUMBER") != null)
  8867.                 {
  8868.                     serviceBean.setPatientNumber (rs.getString("PATIENTNUMBER"));
  8869.                 }
  8870.  
  8871.                 if (rs.getObject("HOSPITALCODE") != null)
  8872.                 {
  8873.                     serviceBean.setHospitalCode (new Long(rs.getLong("HOSPITALCODE")));
  8874.                 }
  8875.                 if (rs.getObject("UOM") != null)
  8876.                 {
  8877.                     serviceBean.setUOM(rs.getString("UOM"));
  8878.                 }
  8879.                
  8880.                 if (rs.getObject("APPROVEDDISCPERCENTAGE") != null)
  8881.                 {
  8882.                     serviceBean.setApprovedDiscPercentage(rs.getDouble("APPROVEDDISCPERCENTAGE"));
  8883.                 }
  8884.                 if (rs.getObject("REASONFORDEDUCTION") != null)
  8885.                 {
  8886.                     serviceBean.setReasonForDeduction(rs.getString("REASONFORDEDUCTION"));
  8887.                 }
  8888.                 if (rs.getObject("IOFLAG") != null)
  8889.                 {
  8890.                     serviceBean.setIOFlag(rs.getString("IOFLAG").charAt(0));
  8891.                 }
  8892.                 if (rs.getObject("REJECTEDTRMTAMT") != null)
  8893.                 {
  8894.                     serviceBean.setRejectedTrmtAmt(rs.getDouble("REJECTEDTRMTAMT"));
  8895.                 }
  8896.                 if (rs.getObject("SFDACODE") != null)
  8897.                 {
  8898.                     String SFDACode=rs.getString("SFDACODE");
  8899.                     serviceBean.setSFDACode(SFDACode);
  8900.                    
  8901.                     if(!SFDACode.equals(""))
  8902.                     {
  8903.                        
  8904.                         sqlQuery="SELECT ID, REGISTRATIONNUM ,PUBLICPRICE , DRUGTYPE from T_SFDA where REGISTRATIONNUM=? ";
  8905.                         ps2 = con.prepareStatement (sqlQuery);
  8906.                         ps2.setString (1, SFDACode);
  8907.                         rs2 = ps2.executeQuery ();
  8908.                         if(rs2.next()) {
  8909.                             if(rs2.getObject("PUBLICPRICE")!=null)
  8910.                                 serviceBean.setSFDAMedicinePrice(rs2.getDouble("PUBLICPRICE"));
  8911.                            
  8912.                             if(rs2.getObject("DRUGTYPE")!=null)
  8913.                                 serviceBean.setDrugType(rs2.getString("DRUGTYPE").charAt(0));
  8914.  
  8915.                         }
  8916.                     }
  8917.                     GOSIUtilities.cleanUp (ps2, rs2);
  8918.                 }
  8919.                 if (rs.getObject("ISPERIODDEDUCTED") != null)
  8920.                 {
  8921.                     serviceBean.setIsPeriodDeducted(rs.getByte("ISPERIODDEDUCTED"));
  8922.                 }
  8923.                 if (rs.getObject("CREATEDBY") != null)
  8924.                 {
  8925.                     serviceBean.setCreatedBy(rs.getLong("CREATEDBY"));
  8926.                 }
  8927.  
  8928.                 treatmentServices.add (serviceBean);
  8929.             }
  8930.  
  8931.             return  treatmentServices;
  8932.         }
  8933.         catch (GOSIException ge)
  8934.         {
  8935.             throw   ge;
  8936.         }
  8937.         catch (Exception e)
  8938.         {
  8939.             throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  8940.                                        GOSIConstants.SOCIAL_INSURANCE,
  8941.                                        this.getClass().toString(),
  8942.                                        "getTreatmentServices()",
  8943.                                        e,
  8944.                                        "CMN_ERR_1000");
  8945.         }
  8946.         finally
  8947.         {
  8948.             GOSIUtilities.cleanUp (con, ps, rs);
  8949.         }
  8950.     }
  8951.    
  8952.  
  8953.     /**
  8954.     * @METHOD NAME              :   createTreatmentInvoice
  8955.     * @INFORMATION              :   This method is to  create Treatment Invoice
  8956.     * @PARAM                    :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceHeaderBean
  8957.     * @RETURN                   :   void
  8958.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  8959.     * @LAST MODIFIED BY         :
  8960.     * @LAST MODIFIED DATE       :
  8961.     **/
  8962.     public void createTreatmentInvoice (RegHospInvoiceHeaderBean treatmentInvoiceBean) throws GOSIException
  8963.     {
  8964.         PreparedStatement   ps = null;
  8965.         ResultSet           rs = null;
  8966.  
  8967.         try
  8968.         {
  8969.             if (treatmentInvoiceBean.getYear() > Calendar.getInstance().get(Calendar.YEAR))
  8970.             {
  8971.                 throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  8972.                                            GOSIConstants.SOCIAL_INSURANCE,
  8973.                                            this.getClass().toString(),
  8974.                                            "createTreatmentInvoice()",
  8975.                                            null,
  8976.                                            "SOI_ERR_5855");
  8977.             }
  8978.             else if (treatmentInvoiceBean.getYear() == Calendar.getInstance().get(Calendar.YEAR))
  8979.             {
  8980.                 if (treatmentInvoiceBean.getMonth() > Calendar.getInstance().get(Calendar.MONTH))
  8981.                 {
  8982.                     throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  8983.                                                GOSIConstants.SOCIAL_INSURANCE,
  8984.                                                this.getClass().toString(),
  8985.                                                "createTreatmentInvoice()",
  8986.                                                null,
  8987.                                                "SOI_ERR_5856");
  8988.                 }
  8989.             }
  8990.             else if (treatmentInvoiceBean.getYear() < Calendar.getInstance().get(Calendar.YEAR) - 1)
  8991.             {
  8992.                 throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  8993.                                            GOSIConstants.SOCIAL_INSURANCE,
  8994.                                            this.getClass().toString(),
  8995.                                            "createTreatmentInvoice()",
  8996.                                            null,
  8997.                                            "SOI_ERR_5857");
  8998.             }
  8999.  
  9000.             GregorianCalendar calendar = new GregorianCalendar (treatmentInvoiceBean.getYear(), treatmentInvoiceBean.getMonth(), 1);
  9001.  
  9002.             treatmentInvoiceBean.setStartDate       (new Timestamp(calendar.getTime().getTime()));
  9003.             treatmentInvoiceBean.setStartDateEntFmt (OHConstants.GREGORIAN);
  9004.             GOSIDebug.debugMessages("invoice start date :"+GOSIUtilities.getDateFullString(treatmentInvoiceBean.getStartDate()));
  9005.  
  9006.             calendar.set (Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
  9007.  
  9008.             treatmentInvoiceBean.setEndDate         (new Timestamp(calendar.getTime().getTime()));
  9009.             treatmentInvoiceBean.setEndDateEntFmt   (OHConstants.GREGORIAN);
  9010.  
  9011.             String sqlQuery = "SELECT COUNT (*) AS num_invoices " +
  9012.                               "  FROM " + SITables.T_REGHOSPINVOICEHDR +
  9013.                               " WHERE hospitalcode = ? " +
  9014.                               "   AND fieldoffice = ? " +
  9015.                               "   AND startdate = ? " +
  9016.                               "   AND invoicestatus <> ? ";
  9017.  
  9018.             con = GOSIUtilities.getConnection (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  9019.  
  9020.             ps = con.prepareStatement (sqlQuery);
  9021.  
  9022.             ps.setLong      (1, treatmentInvoiceBean.getHospitalCode());
  9023.             ps.setShort     (2, treatmentInvoiceBean.getFieldOffice());
  9024.             ps.setTimestamp (3, treatmentInvoiceBean.getStartDate());
  9025.             ps.setShort     (4, OHConstants.REG_HOSP_INVC_CANCELLED);
  9026.  
  9027.             rs = ps.executeQuery ();
  9028.  
  9029.             if (rs.next() && rs.getInt("NUM_INVOICES") > 0)
  9030.             {
  9031.                 throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  9032.                                            GOSIConstants.SOCIAL_INSURANCE,
  9033.                                            this.getClass().toString(),
  9034.                                            "createTreatmentInvoice()",
  9035.                                            null,
  9036.                                            "SOI_ERR_5858");
  9037.             }
  9038.  
  9039.             GOSIUtilities.cleanUp (ps, rs);
  9040.  
  9041.             sqlQuery = "SELECT effectivestartdate, effectiveenddate " +
  9042.                        "  FROM " + SITables.T_HOSPITALFOASSOCIATION +
  9043.                        " WHERE hospitalcode = ? " +
  9044.                        "   AND fieldofficecode = ? ";
  9045.  
  9046.             ps = con.prepareStatement (sqlQuery);
  9047.  
  9048.             ps.setLong  (1, treatmentInvoiceBean.getHospitalCode());
  9049.             ps.setShort (2, treatmentInvoiceBean.getFieldOffice());
  9050.  
  9051.             rs = ps.executeQuery ();
  9052.  
  9053.             if (! rs.next())
  9054.             {
  9055.                 throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  9056.                                            GOSIConstants.SOCIAL_INSURANCE,
  9057.                                            this.getClass().toString(),
  9058.                                            "createTreatmentInvoice()",
  9059.                                            null,
  9060.                                            "SOI_ERR_5859");
  9061.             }
  9062.             else
  9063.             {
  9064.                 boolean hasValidFOAssociation = false;
  9065.  
  9066.                 do
  9067.                 {
  9068.                     if (rs.getTimestamp("EFFECTIVESTARTDATE").before(treatmentInvoiceBean.getStartDate()) &&
  9069.                         (rs.getTimestamp("EFFECTIVEENDDATE") == null || rs.getTimestamp("EFFECTIVEENDDATE").after(treatmentInvoiceBean.getEndDate())))
  9070.                     {
  9071.                         hasValidFOAssociation = true;
  9072.                         break;
  9073.                     }
  9074.                 }
  9075.                 while (rs.next());
  9076.  
  9077.                 if (! hasValidFOAssociation)
  9078.                 {
  9079.                     throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  9080.                                                GOSIConstants.SOCIAL_INSURANCE,
  9081.                                                this.getClass().toString(),
  9082.                                                "createTreatmentInvoice()",
  9083.                                                null,
  9084.                                                "SOI_ERR_5860");
  9085.                 }
  9086.             }
  9087.  
  9088.             GOSIUtilities.cleanUp (ps, rs);
  9089.  
  9090.             sqlQuery = "SELECT contrstdate, contrenddate " +
  9091.                        "  FROM " + SITables.T_HOSPITALCONTRACT +
  9092.                        " WHERE hospitalcode = ? " +
  9093.                        "   AND agreestatus = ? ";
  9094.  
  9095.             ps = con.prepareStatement (sqlQuery);
  9096.  
  9097.             ps.setLong  (1, treatmentInvoiceBean.getHospitalCode());
  9098.             ps.setShort (2, OHConstants.AGREESTATUS_YES);
  9099.  
  9100.             rs = ps.executeQuery ();
  9101.  
  9102.             if (! rs.next())
  9103.             {
  9104.                 throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  9105.                                            GOSIConstants.SOCIAL_INSURANCE,
  9106.                                            this.getClass().toString(),
  9107.                                            "createTreatmentInvoice()",
  9108.                                            null,
  9109.                                            "SOI_ERR_5861");
  9110.             }
  9111.             else
  9112.             {
  9113.                 boolean hasContractCoverage = false;
  9114.  
  9115.                 do
  9116.                 {
  9117.                     Timestamp contractStDate =rs.getTimestamp("CONTRSTDATE");
  9118.                     Timestamp contractEndDate =rs.getTimestamp("CONTRENDDATE");
  9119.  
  9120.                     if ((treatmentInvoiceBean.getStartDate().equals(contractStDate) ||
  9121.                             treatmentInvoiceBean.getStartDate().after(contractStDate))
  9122.                             && (contractEndDate==null
  9123.                                     || treatmentInvoiceBean.getEndDate().equals(contractEndDate)
  9124.                                     || treatmentInvoiceBean.getEndDate().before(contractEndDate)))
  9125.                     {
  9126.                         hasContractCoverage = true;
  9127.                         break;
  9128.                     }
  9129.                 }
  9130.                 while (rs.next());
  9131.  
  9132.                 if (! hasContractCoverage)
  9133.                 {
  9134.                     throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  9135.                                                GOSIConstants.SOCIAL_INSURANCE,
  9136.                                                this.getClass().toString(),
  9137.                                                "createTreatmentInvoice()",
  9138.                                                null,
  9139.                                                "SOI_ERR_5862");
  9140.                 }
  9141.             }
  9142.  
  9143.             treatmentInvoiceBean.setInvoiceHeaderId     (GOSIUtilities.getPrimaryKey ("T_REGHOSPINVOICEHDR", treatmentInvoiceBean.getCreatedBy()));
  9144.             treatmentInvoiceBean.setInvoiceNumber       (GOSIUtilities.getPrimaryKey ("REGHOSINVOICENUMBER", treatmentInvoiceBean.getCreatedBy()));
  9145.             treatmentInvoiceBean.setCreationTimestamp   (new Timestamp(System.currentTimeMillis()));
  9146.             treatmentInvoiceBean.setInvoiceStatus       (OHConstants.REG_HOSP_INVC_PENDING_DATA_ENTRY);
  9147.             treatmentInvoiceBean.setInvoiceDate         (OHUtilities.getCurrentDateTimestamp());
  9148.             treatmentInvoiceBean.setInvoiceDateEntFmt   (OHConstants.GREGORIAN);
  9149.  
  9150.             RegHospitalInvoiceHeaderEntityHome treatmentInvoiceEntity = (RegHospitalInvoiceHeaderEntityHome)
  9151.                 ServiceLocator.getInstance ().getRemoteHome (OHConstants.REG_HOSP_INVOICE_HEADER_ENTITY_JNDI, RegHospitalInvoiceHeaderEntityHome.class);
  9152.  
  9153.             treatmentInvoiceEntity.create (treatmentInvoiceBean);
  9154.         }
  9155.         catch (GOSIException ge)
  9156.         {
  9157.             ctx.setRollbackOnly ();
  9158.  
  9159.             throw   ge;
  9160.         }
  9161.         catch (Exception e)
  9162.         {
  9163.             ctx.setRollbackOnly ();
  9164.  
  9165.             throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  9166.                                        GOSIConstants.SOCIAL_INSURANCE,
  9167.                                        this.getClass().toString(),
  9168.                                        "createTreatmentInvoice()",
  9169.                                        e,
  9170.                                        "CMN_ERR_1000");
  9171.         }
  9172.         finally
  9173.         {
  9174.             GOSIUtilities.cleanUp (con, ps, rs);
  9175.         }
  9176.     }
  9177.     /**
  9178.     * @METHOD NAME              :   deleteTreatmentInvoice
  9179.     * @INFORMATION              :   This method is to  delete Treatment Invoice
  9180.     * @PARAM                    :   class java.lang.Long,
  9181.                                     class java.lang.Long,
  9182.                                     class java.lang.Long
  9183.     * @RETURN                   :   void
  9184.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  9185.     * @LAST MODIFIED BY         :
  9186.     * @LAST MODIFIED DATE       :
  9187.     **/
  9188.     public void deleteTreatmentInvoice (Long invoiceHeaderId, Long hospitalCode, Long userId) throws GOSIException
  9189.     {
  9190.         PreparedStatement   ps = null;
  9191.         ResultSet           rs = null;
  9192.  
  9193.         try
  9194.         {
  9195.             String sqlQuery = "SELECT   a.hospitalcode, a.invoicestatus, " +
  9196.                               "         COUNT (DISTINCT b.invoicedetailsid) AS numberofapprovedservices, " +
  9197.                               "         COUNT (DISTINCT c.invoicedetailsid) AS numberofservicesinworkflow, " +
  9198.                               "         COUNT (DISTINCT d.invoicedetailsid) AS numberofenteredservices " +
  9199.                               "    FROM " + SITables.T_REGHOSPINVOICEHDR + " a " +
  9200.                               "         LEFT JOIN " + SITables.T_REGHOSPINVOICEDET + " b ON a.invoiceheaderid = b.invoiceheaderid AND b.status = ? " +
  9201.                               "         LEFT JOIN " + SITables.T_REGHOSPINVOICEDET + " c ON a.invoiceheaderid = c.invoiceheaderid AND c.status = ? " +
  9202.                               "         LEFT JOIN " + SITables.T_REGHOSPINVOICEDET + " d ON a.invoiceheaderid = d.invoiceheaderid AND d.status = ? " +
  9203.                               "   WHERE a.invoiceheaderid = ? " +
  9204.                               "GROUP BY a.hospitalcode, a.invoicestatus ";
  9205.  
  9206.             con = GOSIUtilities.getConnection (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  9207.  
  9208.             ps = con.prepareStatement (sqlQuery);
  9209.  
  9210.             ps.setShort (1, OHConstants.REG_HOSP_INVC_DETAILS_APPROVED);
  9211.             ps.setShort (2, OHConstants.REG_HOSP_INVC_DETAILS_IN_WORKFLOW);
  9212.             ps.setShort (3, OHConstants.REG_HOSP_INVC_DETAILS_ENTERED);
  9213.             ps.setLong  (4, invoiceHeaderId);
  9214.  
  9215.             rs = ps.executeQuery ();
  9216.  
  9217.             if (! rs.next() || rs.getShort("INVOICESTATUS") == OHConstants.REG_HOSP_INVC_CANCELLED)
  9218.             {
  9219.                 throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  9220.                                            GOSIConstants.SOCIAL_INSURANCE,
  9221.                                            this.getClass().toString(),
  9222.                                            "deleteTreatmentInvoice()",
  9223.                                            null,
  9224.                                            "SOI_ERR_5863");
  9225.             }
  9226.             else if (rs.getLong("HOSPITALCODE") != hospitalCode)
  9227.             {
  9228.                 throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  9229.                                            GOSIConstants.SOCIAL_INSURANCE,
  9230.                                            this.getClass().toString(),
  9231.                                            "deleteTreatmentInvoice()",
  9232.                                            null,
  9233.                                            "SOI_ERR_5864");
  9234.             }
  9235.             else if (rs.getShort("INVOICESTATUS") != OHConstants.REG_HOSP_INVC_PENDING_DATA_ENTRY)
  9236.             {
  9237.                 throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  9238.                                            GOSIConstants.SOCIAL_INSURANCE,
  9239.                                            this.getClass().toString(),
  9240.                                            "deleteTreatmentInvoice()",
  9241.                                            null,
  9242.                                            "SOI_ERR_5865");
  9243.             }
  9244.             else if (rs.getShort("NUMBEROFAPPROVEDSERVICES") > 0)
  9245.             {
  9246.                 throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  9247.                                            GOSIConstants.SOCIAL_INSURANCE,
  9248.                                            this.getClass().toString(),
  9249.                                            "deleteTreatmentInvoice()",
  9250.                                            null,
  9251.                                            "SOI_ERR_5866");
  9252.             }
  9253.             else if (rs.getShort("NUMBEROFSERVICESINWORKFLOW") > 0)
  9254.             {
  9255.                 throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  9256.                                            GOSIConstants.SOCIAL_INSURANCE,
  9257.                                            this.getClass().toString(),
  9258.                                            "deleteTreatmentInvoice()",
  9259.                                            null,
  9260.                                            "SOI_ERR_5867");
  9261.             }
  9262.             else if (rs.getShort("NUMBEROFENTEREDSERVICES") > 0)
  9263.             {
  9264.                 throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  9265.                                            GOSIConstants.SOCIAL_INSURANCE,
  9266.                                            this.getClass().toString(),
  9267.                                            "deleteTreatmentInvoice()",
  9268.                                            null,
  9269.                                            "SOI_ERR_5868");
  9270.             }
  9271.  
  9272.             RegHospitalInvoiceHeaderEntityHome treatmentInvoiceEntityHome = (RegHospitalInvoiceHeaderEntityHome)
  9273.                 ServiceLocator.getInstance ().getRemoteHome (OHConstants.REG_HOSP_INVOICE_HEADER_ENTITY_JNDI, RegHospitalInvoiceHeaderEntityHome.class);
  9274.  
  9275.             RegHospitalInvoiceHeaderEntity treatmentInvoiceEntity = treatmentInvoiceEntityHome.findByPrimaryKey (invoiceHeaderId);
  9276.  
  9277.             treatmentInvoiceEntity.cancelRegHospInvoiceHeader (userId);
  9278.         }
  9279.         catch (GOSIException ge)
  9280.         {
  9281.             ctx.setRollbackOnly ();
  9282.  
  9283.             throw   ge;
  9284.         }
  9285.         catch (Exception e)
  9286.         {
  9287.             ctx.setRollbackOnly ();
  9288.  
  9289.             throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  9290.                                        GOSIConstants.SOCIAL_INSURANCE,
  9291.                                        this.getClass().toString(),
  9292.                                        "deleteTreatmentInvoice()",
  9293.                                        e,
  9294.                                        "CMN_ERR_1000");
  9295.         }
  9296.         finally
  9297.         {
  9298.             GOSIUtilities.cleanUp (con, ps, rs);
  9299.         }
  9300.     }
  9301.    
  9302.     /**
  9303.     * @METHOD NAME              :   canIssueTreatmentInvoice
  9304.     * @INFORMATION              :   This method is to  delete Treatment Invoice
  9305.     * @PARAM                    :   class java.lang.Long,
  9306.                                     class java.lang.Long,
  9307.                                     class java.lang.Long
  9308.     * @RETURN                   :   void
  9309.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  9310.     * @LAST MODIFIED BY         :
  9311.     * @LAST MODIFIED DATE       :
  9312.     **/
  9313.     public ArrayList canIssueTreatmentInvoice (Long invoiceHeaderId, Long hospitalCode, UserBean userBean) throws GOSIException
  9314.     {
  9315.         PreparedStatement   ps = null;
  9316.         ResultSet           rs = null;
  9317.         ArrayList injuryList =new ArrayList();
  9318.  
  9319.  
  9320.         try
  9321.         {
  9322.             StringBuilder sqlQuery=new StringBuilder();
  9323.             sqlQuery.append("SELECT INVOICEHEADERID FROM T_REGHOSPINVOICEHDR H WHERE H.INVOICEHEADERID = ? AND H.HOSPITALCODE=? AND H.INVOICESTATUS=? AND H.BATCHPROCESSED IS NOT NULL ");
  9324.             con = GOSIUtilities.getConnection (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  9325.             int index=0;
  9326.             ps = con.prepareStatement (sqlQuery.toString());
  9327.             ps.setLong(++index,invoiceHeaderId.longValue());
  9328.             ps.setLong(++index,hospitalCode.longValue());
  9329.             ps.setShort(++index,OHConstants.REG_HOSP_INVC_PENDING_DATA_ENTRY);
  9330.             rs=ps.executeQuery ();
  9331.            
  9332.             if (!rs.next())
  9333.             {
  9334.                 throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  9335.                                            GOSIConstants.SOCIAL_INSURANCE,
  9336.                                            this.getClass().toString(),
  9337.                                            "issueTreatmentInvoice()",
  9338.                                            null,
  9339.                                            "CMN_ERR_1000");
  9340.             }
  9341.            
  9342.  
  9343.  
  9344.             // check if all approved injurys must have enter sickleave details
  9345.             GOSIUtilities.cleanUp(ps,rs);
  9346.             sqlQuery=new StringBuilder();
  9347.             sqlQuery.append("SELECT J.SOCINSNUMBER,J.INJURYID,J.INJURYDATE , ");
  9348.             sqlQuery.append("J.INJURYDATEENTFMT,J.DATECOMPLICATION,J.DATECOMPLICATIONENTFMT, ");
  9349.             sqlQuery.append("J.INJURYSTATUS,J.TRMTCLOSUREINJURYSTATUS , H.STARTDATE, H.INVOICENUMBER,S.STATUS ");
  9350.             sqlQuery.append("FROM t_REGHOSPINVOICEHDR H LEFT JOIN T_REGHOSPINVOICEDET D ON D.INVOICEHEADERID = H.INVOICEHEADERID ");
  9351.             sqlQuery.append("LEFT JOIN T_INJURY J ON J.INJURYID = D.INJURYID LEFT JOIN T_OHSICKLEAVE S ");
  9352.             sqlQuery.append("ON S.INJURYID = J.INJURYID  AND S.MONTH =TO_CHAR(H.STARTDATE,'MM') ");
  9353.             sqlQuery.append("AND S.YEAR =TO_CHAR(H.STARTDATE,'YYYY')");
  9354.             sqlQuery.append("WHERE H.INVOICEHEADERID = ? AND H.HOSPITALCODE= ? ");
  9355.             sqlQuery.append("AND J.INJURYSTATUS IN (?,?,?) ");
  9356.             sqlQuery.append("AND ( S.STATUS IS NULL OR S.STATUS <> ? OR J.TRMTCLOSUREINJURYSTATUS IS NULL ) ");
  9357.  
  9358.             ps = con.prepareStatement (sqlQuery.toString());
  9359.  
  9360.             index=0;   
  9361.             ps.setLong(++index,invoiceHeaderId.longValue());
  9362.             ps.setLong(++index,hospitalCode.longValue());
  9363.             ps.setShort(++index,OHConstants.INJ_STS_APPROVED);
  9364.             ps.setShort(++index,OHConstants.INJ_STS_NOTIFIED);
  9365.             ps.setShort(++index,OHConstants.INJ_STS_FIRST_NOTIFIED);
  9366.             ps.setShort(++index,OHConstants.EXTN_SICKLEAVE_STS_APPROVED);
  9367.  
  9368.  
  9369.             rs = ps.executeQuery ();
  9370.  
  9371.             while (rs.next())
  9372.             {
  9373.                
  9374.                 SickleaveBean sickleaveBean = new SickleaveBean();
  9375.                
  9376.                 sickleaveBean.setSocInsNumber(rs.getLong("SOCINSNUMBER"));
  9377.                 sickleaveBean.setInjuryId(rs.getLong("INJURYID"));
  9378.                 sickleaveBean.setInjuryDate(rs.getTimestamp("INJURYDATE"));
  9379.                 if(rs.getObject("DATECOMPLICATION")!=null)
  9380.                 {
  9381.                     sickleaveBean.setComplicationDate(rs.getTimestamp("DATECOMPLICATION"));
  9382.                 }
  9383.                 if(rs.getObject("TRMTCLOSUREINJURYSTATUS")!=null)
  9384.                     sickleaveBean.setClosureInjuryStatus(rs.getShort("TRMTCLOSUREINJURYSTATUS"));
  9385.                
  9386.                 if(rs.getObject("STATUS")!=null)
  9387.                     sickleaveBean.setStatus(rs.getShort("STATUS"));
  9388.                
  9389.                 if(sickleaveBean.getStatus()==null || !sickleaveBean.getStatus().equals(OHConstants.EXTN_SICKLEAVE_STS_APPROVED))
  9390.                 injuryList.add(sickleaveBean);
  9391.             }
  9392.            
  9393.         }
  9394.         catch (GOSIException ge)
  9395.         {
  9396.             ctx.setRollbackOnly ();
  9397.  
  9398.             throw   ge;
  9399.         }
  9400.         catch (Exception e)
  9401.         {
  9402.             ctx.setRollbackOnly ();
  9403.  
  9404.             throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  9405.                                        GOSIConstants.SOCIAL_INSURANCE,
  9406.                                        this.getClass().toString(),
  9407.                                        "canIssueTreatmentInvoice()",
  9408.                                        e,
  9409.                                        "CMN_ERR_1000");
  9410.         }
  9411.         finally
  9412.         {
  9413.             GOSIUtilities.cleanUp (con, ps, rs);
  9414.             return injuryList;
  9415.         }
  9416.     }
  9417.     /**
  9418.     * @METHOD NAME              :   issueTreatmentInvoice
  9419.     * @INFORMATION              :   This method is to  delete Treatment Invoice
  9420.     * @PARAM                    :   class java.lang.Long,
  9421.                                     class java.lang.Long,
  9422.                                     class java.lang.Long
  9423.     * @RETURN                   :   void
  9424.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  9425.     * @LAST MODIFIED BY         :
  9426.     * @LAST MODIFIED DATE       :
  9427.     **/
  9428.     public void issueTreatmentInvoice (Long invoiceHeaderId, Long hospitalCode, UserBean userBean) throws GOSIException
  9429.     {
  9430.         PreparedStatement   ps = null;
  9431.         ResultSet           rs = null;
  9432.  
  9433.         try
  9434.         {
  9435.             StringBuilder sqlQuery=new StringBuilder();
  9436.             sqlQuery.append("SELECT INVOICEHEADERID FROM T_REGHOSPINVOICEHDR H WHERE H.INVOICEHEADERID = ? AND H.HOSPITALCODE=? AND H.INVOICESTATUS=? AND H.BATCHPROCESSED IS NOT NULL ");
  9437.             con = GOSIUtilities.getConnection (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  9438.             int index=0;
  9439.             ps = con.prepareStatement (sqlQuery.toString());
  9440.             ps.setLong(++index,invoiceHeaderId.longValue());
  9441.             ps.setLong(++index,hospitalCode.longValue());
  9442.             ps.setShort(++index,OHConstants.REG_HOSP_INVC_PENDING_DATA_ENTRY);
  9443.             rs=ps.executeQuery ();
  9444.             if (!rs.next())
  9445.             {
  9446.                 throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  9447.                                            GOSIConstants.SOCIAL_INSURANCE,
  9448.                                            this.getClass().toString(),
  9449.                                            "issueTreatmentInvoice()",
  9450.                                            null,
  9451.                                            "CMN_ERR_1000");
  9452.             }
  9453.            
  9454.  
  9455.  
  9456.             // check if all approved injurys must have enter sickleave details
  9457.             GOSIUtilities.cleanUp(ps,rs);
  9458.             sqlQuery=new StringBuilder();
  9459.             sqlQuery.append("SELECT J.SOCINSNUMBER,J.INJURYID,J.INJURYDATE , ");
  9460.             sqlQuery.append("J.INJURYDATEENTFMT,J.DATECOMPLICATION,J.DATECOMPLICATIONENTFMT, ");
  9461.             sqlQuery.append("J.INJURYSTATUS,J.TRMTCLOSUREINJURYSTATUS , H.STARTDATE, H.INVOICENUMBER,S.STATUS ");
  9462.             sqlQuery.append("FROM t_REGHOSPINVOICEHDR H LEFT JOIN T_REGHOSPINVOICEDET D ON D.INVOICEHEADERID = H.INVOICEHEADERID ");
  9463.             sqlQuery.append("LEFT JOIN T_INJURY J ON J.INJURYID = D.INJURYID LEFT JOIN T_OHSICKLEAVE S ");
  9464.             sqlQuery.append("ON S.INJURYID = J.INJURYID  AND S.MONTH =TO_CHAR(H.STARTDATE,'MM') ");
  9465.             sqlQuery.append("AND S.YEAR =TO_CHAR(H.STARTDATE,'YYYY') ");
  9466.             sqlQuery.append("WHERE H.INVOICEHEADERID = ? AND H.HOSPITALCODE= ? ");
  9467.             sqlQuery.append("AND J.INJURYSTATUS IN (?,?,?) ");
  9468.             sqlQuery.append("AND ( S.STATUS IS NULL OR S.STATUS <> ? OR J.TRMTCLOSUREINJURYSTATUS IS NULL ) ");
  9469.  
  9470.             ps = con.prepareStatement (sqlQuery.toString());
  9471.  
  9472.             index=0;   
  9473.             ps.setLong(++index,invoiceHeaderId.longValue());
  9474.             ps.setLong(++index,hospitalCode.longValue());
  9475.             ps.setShort(++index,OHConstants.INJ_STS_APPROVED);
  9476.             ps.setShort(++index,OHConstants.INJ_STS_NOTIFIED);
  9477.             ps.setShort(++index,OHConstants.INJ_STS_FIRST_NOTIFIED);
  9478.             ps.setShort(++index,OHConstants.EXTN_SICKLEAVE_STS_APPROVED);
  9479.  
  9480.  
  9481.             rs = ps.executeQuery ();
  9482.  
  9483.             if (rs.next())
  9484.             {
  9485.                 throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  9486.                                            GOSIConstants.SOCIAL_INSURANCE,
  9487.                                            this.getClass().toString(),
  9488.                                            "issueTreatmentInvoice()",
  9489.                                            null,
  9490.                                            "SOI_ERR_5970");
  9491.             }
  9492.            
  9493.             Boolean hasPendingServices =hasPendingTreatmentServices(invoiceHeaderId, new Long (0));
  9494.             RegHospitalInvoiceHeaderEntityHome treatmentInvoiceEntityHome = (RegHospitalInvoiceHeaderEntityHome)
  9495.                 ServiceLocator.getInstance ().getRemoteHome (OHConstants.REG_HOSP_INVOICE_HEADER_ENTITY_JNDI, RegHospitalInvoiceHeaderEntityHome.class);
  9496.  
  9497.             RegHospitalInvoiceHeaderEntity treatmentInvoiceEntity = treatmentInvoiceEntityHome.findByPrimaryKey (invoiceHeaderId);
  9498.             if(hasPendingServices)
  9499.                 treatmentInvoiceEntity.markRegHospInvoiceHeaderAsEntered (userBean.getUserCode());
  9500.             else
  9501.                 recalculateTreatmentInvoiceHeaderCreatedByBatch(invoiceHeaderId,userBean);
  9502.         }
  9503.         catch (GOSIException ge)
  9504.         {
  9505.             ctx.setRollbackOnly ();
  9506.  
  9507.             throw   ge;
  9508.         }
  9509.         catch (Exception e)
  9510.         {
  9511.             ctx.setRollbackOnly ();
  9512.  
  9513.             throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  9514.                                        GOSIConstants.SOCIAL_INSURANCE,
  9515.                                        this.getClass().toString(),
  9516.                                        "issueTreatmentInvoice()",
  9517.                                        e,
  9518.                                        "CMN_ERR_1000");
  9519.         }
  9520.         finally
  9521.         {
  9522.             GOSIUtilities.cleanUp (con, ps, rs);
  9523.         }
  9524.     }
  9525.    
  9526.     /**
  9527.     * @METHOD NAME              :   getSFDAList
  9528.     * @INFORMATION              :   This method is to get SFDA Medicine List
  9529.     *                               List of hospital in Arraylist
  9530.     * @PARAM                    :   None                               
  9531.                                    
  9532.     * @RETURN                   :   class java.util.ArrayList
  9533.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  9534.     * @LAST MODIFIED BY         :  
  9535.     * @LAST MODIFIED DATE       :  
  9536.     **/
  9537.     public ArrayList getSFDAList()throws GOSIException
  9538.     {
  9539.  
  9540.         ArrayList SFDAList = new ArrayList();
  9541.         SFDABean medicineBean = null;
  9542.         con = null;
  9543.         PreparedStatement ps = null;
  9544.         ResultSet rs = null;
  9545.         String sqlQuery = null;
  9546.  
  9547.         sqlQuery = "SELECT ID, REGISTRATIONNUM, GENERICNAME , TRADENAME, STRENGTHVALUE, " +
  9548.                 "UNITOFSTRENGTH, DOSAGEFORM , ROUTEOFADMINISTRATION, ATCCODE1, ATCCODE2, VOLUME, " +
  9549.                 "UNITOFVOLUME, PACKAGETYPE , PACKAGESIZE , LEGALSTATUS, PRODUCTCONTROL, PUBLICPRICE" +
  9550.                 " , SHELFLIFE , STORAGECONDITIONS , MANUFACTURERNAME, COUNTRYOFMANUFACTURER " +
  9551.                 ", MARKETINGCOMPANY,NATIONALITY , AGENTNAME , AUTHORIZATIONSTATUS , MARKETINGSTATUS" +
  9552.                 " , REMARKS FROM T_SFDA";
  9553.         try
  9554.         {
  9555.               con = GOSIUtilities.getConnection(GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  9556.               // Load from the data base
  9557.               ps = con.prepareStatement(sqlQuery);
  9558.               rs = ps.executeQuery();
  9559.                
  9560.               while(rs.next())
  9561.               {
  9562.                  
  9563.                   medicineBean = new SFDABean();
  9564.                   medicineBean.setId(rs.getLong("ID"));
  9565.                   medicineBean.setRegistrationNumber(rs.getString("REGISTRATIONNUM"));
  9566.                   medicineBean.setGenericName(rs.getString("GENERICNAME"));
  9567.                   medicineBean.setTradeName(rs.getString("TRADENAME"));
  9568.                   medicineBean.setStrengthValue(rs.getString("STRENGTHVALUE"));
  9569.                   medicineBean.setUnitOfStrength(rs.getString("UNITOFSTRENGTH"));
  9570.                   medicineBean.setDosageForm(rs.getString("DOSAGEFORM"));
  9571.                   medicineBean.setRouteOfAdministration(rs.getString("ROUTEOFADMINISTRATION"));
  9572.                   medicineBean.setAtcCode1(rs.getString("ATCCODE1"));
  9573.                   medicineBean.setAtcCode2(rs.getString("ATCCODE2"));
  9574.                   medicineBean.setVolume(rs.getString("VOLUME"));
  9575.                   medicineBean.setUnitOfVolume(rs.getString("UNITOFVOLUME"));
  9576.                   medicineBean.setPackageType(rs.getString("PACKAGETYPE"));
  9577.                   medicineBean.setPackageSize(rs.getInt("PACKAGESIZE"));
  9578.                   medicineBean.setLegalStatus(rs.getString("LEGALSTATUS"));
  9579.                   medicineBean.setProductControl(rs.getString("PRODUCTCONTROL"));
  9580.                   medicineBean.setPublicPrice(rs.getDouble("PUBLICPRICE"));
  9581.                   medicineBean.setShelfLife(rs.getInt("SHELFLIFE"));
  9582.                   medicineBean.setStorageConditions(rs.getString("STORAGECONDITIONS"));
  9583.                   medicineBean.setManufacturername(rs.getString("MANUFACTURERNAME"));
  9584.                   medicineBean.setCountryOfManufacturer(rs.getString("COUNTRYOFMANUFACTURER"));
  9585.                   medicineBean.setMarketingCompany(rs.getString("MARKETINGCOMPANY"));
  9586.                   medicineBean.setNationality(rs.getString("NATIONALITY"));
  9587.                   medicineBean.setAgentName(rs.getString("AGENTNAME"));
  9588.                   medicineBean.setAuthorizationStatus(rs.getString("AUTHORIZATIONSTATUS"));
  9589.                   medicineBean.setMarketingStatus(rs.getString("MARKETINGSTATUS"));
  9590.                   medicineBean.setRemarks(rs.getString("REMARKS"));
  9591.                   SFDAList.add(medicineBean);
  9592.               }
  9593.         }
  9594.         catch(GOSIException ge)
  9595.         {
  9596.             GOSIDebug.debugMessages("The error in getTrtmServicesList is:"+ge);
  9597.             ctx.setRollbackOnly();
  9598.             throw ge;
  9599.         }
  9600.         catch(Exception se)
  9601.         {
  9602.             GOSIDebug.debugMessages("The error in getTrtmServicesList is:"+se);
  9603.             ctx.setRollbackOnly();
  9604.             se.printStackTrace();
  9605.            
  9606.             throw new GOSIException(GOSIConstants.SEVERITY_ONE,
  9607.                     GOSIConstants.SOCIAL_INSURANCE,
  9608.                     this.getClass().toString(),
  9609.                     "getTrtmServicesList()",
  9610.                     se,"CMN_ERR_1000" );
  9611.         }
  9612.                    
  9613.         finally
  9614.         {
  9615.             GOSIUtilities.cleanUp(con, ps, rs);
  9616.             return SFDAList;
  9617.            
  9618.         }
  9619.     }
  9620.     /**
  9621.     * @METHOD NAME              :   isRegisteredHospital
  9622.     * @INFORMATION              :   This method is to  delete Treatment Invoice
  9623.     * @PARAM                    :   class java.lang.Long,
  9624.                                     class java.lang.Long,
  9625.                                     class java.lang.Long
  9626.     * @RETURN                   :   void
  9627.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  9628.     * @LAST MODIFIED BY         :
  9629.     * @LAST MODIFIED DATE       :
  9630.     **/
  9631.    
  9632.     private boolean isRegisteredHospital(Long hospitalCode)
  9633.     throws GOSIException   
  9634.     {
  9635.         boolean isRegistered = false;
  9636.         PreparedStatement ps = null;
  9637.         ResultSet rs = null;
  9638.         String sqlQuery = null;    
  9639.         sqlQuery = " SELECT HOSPITALTYPE ";
  9640.         sqlQuery += " FROM " + SITables.T_HOSPITAL;
  9641.         sqlQuery += " WHERE HOSPITALCODE = ? " ;
  9642.         try
  9643.         {
  9644.             GOSIDebug.debugMessages("SQLQuery:" + sqlQuery + ":");
  9645.             GOSIDebug.debugMessages("\t\t Param 1 :" + hospitalCode.longValue() + ":");
  9646.             ps = con.prepareStatement(sqlQuery);           
  9647.                 ps.setLong(1,hospitalCode.longValue());                                    
  9648.             rs = ps.executeQuery();
  9649.             if(rs.next())
  9650.             {
  9651.                 if(OHConstants.REG_HOSPITAL.equals(new Short(rs.getShort("HOSPITALTYPE"))))
  9652.                 {
  9653.                     isRegistered = true;
  9654.                 }
  9655.             }
  9656.             GOSIDebug.debugMessages("isRegisteredHospital:" + isRegistered + ":");
  9657.             return isRegistered;
  9658.         }
  9659.         catch (Exception e)
  9660.         {
  9661.             throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  9662.             GOSIConstants.SOCIAL_INSURANCE,
  9663.             this.getClass().toString(),
  9664.             "isRegisteredHospital()",e,"CMN_ERR_1000");        
  9665.         }
  9666.         finally
  9667.         {
  9668.             GOSIUtilities.cleanUp(ps,rs);
  9669.         }
  9670.  
  9671.     }
  9672.     /**
  9673.     * @METHOD NAME              :   isTotalAmountOfInvoiceHeaderCorrect
  9674.     * @INFORMATION              :   This method is to  check the total amount of inovices header
  9675.     * @PARAM                    :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceHeaderBean
  9676.     * @RETURN                   :   boolean
  9677.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  9678.     * @LAST MODIFIED BY         :
  9679.     * @LAST MODIFIED DATE       :
  9680.     **/
  9681.    
  9682.     private boolean isTotalAmountOfInvoiceHeaderCorrect(RegHospInvoiceHeaderBean headerBean)
  9683.     throws GOSIException   
  9684.     {
  9685.         /*
  9686.          *  This method does not work when the discount percentage for the hospital has been changed
  9687.          *  after the invoice has been entered or approved because the old hospital contract is no
  9688.          *  longer linked (agreestatus indicator modified) and this results in invalid calculations.
  9689.          *
  9690.          *  This cannot be fixed currently because there is no reliable way to extract data from the
  9691.          *  previous contract. The starting and ending dates recorded in T_HOSPITALCONTRACT are missing
  9692.          *  or incorrect.
  9693.          *
  9694.          *  TODO: Rewrite last portion of the query to account for hospital contract changes while
  9695.          *        invoice is in workflow, assuming data in T_HOSPITALCONTRACT has been restructured
  9696.          *        or add a new exception for the affected invoice in the caller method to selectively
  9697.          *        disable validation.
  9698.          *
  9699.          *  January 12, 2014.
  9700.          */
  9701.         boolean isCorrect = false;
  9702.         PreparedStatement ps = null;
  9703.         ResultSet rs = null;
  9704.         StringBuilder sqlQuery = new StringBuilder();
  9705.         Double correctTotalAmount=null;
  9706.         Double correctDiscountAmount =null;
  9707.         Double invTotalAmount=null;
  9708.         Double invDiscountAmount =null;
  9709.         Double diffTotalAmount=null;
  9710.         Double diffDiscountAmount =null;
  9711.         sqlQuery.append("SELECT total.INVOICEHEADERID AS INVOICEHEADERID,");
  9712.         sqlQuery.append(" total.TOTALAMOUNT AS TOTALAMOUNT,");
  9713.         sqlQuery.append(" (  (total.totalServices * disc.discountServices)");
  9714.         sqlQuery.append("  + (total.totalMedicion * disc.discountmedicions))");
  9715.         sqlQuery.append("  AS DISCOUNTAMOUNT");
  9716.         sqlQuery.append("  FROM (  ");
  9717.         sqlQuery.append("  SELECT D.INVOICEHEADERID AS INVOICEHEADERID,");
  9718.         sqlQuery.append("   (  (  SUM (NVL (d.SERVICESAMOUNT, 0))");
  9719.         sqlQuery.append("     - SUM (NVL (D.REJECTEDSERVICESAMOUNT, 0)))");
  9720.         sqlQuery.append("  + (  SUM (NVL (D.MEDICINESAMOUNT, 0))");
  9721.         sqlQuery.append("     - SUM (NVL (D.REJECTEDMEDICINESAMOUNT, 0)))");
  9722.         sqlQuery.append("     + (  SUM (NVL (D.NONDISCOUNTAMOUNT, 0))");
  9723.         sqlQuery.append("    - SUM (NVL (D.REJECTEDNONDISCOUNTAMOUNT, 0))))");
  9724.         sqlQuery.append("    AS TOTALAMOUNT,");
  9725.         sqlQuery.append("   ( (  SUM (NVL (d.SERVICESAMOUNT, 0))");
  9726.         sqlQuery.append("    - SUM (NVL (D.REJECTEDSERVICESAMOUNT, 0))))");
  9727.         sqlQuery.append("    AS totalServices,");
  9728.         sqlQuery.append("   ( (  SUM (NVL (D.MEDICINESAMOUNT, 0))");
  9729.         sqlQuery.append("    - SUM (NVL (D.REJECTEDMEDICINESAMOUNT, 0))))");
  9730.         sqlQuery.append("    AS totalMedicion");
  9731.         sqlQuery.append("    FROM (SELECT DET.INVOICEHEADERID, result.*");
  9732.         sqlQuery.append("    FROM    T_REGHOSPINVOICEDET det");
  9733.         sqlQuery.append("   LEFT JOIN");
  9734.         sqlQuery.append("    (SELECT NVL(NVL (serv.INVOICEDETAILSID,");
  9735.         sqlQuery.append("   med.INVOICEDETAILSID),servNonDis.INVOICEDETAILSID)");
  9736.         sqlQuery.append(" AS INVOICEDETAILSID,");
  9737.         sqlQuery.append("    NVL (serv.SERVICESAMOUNT, 0)");
  9738.         sqlQuery.append(" AS SERVICESAMOUNT,");
  9739.         sqlQuery.append("    NVL (serv.REJECTEDSERVICESAMOUNT, 0)");
  9740.         sqlQuery.append(" AS REJECTEDSERVICESAMOUNT,");
  9741.         sqlQuery.append("    NVL (servNonDis.SERVICESAMOUNT, 0)");
  9742.         sqlQuery.append(" AS NONDISCOUNTAMOUNT,");
  9743.         sqlQuery.append("    NVL (servNonDis.REJECTEDSERVICESAMOUNT, 0)");
  9744.         sqlQuery.append(" AS REJECTEDNONDISCOUNTAMOUNT,");
  9745.         sqlQuery.append("     NVL (med.MEDICINESAMOUNT, 0)");
  9746.         sqlQuery.append(" AS MEDICINESAMOUNT,");
  9747.         sqlQuery.append("    NVL (med.REJECTEDMEDICINESAMOUNT, 0)");
  9748.         sqlQuery.append(" AS REJECTEDMEDICINESAMOUNT");
  9749.         sqlQuery.append(" FROM    (  SELECT TH.INVOICEDETAILSID,");
  9750.         sqlQuery.append("   SUM (TD.TRMTAMT)");
  9751.         sqlQuery.append("      AS SERVICESAMOUNT,");
  9752.         sqlQuery.append("   SUM (TD.REJECTEDTRMTAMT)");
  9753.         sqlQuery.append("      AS REJECTEDSERVICESAMOUNT");
  9754.         sqlQuery.append("      FROM T_REGHOSPINVOICEDET hd");
  9755.         sqlQuery.append("   LEFT JOIN T_TRMTSERVICESHDR th");
  9756.         sqlQuery.append("      ON TH.INVOICEDETAILSID =");
  9757.         sqlQuery.append("    HD.INVOICEDETAILSID");
  9758.         sqlQuery.append("   LEFT JOIN T_TRMTSERVICESDET td");
  9759.         sqlQuery.append("      ON TD.TRMTSERVICEHDRID =");
  9760.         sqlQuery.append("    TH.TRMTSERVICEHDRID");
  9761.         sqlQuery.append("    WHERE     TD.ICD10TRMTDIAGNOSISCODE <> ?");
  9762.         sqlQuery.append(" AND TD.ISNONDISCOUNT= ?");
  9763.         sqlQuery.append("   AND TD.TRMTSRVCSTATUS NOT IN (?, ?)");
  9764.         sqlQuery.append("  GROUP BY TH.INVOICEDETAILSID) serv");
  9765.         sqlQuery.append("     FULL JOIN");
  9766.         sqlQuery.append("    (  SELECT TH.INVOICEDETAILSID,");
  9767.         sqlQuery.append("   SUM (TD.TRMTAMT)");
  9768.         sqlQuery.append("      AS SERVICESAMOUNT,");
  9769.         sqlQuery.append("   SUM (TD.REJECTEDTRMTAMT)");
  9770.         sqlQuery.append("      AS REJECTEDSERVICESAMOUNT");
  9771.         sqlQuery.append("      FROM T_REGHOSPINVOICEDET hd");
  9772.         sqlQuery.append("   LEFT JOIN T_TRMTSERVICESHDR th");
  9773.         sqlQuery.append("      ON TH.INVOICEDETAILSID =");
  9774.         sqlQuery.append("    HD.INVOICEDETAILSID");
  9775.         sqlQuery.append("   LEFT JOIN T_TRMTSERVICESDET td");
  9776.         sqlQuery.append("      ON TD.TRMTSERVICEHDRID =");
  9777.         sqlQuery.append("    TH.TRMTSERVICEHDRID");
  9778.         sqlQuery.append("     WHERE     TD.ICD10TRMTDIAGNOSISCODE <> ?");
  9779.         sqlQuery.append("  AND TD.ISNONDISCOUNT= ?");
  9780.         sqlQuery.append("   AND TD.TRMTSRVCSTATUS NOT IN (?, ?)");
  9781.         sqlQuery.append("  GROUP BY TH.INVOICEDETAILSID) servNonDis");
  9782.         sqlQuery.append("  ON serv.INVOICEDETAILSID =");
  9783.         sqlQuery.append("    servNonDis.INVOICEDETAILSID");
  9784.         sqlQuery.append("    FULL JOIN");
  9785.         sqlQuery.append(" (  SELECT TH.INVOICEDETAILSID,");
  9786.         sqlQuery.append("   SUM (TD.TRMTAMT)");
  9787.         sqlQuery.append("      AS MEDICINESAMOUNT,");
  9788.         sqlQuery.append("   SUM (TD.REJECTEDTRMTAMT)");
  9789.         sqlQuery.append("      AS REJECTEDMEDICINESAMOUNT");
  9790.         sqlQuery.append("      FROM T_REGHOSPINVOICEDET hd");
  9791.         sqlQuery.append("   LEFT JOIN T_TRMTSERVICESHDR th");
  9792.         sqlQuery.append("      ON TH.INVOICEDETAILSID =");
  9793.         sqlQuery.append("    HD.INVOICEDETAILSID");
  9794.         sqlQuery.append("   LEFT JOIN T_TRMTSERVICESDET td");
  9795.         sqlQuery.append("      ON TD.TRMTSERVICEHDRID =");
  9796.         sqlQuery.append("    TH.TRMTSERVICEHDRID");
  9797.         sqlQuery.append("     WHERE     TD.ICD10TRMTDIAGNOSISCODE = ?");
  9798.         sqlQuery.append("   AND TD.TRMTSRVCSTATUS NOT IN (?, ?)");
  9799.         sqlQuery.append("  GROUP BY TH.INVOICEDETAILSID) med");
  9800.         sqlQuery.append("    ON serv.INVOICEDETAILSID =");
  9801.         sqlQuery.append("    med.INVOICEDETAILSID) result");
  9802.         sqlQuery.append("   ON DET.INVOICEDETAILSID = result.INVOICEDETAILSID");
  9803.         sqlQuery.append("   WHERE det.INVOICEHEADERID = ? ) d");
  9804.         sqlQuery.append("  GROUP BY d.INVOICEHEADERID) total,");
  9805.         sqlQuery.append(" (SELECT H.HOSPITALCODE,");
  9806.         sqlQuery.append(" NVL (discList.DISCOUNTSERVICES, 0) AS DISCOUNTSERVICES,");
  9807.         sqlQuery.append(" NVL (discList.DISCOUNTMEDICIONS, 0) AS DISCOUNTMEDICIONS");
  9808.         sqlQuery.append("  FROM    T_HOSPITAL h");
  9809.         sqlQuery.append(" FULL JOIN");
  9810.         sqlQuery.append("  (SELECT ser.HOSPITALCODE,");
  9811.         sqlQuery.append("    NVL (ser.discSer, 0) AS discountServices,");
  9812.         sqlQuery.append("    NVL (med.discMed, 0) AS discountmedicions");
  9813.         sqlQuery.append("     FROM    (SELECT A.HOSPITALCODE AS HOSPITALCODE,");
  9814.         sqlQuery.append("     B.DISCPERCENTAGE / 100 AS discSer");
  9815.         sqlQuery.append("  FROM T_HOSPITALCONTRACT a,");
  9816.         sqlQuery.append("     T_HOSPITALDISCOUNT b");
  9817.         sqlQuery.append(" WHERE     a.hospcontrid = b.hospitalcontractid");
  9818.         sqlQuery.append("     AND a.agreestatus = ?");
  9819.         sqlQuery.append("     AND B.DISCOUNTTYPE = ?) ser");
  9820.         sqlQuery.append("    FULL JOIN");
  9821.         sqlQuery.append("     (SELECT A.HOSPITALCODE AS HOSPITALCODE,");
  9822.         sqlQuery.append("     B.DISCPERCENTAGE / 100 AS discMed");
  9823.         sqlQuery.append("  FROM T_HOSPITALCONTRACT a,");
  9824.         sqlQuery.append("     T_HOSPITALDISCOUNT b");
  9825.         sqlQuery.append(" WHERE     a.hospcontrid = b.hospitalcontractid");
  9826.         sqlQuery.append("     AND a.agreestatus = ?");
  9827.         sqlQuery.append("     AND B.DISCOUNTTYPE = ?) med");
  9828.         sqlQuery.append("    ON ser.HOSPITALCODE = med.HOSPITALCODE) discList");
  9829.         sqlQuery.append(" ON H.HOSPITALCODE = discList.HOSPITALCODE");
  9830.         sqlQuery.append(" WHERE H.HOSPITALCODE = ?) disc");
  9831.        
  9832.         try
  9833.         {
  9834.             GOSIDebug.debugMessages("SQLQuery:" + sqlQuery + ":");
  9835.             GOSIDebug.debugMessages("\t\t Param 1 :" + OHConstants.ICD_MEDICINE_CODE + ":");
  9836.             GOSIDebug.debugMessages("\t\t Param 2 :" + OHConstants.TRTM_ISNONDISCOUNT_NO + ":");
  9837.             GOSIDebug.debugMessages("\t\t Param 3 :" + OHConstants.TRMT_SRVC_STS_REJECTED + ":");
  9838.             GOSIDebug.debugMessages("\t\t Param 4 :" + OHConstants.TRMT_SRVC_STS_CANCELLED + ":");
  9839.             GOSIDebug.debugMessages("\t\t Param 5 :" + OHConstants.ICD_MEDICINE_CODE + ":");
  9840.             GOSIDebug.debugMessages("\t\t Param 6 :" + OHConstants.TRTM_ISNONDISCOUNT_YES + ":");
  9841.             GOSIDebug.debugMessages("\t\t Param 7 :" + OHConstants.TRMT_SRVC_STS_REJECTED + ":");
  9842.             GOSIDebug.debugMessages("\t\t Param 8 :" + OHConstants.TRMT_SRVC_STS_CANCELLED + ":");
  9843.             GOSIDebug.debugMessages("\t\t Param 9 :" + OHConstants.ICD_MEDICINE_CODE + ":");
  9844.             GOSIDebug.debugMessages("\t\t Param 10 :" + OHConstants.TRMT_SRVC_STS_REJECTED + ":");
  9845.             GOSIDebug.debugMessages("\t\t Param 11 :" + OHConstants.TRMT_SRVC_STS_CANCELLED + ":");
  9846.             GOSIDebug.debugMessages("\t\t Param 12 :" + headerBean.getInvoiceHeaderId().longValue() + ":");
  9847.             GOSIDebug.debugMessages("\t\t Param 13 :" + OHConstants.AGREESTATUS_YES + ":");
  9848.             GOSIDebug.debugMessages("\t\t Param 14 :" + OHConstants.DISC_SERVICES+ ":");
  9849.             GOSIDebug.debugMessages("\t\t Param 15 :" + OHConstants.AGREESTATUS_YES + ":");
  9850.             GOSIDebug.debugMessages("\t\t Param 16 :" + OHConstants.DISC_MEDICINES+ ":");
  9851.             GOSIDebug.debugMessages("\t\t Param 17 :" + headerBean.getHospitalCode().longValue()  + ":");
  9852.            
  9853.            
  9854.             con = GOSIUtilities.getConnection
  9855.             (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  9856.             ps = con.prepareStatement(sqlQuery.toString());
  9857.             int i=0;
  9858.             ps.setString(++i,OHConstants.ICD_MEDICINE_CODE);
  9859.             ps.setByte(++i,OHConstants.TRTM_ISNONDISCOUNT_NO);
  9860.             ps.setShort(++i, OHConstants.TRMT_SRVC_STS_REJECTED);
  9861.             ps.setShort(++i, OHConstants.TRMT_SRVC_STS_CANCELLED);
  9862.             ps.setString(++i,OHConstants.ICD_MEDICINE_CODE);
  9863.             ps.setByte(++i,OHConstants.TRTM_ISNONDISCOUNT_YES);
  9864.             ps.setShort(++i, OHConstants.TRMT_SRVC_STS_REJECTED);
  9865.             ps.setShort(++i, OHConstants.TRMT_SRVC_STS_CANCELLED);
  9866.             ps.setString(++i,OHConstants.ICD_MEDICINE_CODE);
  9867.             ps.setShort(++i, OHConstants.TRMT_SRVC_STS_REJECTED);
  9868.             ps.setShort(++i, OHConstants.TRMT_SRVC_STS_CANCELLED);
  9869.             ps.setLong(++i,headerBean.getInvoiceHeaderId().longValue());
  9870.             ps.setByte(++i,OHConstants.AGREESTATUS_YES);
  9871.             ps.setByte(++i,OHConstants.DISC_SERVICES);
  9872.             ps.setByte(++i,OHConstants.AGREESTATUS_YES);
  9873.             ps.setByte(++i,OHConstants.DISC_MEDICINES);
  9874.             ps.setLong(++i,headerBean.getHospitalCode().longValue());                      
  9875.             rs = ps.executeQuery();
  9876.             if(rs.next())
  9877.             {
  9878.                 correctTotalAmount=new Double(rs.getDouble("TOTALAMOUNT"));
  9879.                 correctDiscountAmount=new Double(rs.getDouble("DISCOUNTAMOUNT"));
  9880.                
  9881.                 invTotalAmount=headerBean.getTotalAmount();
  9882.                 invDiscountAmount=headerBean.getDiscountAmount();
  9883.                
  9884.                  diffTotalAmount=invTotalAmount-correctTotalAmount;
  9885.                      diffDiscountAmount =invDiscountAmount-correctDiscountAmount;
  9886.                
  9887.                 GOSIDebug.debugMessages("invoice total amount is :"+invTotalAmount.intValue() +" the correct total amount :"+correctTotalAmount.intValue());
  9888.                 GOSIDebug.debugMessages("invoice discount amount is :"+invDiscountAmount.intValue() +" the correct discount amount :"+correctDiscountAmount.intValue());
  9889.                
  9890.                 if((diffTotalAmount>-1 && diffTotalAmount<1) && (diffDiscountAmount>-1 && diffDiscountAmount<1))
  9891.                     isCorrect=true;
  9892.             }
  9893.             GOSIDebug.debugMessages("isRegisteredHospital:" + isCorrect + ":");
  9894.             return isCorrect;
  9895.         }
  9896.         catch (Exception e)
  9897.         {
  9898.             throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  9899.             GOSIConstants.SOCIAL_INSURANCE,
  9900.             this.getClass().toString(),
  9901.             "isTotalAmountOfInvoiceHeaderCorrect()",e,"CMN_ERR_1000");         
  9902.         }
  9903.         finally
  9904.         {
  9905.             GOSIUtilities.cleanUp(con,ps,rs);
  9906.         }
  9907.     }
  9908.    
  9909.     /**
  9910.     * @METHOD NAME              :   getRegInvoiceTreatmentServicesDetails
  9911.     * @INFORMATION              :   This method is to  check the total amount of inovices header
  9912.     * @PARAM                    :   class java.lang.Long
  9913.     * @RETURN                   :   class java.util.ArrayList
  9914.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  9915.     * @LAST MODIFIED BY         :
  9916.     * @LAST MODIFIED DATE       :
  9917.     **/
  9918.    
  9919.     public ArrayList getRegInvoiceTreatmentServicesDetails(Long invoiceHeaderId)
  9920.     throws GOSIException   
  9921.     {
  9922.         ArrayList details = new ArrayList();
  9923.         PreparedStatement ps = null;
  9924.         ResultSet rs = null;
  9925.         StringBuilder sqlQuery = new StringBuilder();
  9926.         sqlQuery.append("SELECT RD.SOCIALINSURANCENUMBER AS SOCINSNUMBER, ");
  9927.         sqlQuery.append("NVL (M.SESSIONDATE, j.injurydate) AS caseDate, ");
  9928.         sqlQuery.append("TH.PATIENTNUMBER AS patientNumber, ");
  9929.         sqlQuery.append("p.firstname ");
  9930.         sqlQuery.append("|| ' ' ");
  9931.         sqlQuery.append("|| NVL (p.secondname, '') ");
  9932.         sqlQuery.append("|| ' '");
  9933.         sqlQuery.append("|| NVL (p.thirdname, '') ");
  9934.         sqlQuery.append("|| ' ' ");
  9935.         sqlQuery.append("|| NVL (p.surname, '') ");
  9936.         sqlQuery.append("AS CONTRIBUTORNAME, ");
  9937.         sqlQuery.append("NVL (TD.SFDACODE, TD.ICD10TRMTDIAGNOSISCODE) AS SERVICECODE, ");
  9938.         sqlQuery.append("CASE TD.ICD10TRMTDIAGNOSISCODE ");
  9939.         sqlQuery.append("WHEN ? THEN ? ");
  9940.         sqlQuery.append("ELSE ? ");
  9941.         sqlQuery.append("END ");
  9942.         sqlQuery.append("AS SERVICETYPE, ");
  9943.         sqlQuery.append("TD.TRMTDESC, ");
  9944.         sqlQuery.append("TD.TRMTDATE, ");
  9945.         sqlQuery.append("TD.UNITS, ");
  9946.         sqlQuery.append("TD.APPROVEDUNITS, ");
  9947.         sqlQuery.append("TD.UNITPRICE, ");
  9948.         sqlQuery.append("TD.DISCOUNTPERCENTAGE AS ADDITIONALDISCOUNTERCENTAGE, ");
  9949.         sqlQuery.append("TD.TRMTAMT, ");
  9950.         sqlQuery.append("TD.APPROVEDDISCPERCENTAGE, ");
  9951.         sqlQuery.append("NVL (TD.REJECTEDTRMTAMT, 0) AS REJECTEDTRMTAMT, ");
  9952.         sqlQuery.append("TD.REASONFORDEDUCTION, ");
  9953.         sqlQuery.append("TD.TRMTSRVCSTATUS ");
  9954.         sqlQuery.append("FROM t_REGHOSPINVOICEDET rd ");
  9955.         sqlQuery.append("LEFT JOIN T_TRMTSERVICESHDR th ");
  9956.         sqlQuery.append("ON rd.INVOICEDETAILSID = th.INVOICEDETAILSID ");
  9957.         sqlQuery.append("LEFT JOIN T_TRMTSERVICESDET td ");
  9958.         sqlQuery.append("ON th.TRMTSERVICEHDRID = td.TRMTSERVICEHDRID ");
  9959.         sqlQuery.append("LEFT JOIN t_INJURY j ");
  9960.         sqlQuery.append("ON J.INJURYID = TH.INJURYID ");
  9961.         sqlQuery.append("LEFT JOIN T_DISBASSMT d ");
  9962.         sqlQuery.append("ON D.SCHEDULEID = TH.DISASSMTID ");
  9963.         sqlQuery.append("LEFT JOIN T_MBAPPOINTMENT m ");
  9964.         sqlQuery.append("ON M.SCHEDULEID = D.SCHEDULEID ");
  9965.         sqlQuery.append("LEFT JOIN T_CONTRIBUTOR c ");
  9966.         sqlQuery.append("ON C.SOCIALINSURANCENUMBER = RD.SOCIALINSURANCENUMBER ");
  9967.         sqlQuery.append("LEFT JOIN T_PERSON p ");
  9968.         sqlQuery.append("ON P.PERSONID = C.PERSONID ");
  9969.         sqlQuery.append("WHERE RD.INVOICEHEADERID = ? AND TD.TRMTSRVCSTATUS <> ? ");
  9970.  
  9971.         try
  9972.         {
  9973.             GOSIDebug.debugMessages("SQLQuery:" + sqlQuery + ":");
  9974.             GOSIDebug.debugMessages("\t\t Param 1 :" + OHConstants.ICD_MEDICINE_CODE + ":");
  9975.             GOSIDebug.debugMessages("\t\t Param 2 :" + OHConstants.ICD_MEDICINE_CODE + ":");
  9976.             GOSIDebug.debugMessages("\t\t Param 3 :" + OHConstants.ICD_SERVICE_CODE + ":");
  9977.             GOSIDebug.debugMessages("\t\t Param 4 :" + invoiceHeaderId+ ":");
  9978.             GOSIDebug.debugMessages("\t\t Param 5 :" + OHConstants.TRMT_SRVC_STS_CANCELLED+ ":");
  9979.            
  9980.             con = GOSIUtilities.getConnection
  9981.             (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  9982.             ps = con.prepareStatement(sqlQuery.toString());
  9983.             int i=0;
  9984.             ps.setString(++i,OHConstants.ICD_MEDICINE_CODE);
  9985.             ps.setString(++i,OHConstants.ICD_MEDICINE_CODE);
  9986.             ps.setString(++i,OHConstants.ICD_SERVICE_CODE);
  9987.             ps.setLong(++i,invoiceHeaderId);
  9988.             ps.setShort(++i,OHConstants.TRMT_SRVC_STS_CANCELLED);
  9989.  
  9990.            
  9991.             rs = ps.executeQuery();
  9992.             while(rs.next())
  9993.             {
  9994.             TreatmentServiceBean trmtBean=new  TreatmentServiceBean();    
  9995.                 trmtBean.setSocInsNumber(rs.getLong("SOCINSNUMBER"));
  9996.                 trmtBean.setInjurySessionDate(rs.getTimestamp("caseDate"));
  9997.                 trmtBean.setPatientNumber(rs.getString("patientNumber"));
  9998.                 trmtBean.setContributorName (rs.getString("CONTRIBUTORNAME"));
  9999.                 trmtBean.setTrmtDateGreg(rs.getTimestamp("TRMTDATE"));
  10000.                 trmtBean.setTrmtCode(rs.getString("SERVICECODE"));
  10001.                 trmtBean.setTrmtType(rs.getString("SERVICETYPE"));
  10002.                 trmtBean.setTrmtDesc(rs.getString("TRMTDESC"));
  10003.                 trmtBean.setUnits(rs.getFloat("UNITS"));
  10004.                 trmtBean.setApprovedUnits(rs.getFloat("APPROVEDUNITS"));
  10005.                 trmtBean.setUnitPrice(rs.getDouble("UNITPRICE"));
  10006.                 trmtBean.setDiscountPercentage(rs.getDouble("ADDITIONALDISCOUNTERCENTAGE"));
  10007.                 trmtBean.setTrmtAmt(rs.getDouble("TRMTAMT"));
  10008.                 trmtBean.setApprovedDiscPercentage(rs.getDouble("APPROVEDDISCPERCENTAGE"));
  10009.                 trmtBean.setRejectedTrmtAmt(rs.getDouble("REJECTEDTRMTAMT"));
  10010.                 trmtBean.setReasonForDeduction(rs.getString("REASONFORDEDUCTION"));
  10011.                 trmtBean.setTrmtStatus(rs.getShort("TRMTSRVCSTATUS"));
  10012.                 details.add(trmtBean);
  10013.             }
  10014.            
  10015.             return details;
  10016.         }
  10017.         catch (Exception e)
  10018.         {
  10019.             throw new GOSIException( GOSIConstants.SEVERITY_ONE,
  10020.             GOSIConstants.SOCIAL_INSURANCE,
  10021.             this.getClass().toString(),
  10022.             "getRegInvoiceTreatmentServicesDetails()",e,"CMN_ERR_1000");           
  10023.         }
  10024.         finally
  10025.         {
  10026.             GOSIUtilities.cleanUp(con,ps,rs);
  10027.         }
  10028.     }
  10029.     /**
  10030.     * @METHOD NAME              :   canUploadInoviceByHospital
  10031.     * @INFORMATION              :   This method is can upload Treatment Invoice
  10032.     * @PARAM                    :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceHeaderBean
  10033.     * @RETURN                   :   String
  10034.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  10035.     * @LAST MODIFIED BY         :
  10036.     * @LAST MODIFIED DATE       :
  10037.     **/
  10038.     public String canUploadInoviceByHospital (RegHospInvoiceHeaderBean treatmentInvoiceBean) throws GOSIException
  10039.     {
  10040.         PreparedStatement   ps = null;
  10041.         ResultSet           rs = null;
  10042.         String SerialNumber="01";
  10043.  
  10044.         try
  10045.         {
  10046.             if (treatmentInvoiceBean.getYear() > Calendar.getInstance().get(Calendar.YEAR))
  10047.             {
  10048.                 throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  10049.                                            GOSIConstants.SOCIAL_INSURANCE,
  10050.                                            this.getClass().toString(),
  10051.                                            "canUploadInoviceByHospital()",
  10052.                                            null,
  10053.                                            "SOI_ERR_5855");
  10054.             }
  10055.             else if (treatmentInvoiceBean.getYear() == Calendar.getInstance().get(Calendar.YEAR))
  10056.             {
  10057.                 if (treatmentInvoiceBean.getMonth() > Calendar.getInstance().get(Calendar.MONTH))
  10058.                 {
  10059.                     throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  10060.                                                GOSIConstants.SOCIAL_INSURANCE,
  10061.                                                this.getClass().toString(),
  10062.                                                "canUploadInoviceByHospital()",
  10063.                                                null,
  10064.                                                "SOI_ERR_5856");
  10065.                 }
  10066.             }
  10067.             else if (treatmentInvoiceBean.getYear() < Calendar.getInstance().get(Calendar.YEAR) - 1)
  10068.             {
  10069.                 throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  10070.                                            GOSIConstants.SOCIAL_INSURANCE,
  10071.                                            this.getClass().toString(),
  10072.                                            "canUploadInoviceByHospital()",
  10073.                                            null,
  10074.                                            "SOI_ERR_5857");
  10075.             }
  10076.  
  10077.             GregorianCalendar calendar = new GregorianCalendar (treatmentInvoiceBean.getYear(), treatmentInvoiceBean.getMonth(), 1);
  10078.  
  10079.             treatmentInvoiceBean.setStartDate       (new Timestamp(calendar.getTime().getTime()));
  10080.             treatmentInvoiceBean.setStartDateEntFmt (OHConstants.GREGORIAN);
  10081.             calendar.set (Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
  10082.  
  10083.             treatmentInvoiceBean.setEndDate         (new Timestamp(calendar.getTime().getTime()));
  10084.             treatmentInvoiceBean.setEndDateEntFmt   (OHConstants.GREGORIAN);
  10085.             // check if exist invoice entered by Office
  10086.             StringBuilder sqlQuery = new StringBuilder();
  10087.             sqlQuery.append("SELECT COUNT (*) AS num_invoices ");
  10088.             sqlQuery.append("  FROM " + SITables.T_REGHOSPINVOICEHDR);
  10089.             sqlQuery.append( " WHERE hospitalcode = ? " );
  10090.             sqlQuery.append("   AND startdate = ? " );
  10091.             sqlQuery.append("   AND invoicestatus not in (?) AND filenumber is not null");
  10092.  
  10093.             con = GOSIUtilities.getConnection (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  10094.  
  10095.             ps = con.prepareStatement (sqlQuery.toString());
  10096.  
  10097.             ps.setLong      (1, treatmentInvoiceBean.getHospitalCode());
  10098.             ps.setTimestamp (2, treatmentInvoiceBean.getStartDate());
  10099.             ps.setShort     (3, OHConstants.REG_HOSP_INVC_CANCELLED);
  10100.  
  10101.             rs = ps.executeQuery ();
  10102.  
  10103.             if (rs.next() && rs.getInt("NUM_INVOICES") > 0)
  10104.             {
  10105.                 throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  10106.                                            GOSIConstants.SOCIAL_INSURANCE,
  10107.                                            this.getClass().toString(),
  10108.                                            "canUploadInoviceByHospital()",
  10109.                                            null,
  10110.                                            "SOI_ERR_5858");
  10111.             }
  10112.             // check if exist invoice entered by hospital and has been issued
  10113.             /*
  10114.             GOSIUtilities.cleanUp (ps, rs);
  10115.             sqlQuery = new StringBuilder();
  10116.             sqlQuery.append("SELECT COUNT (*) AS num_invoices ");
  10117.             sqlQuery.append("  FROM " + SITables.T_REGHOSPINVOICEHDR);
  10118.             sqlQuery.append(" WHERE hospitalcode = ? " );
  10119.             sqlQuery.append("   AND startdate = ? " );
  10120.             sqlQuery.append("   AND invoicestatus not in (?,?) AND filenumber is null ");
  10121.  
  10122.             con = GOSIUtilities.getConnection (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  10123.  
  10124.             ps = con.prepareStatement (sqlQuery.toString());
  10125.  
  10126.             ps.setLong      (1, treatmentInvoiceBean.getHospitalCode());
  10127.             ps.setTimestamp (2, treatmentInvoiceBean.getStartDate());
  10128.             ps.setShort     (3, OHConstants.REG_HOSP_INVC_CANCELLED);
  10129.             ps.setShort     (4, OHConstants.REG_HOSP_INVC_PENDING_DATA_ENTRY);
  10130.  
  10131.             rs = ps.executeQuery ();
  10132.  
  10133.             if (rs.next() && rs.getInt("NUM_INVOICES") > 0)
  10134.             {
  10135.             throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  10136.                                      GOSIConstants.SOCIAL_INSURANCE,
  10137.                                      this.getClass().toString(),
  10138.                                      "canUploadInoviceByHospital()",
  10139.                                      null,
  10140.                                      "SOI_ERR_5975");
  10141.             }
  10142. /*
  10143.             GOSIUtilities.cleanUp (ps, rs);
  10144.  
  10145.             sqlQuery = "SELECT effectivestartdate, effectiveenddate " +
  10146.                        "  FROM " + SITables.T_HOSPITALFOASSOCIATION +
  10147.                        " WHERE hospitalcode = ? " +
  10148.                        "   AND fieldofficecode = ? ";
  10149.  
  10150.             ps = con.prepareStatement (sqlQuery);
  10151.  
  10152.             ps.setLong  (1, treatmentInvoiceBean.getHospitalCode());
  10153.             ps.setShort (2, treatmentInvoiceBean.getFieldOffice());
  10154.  
  10155.             rs = ps.executeQuery ();
  10156.  
  10157.             if (! rs.next())
  10158.             {
  10159.                 throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  10160.                                            GOSIConstants.SOCIAL_INSURANCE,
  10161.                                            this.getClass().toString(),
  10162.                                            "createTreatmentInvoice()",
  10163.                                            null,
  10164.                                            "SOI_ERR_5859");
  10165.             }
  10166.             else
  10167.             {
  10168.                 boolean hasValidFOAssociation = false;
  10169.  
  10170.                 do
  10171.                 {
  10172.                     if (rs.getTimestamp("EFFECTIVESTARTDATE").before(treatmentInvoiceBean.getStartDate()) &&
  10173.                         (rs.getTimestamp("EFFECTIVEENDDATE") == null || rs.getTimestamp("EFFECTIVEENDDATE").after(treatmentInvoiceBean.getEndDate())))
  10174.                     {
  10175.                         hasValidFOAssociation = true;
  10176.                         break;
  10177.                     }
  10178.                 }
  10179.                 while (rs.next());
  10180.  
  10181.                 if (! hasValidFOAssociation)
  10182.                 {
  10183.                     throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  10184.                                                GOSIConstants.SOCIAL_INSURANCE,
  10185.                                                this.getClass().toString(),
  10186.                                                "createTreatmentInvoice()",
  10187.                                                null,
  10188.                                                "SOI_ERR_5860");
  10189.                 }
  10190.             }
  10191. */
  10192.             GOSIUtilities.cleanUp (ps, rs);
  10193.             sqlQuery = new StringBuilder();
  10194.             sqlQuery.append("SELECT contrstdate, contrenddate ");
  10195.             sqlQuery.append("  FROM " + SITables.T_HOSPITALCONTRACT );
  10196.             sqlQuery.append(" WHERE hospitalcode = ? " );
  10197.             sqlQuery.append("   AND agreestatus = ? ");
  10198.  
  10199.             ps = con.prepareStatement (sqlQuery.toString());
  10200.  
  10201.             ps.setLong  (1, treatmentInvoiceBean.getHospitalCode());
  10202.             ps.setShort (2, OHConstants.AGREESTATUS_YES);
  10203.  
  10204.             rs = ps.executeQuery ();
  10205.  
  10206.             if (! rs.next())
  10207.             {
  10208.                 throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  10209.                                            GOSIConstants.SOCIAL_INSURANCE,
  10210.                                            this.getClass().toString(),
  10211.                                            "canUploadInoviceByHospital()",
  10212.                                            null,
  10213.                                            "SOI_ERR_5861");
  10214.             }
  10215.             else
  10216.             {
  10217.                 boolean hasContractCoverage = false;
  10218.  
  10219.                 do
  10220.                 {
  10221.                     boolean isBefore= (rs.getTimestamp("CONTRSTDATE").before(treatmentInvoiceBean.getStartDate()) ||Objects.equals( rs.getTimestamp("CONTRSTDATE"),treatmentInvoiceBean.getStartDate())) ? true : false ;
  10222.                                     boolean isAfter = (rs.getTimestamp("CONTRENDDATE") == null || rs.getTimestamp("CONTRENDDATE").after(treatmentInvoiceBean.getEndDate()))? true : false ;        
  10223.                     if  ( isBefore && isAfter   )
  10224.                      {
  10225.                         hasContractCoverage = true;
  10226.                         break;
  10227.                      }
  10228.                 }
  10229.                 while (rs.next());
  10230.  
  10231.                 if (! hasContractCoverage)
  10232.                 {
  10233.                     throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  10234.                                                GOSIConstants.SOCIAL_INSURANCE,
  10235.                                                this.getClass().toString(),
  10236.                                                "canUploadInoviceByHospital()",
  10237.                                                null,
  10238.                                                "SOI_ERR_5862");
  10239.                 }
  10240.             }
  10241.            
  10242.            
  10243.             GOSIUtilities.cleanUp (ps, rs);
  10244.             sqlQuery=new StringBuilder();
  10245.             sqlQuery.append("select FILESTATUS from T_FILEUPLOADINFO  where MAPPINGKEY= ? and FILETYPE= ?");
  10246.             sqlQuery.append(" AND YEAR=? AND MONTH =? ");
  10247.             ps = con.prepareStatement (sqlQuery.toString());
  10248.  
  10249.             ps.setString  (1, treatmentInvoiceBean.getHospitalCode().toString());
  10250.             ps.setShort (2, OHConstants.INVOICE_FILE_TYPE);
  10251.             ps.setInt(3, treatmentInvoiceBean.getYear());
  10252.             ps.setInt(4, treatmentInvoiceBean.getMonth()+1);
  10253.            
  10254.  
  10255.             rs = ps.executeQuery ();
  10256.             int counter=1;
  10257.             while ( rs.next())
  10258.             {
  10259.                 Short status=rs.getShort("FILESTATUS");
  10260.                 if(status.equals(OHConstants.INVOICE_FILE_STATUS_PENDING_ENTRY)
  10261.                         ||status.equals(OHConstants.INVOICE_FILE_STATUS_PENDING_VALIDATATION))
  10262.                 {
  10263.                     throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  10264.                                GOSIConstants.SOCIAL_INSURANCE,
  10265.                                this.getClass().toString(),
  10266.                                "canUploadInoviceByHospital()",
  10267.                                null,
  10268.                                "SOI_ERR_5958");
  10269.                 }
  10270.                 counter++;
  10271.                
  10272.             }
  10273.             if(counter==1)
  10274.             {
  10275.                 SerialNumber="01";
  10276.             }
  10277.             else if(counter<10)
  10278.             {
  10279.                 SerialNumber="0"+counter;
  10280.             }
  10281.             else
  10282.             {
  10283.                 SerialNumber=counter+"";
  10284.             }
  10285.  
  10286.  
  10287.             return SerialNumber;
  10288.            
  10289.         }
  10290.         catch (GOSIException ge)
  10291.         {
  10292.             ctx.setRollbackOnly ();
  10293.  
  10294.             throw   ge;
  10295.         }
  10296.         catch (Exception e)
  10297.         {
  10298.             ctx.setRollbackOnly ();
  10299.  
  10300.             throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  10301.                                        GOSIConstants.SOCIAL_INSURANCE,
  10302.                                        this.getClass().toString(),
  10303.                                        "canUploadInoviceByHospital()",
  10304.                                        e,
  10305.                                        "CMN_ERR_1000");
  10306.         }
  10307.         finally
  10308.         {
  10309.             GOSIUtilities.cleanUp (con, ps, rs);
  10310.         }
  10311.     }
  10312.     /**
  10313.     * @METHOD NAME              :   getFileUploadHistory
  10314.     * @INFORMATION              :   This method is can upload Treatment Invoice
  10315.     * @PARAM                    :   class java.lang.Long
  10316.     * @RETURN                   :   ArrayList
  10317.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  10318.     * @LAST MODIFIED BY         :
  10319.     * @LAST MODIFIED DATE       :
  10320.     **/
  10321.     public ArrayList getFileUploadHistory (Long hospitalCode)throws GOSIException
  10322.     {
  10323.         PreparedStatement   ps = null;
  10324.         ResultSet           rs = null;
  10325.         ArrayList fileUploadHistoryList=new ArrayList();
  10326.         Timestamp currentDate = new Timestamp(System.currentTimeMillis());
  10327.  
  10328.         try
  10329.         {
  10330.  
  10331.             String sqlQuery = "SELECT A.FILEUPLOADINFOID,A.FILENAME,A.USERID,A.LOCATION,A.FILETYPE,A.UPLOADDATE, "
  10332.                 +" A.YEAR,A.MONTH,A.CREATEDBY ,A.FILESTATUS, A.MAPPINGKEY,A.CREATIONTIMESTAMP, U.LONGNAMEARABIC FROM "
  10333.                 + "T_FILEUPLOADINFO A LEFT JOIN T_USER_INTERNET U ON U.id=A.CREATEDBY  WHERE A.MAPPINGKEY =? AND A.FILETYPE = ? "
  10334.                 + "AND A.YEAR IS NOT NULL AND A.MONTH IS NOT NULL  ORDER BY A.CREATIONTIMESTAMP desc";
  10335.  
  10336.             con = GOSIUtilities.getConnection (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  10337.  
  10338.             ps = con.prepareStatement (sqlQuery);
  10339.  
  10340.             ps.setLong  (1, hospitalCode);
  10341.             ps.setShort (2, OHConstants.INVOICE_FILE_TYPE);
  10342.  
  10343.  
  10344.             rs = ps.executeQuery ();
  10345.  
  10346.              while(rs.next())
  10347.                 {
  10348.                     FileUploadInfoBean fileBean=new  FileUploadInfoBean();
  10349.                     if(rs.getObject("FILEUPLOADINFOID")!= null)
  10350.                     {
  10351.                         fileBean.setFileUploadInfoId((new Long(rs.getLong("FILEUPLOADINFOID"))));
  10352.                     }
  10353.                     if(rs.getObject("FILENAME")!=null)
  10354.                     {
  10355.                         fileBean.setFileName(rs.getString("FILENAME"));
  10356.                     }
  10357.                     if(rs.getObject("USERID")!= null)
  10358.                     {
  10359.                         fileBean.setUserId((new Long(rs.getLong("USERID"))));
  10360.                     }
  10361.                     if(rs.getObject("LOCATION")!= null)
  10362.                     {
  10363.                         fileBean.setLocation((new Short(rs.getShort("LOCATION"))));
  10364.                     }
  10365.                     if(rs.getObject("FILETYPE")!= null)
  10366.                     {
  10367.                         fileBean.setFileType((new Short(rs.getShort("FILETYPE"))));
  10368.                     }
  10369.                     if(rs.getObject("UPLOADDATE")!= null)
  10370.                     {
  10371.                         fileBean.setUploadDate(rs.getTimestamp("UPLOADDATE"));
  10372.                     }
  10373.                     if(rs.getObject("CREATEDBY")!= null)
  10374.                     {
  10375.                         fileBean.setCreatedBy(rs.getLong("CREATEDBY"));
  10376.                     }
  10377.                     if(rs.getObject("FILESTATUS")!= null)
  10378.                     {
  10379.                         fileBean.setFileStatus(rs.getShort("FILESTATUS"));
  10380.                     }
  10381.                     if(rs.getObject("MAPPINGKEY")!= null)
  10382.                     {
  10383.                         fileBean.setMappingKey(rs.getString("MAPPINGKEY"));
  10384.                     }
  10385.                     if(rs.getObject("YEAR")!= null)
  10386.                     {
  10387.                         fileBean.setYear(rs.getInt("YEAR"));
  10388.                     }
  10389.                     if(rs.getObject("MONTH")!= null)
  10390.                     {
  10391.                         fileBean.setMonth(rs.getInt("MONTH"));
  10392.                     }
  10393.                     if(rs.getObject("CREATIONTIMESTAMP")!= null)
  10394.                     {
  10395.                         fileBean.setCreationTimestamp(rs.getTimestamp("CREATIONTIMESTAMP"));
  10396.                     }
  10397.                     if(rs.getObject("LONGNAMEARABIC")!= null)
  10398.                     {
  10399.                         fileBean.setGivenFileName(rs.getString("LONGNAMEARABIC"));
  10400.                     }
  10401.                     fileUploadHistoryList.add(fileBean);
  10402.                 }
  10403.  
  10404.  
  10405.             return fileUploadHistoryList;
  10406.            
  10407.         }
  10408.         catch (GOSIException ge)
  10409.         {
  10410.             ctx.setRollbackOnly ();
  10411.  
  10412.             throw   ge;
  10413.         }
  10414.         catch (Exception e)
  10415.         {
  10416.             ctx.setRollbackOnly ();
  10417.  
  10418.             throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  10419.                                        GOSIConstants.SOCIAL_INSURANCE,
  10420.                                        this.getClass().toString(),
  10421.                                        "getFileUploadHistory()",
  10422.                                        e,
  10423.                                        "CMN_ERR_1000");
  10424.         }
  10425.         finally
  10426.         {
  10427.             GOSIUtilities.cleanUp (con, ps, rs);
  10428.         }
  10429.     }
  10430.     /**
  10431.     * @METHOD NAME              :   getSummaryEClaimFileResult
  10432.     * @INFORMATION              :   This method is can upload Treatment Invoice
  10433.     * @PARAM                    :   class java.lang.Long
  10434.     * @RETURN                   :   ArrayList
  10435.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  10436.     * @LAST MODIFIED BY         :
  10437.     * @LAST MODIFIED DATE       :
  10438.     **/
  10439.     public SummayEClaimFileResultBean getSummaryEClaimFileResult (Long hospitalCode , int month , int year)throws GOSIException
  10440.     {
  10441.         PreparedStatement   ps = null;
  10442.         ResultSet           rs = null;
  10443.         Timestamp startDate = null;
  10444.         Timestamp endDate = null;
  10445.         int totalNumberRecord=0;
  10446.         int totalNumberCorrectRecord=0;
  10447.         int totalNumberErroneousRecord=0;
  10448.         Double percentageCorrectRecord=0.0;
  10449.         Double percentageErroneousRecord=0.0;
  10450.         ArrayList summaryECalimError =new ArrayList();
  10451.         SummayEClaimFileResultBean summayEClaimFileResultBean = new SummayEClaimFileResultBean();
  10452.         try
  10453.         {
  10454.  
  10455.             StringBuilder sqlQuery = new StringBuilder();
  10456.             sqlQuery.append("SELECT B.ERRORCODE, B.ERRORMESSAGEEN,  B.ERRORMESSAGEAR,  C.ERRORCODE AS PROCCODE, C.ERRORMESSAGEEN AS PROCDESCENG ,C.ERRORMESSAGEAR AS PROCDESCARB , ");
  10457.             sqlQuery.append(" COUNT (*) AS TOTAL, MIN (A.TRMTDATE) AS STARTDATE , MAX (A.TRMTDATE) AS ENDDATE  FROM T_REGHOSPINVOICEFILE A ");
  10458.             sqlQuery.append(" LEFT JOIN T_BATCHERRORMESSAGES B  ON B.ERRORCODE = TRIM (A.ERRORCODE) ");
  10459.             sqlQuery.append(" LEFT JOIN T_BATCHERRORMESSAGES C ON C.ERRORCODE = REPLACE (TRIM (A.ERRORCODE), 'ERR', 'MSG') ");
  10460.             sqlQuery.append(" WHERE FILEID IN(SELECT FILEUPLOADINFOID FROM T_FILEUPLOADINFO WHERE MAPPINGKEY = ? AND FILETYPE=? AND MONTH = ? AND YEAR = ? ) ");
  10461.             sqlQuery.append(" AND (   A.TRMTSERVICEDETID IS NOT NULL OR TRIM (A.ERRORCODE) NOT IN ('OHZ_022_ERR_073', 'OHZ_022_ERR_015')) ");
  10462.             sqlQuery.append(" GROUP BY B.ERRORCODE,B.ERRORMESSAGEEN,B.ERRORMESSAGEAR,C.ERRORCODE,C.ERRORMESSAGEEN,C.ERRORMESSAGEAR  ORDER BY COUNT (*) DESC ");
  10463.             con = GOSIUtilities.getConnection (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  10464.  
  10465.             ps = con.prepareStatement (sqlQuery.toString());
  10466.             int i=0;
  10467.             ps.setLong  (++i, hospitalCode);
  10468.             ps.setShort (++i, OHConstants.INVOICE_FILE_TYPE);
  10469.             ps.setLong  (++i, month);
  10470.             ps.setLong  (++i, year);
  10471.  
  10472.  
  10473.             rs = ps.executeQuery ();
  10474.  
  10475.              while(rs.next())
  10476.              {
  10477.                  SummayEClaimErrorBean summayEClaimErrorBean=new SummayEClaimErrorBean();
  10478.                  if(rs.getObject("ERRORCODE")!= null)
  10479.                  {  
  10480.                      summayEClaimErrorBean.setErrorCode(rs.getString("ERRORCODE"));
  10481.                     if(rs.getObject("ERRORMESSAGEEN")!= null)
  10482.                     {
  10483.                         summayEClaimErrorBean.setErrorDescriptionEng(rs.getString("ERRORMESSAGEEN"));
  10484.                     }
  10485.                     if(rs.getObject("ERRORMESSAGEAR")!= null)
  10486.                     {
  10487.                         summayEClaimErrorBean.setErrorDescriptionArb(rs.getString("ERRORMESSAGEAR"));
  10488.                     }
  10489.                     if(rs.getObject("PROCCODE")!= null)
  10490.                     {
  10491.                         summayEClaimErrorBean.setProcessingMethodCode(rs.getString("PROCCODE"));
  10492.                     }
  10493.                     if(rs.getObject("PROCDESCENG")!= null)
  10494.                     {
  10495.                         summayEClaimErrorBean.setProcessingMethodEng(rs.getString("PROCDESCENG"));
  10496.                     }
  10497.                     if(rs.getObject("PROCDESCARB")!= null)
  10498.                     {
  10499.                         summayEClaimErrorBean.setProcessingMethodArb(rs.getString("PROCDESCARB"));
  10500.                     }
  10501.                     if(rs.getObject("TOTAL")!= null)
  10502.                     {
  10503.                         summayEClaimErrorBean.setNumberErroneousRecord(rs.getInt("TOTAL"));
  10504.                     }
  10505.                     if(rs.getObject("STARTDATE")!= null)
  10506.                     {
  10507.                         Timestamp startDateTmp=rs.getTimestamp("STARTDATE");
  10508.                         if(startDate==null || startDateTmp.before(startDate) )
  10509.                         {
  10510.                             startDate=startDateTmp;
  10511.                         }
  10512.                        
  10513.                     }
  10514.                     if(rs.getObject("ENDDATE")!= null)
  10515.                     {
  10516.                         Timestamp endDateTmp=rs.getTimestamp("ENDDATE");
  10517.                         if(endDate==null || endDateTmp.after(endDate) )
  10518.                         {
  10519.                             endDate=endDateTmp;
  10520.                         }
  10521.                        
  10522.                     }
  10523.                     totalNumberRecord=totalNumberRecord+summayEClaimErrorBean.getNumberErroneousRecord();
  10524.                     totalNumberErroneousRecord=totalNumberErroneousRecord+summayEClaimErrorBean.getNumberErroneousRecord();
  10525.                     summaryECalimError.add(summayEClaimErrorBean);
  10526.                  }
  10527.                  else
  10528.                  {
  10529.                      if(rs.getObject("TOTAL")!= null)
  10530.                         {
  10531.                             totalNumberCorrectRecord=rs.getInt("TOTAL");
  10532.                         }
  10533.                      if(rs.getObject("STARTDATE")!= null)
  10534.                         {
  10535.                             Timestamp startDateTmp=rs.getTimestamp("STARTDATE");
  10536.                             if(startDate==null || startDateTmp.before(startDate) )
  10537.                             {
  10538.                                 startDate=startDateTmp;
  10539.                             }
  10540.                            
  10541.                         }
  10542.                         if(rs.getObject("ENDDATE")!= null)
  10543.                         {
  10544.                             Timestamp endDateTmp=rs.getTimestamp("ENDDATE");
  10545.                             if(endDate==null || endDateTmp.after(endDate) )
  10546.                             {
  10547.                                 endDate=endDateTmp;
  10548.                             }
  10549.                            
  10550.                         }
  10551.                         totalNumberRecord=totalNumberRecord+totalNumberCorrectRecord;
  10552.                  }
  10553.                    
  10554.                    
  10555.              }
  10556.              if(totalNumberRecord>0)
  10557.              {
  10558.                  percentageCorrectRecord=(Double.parseDouble(totalNumberCorrectRecord+"")/Double.parseDouble(totalNumberRecord+""))*100;
  10559.                  percentageErroneousRecord=(Double.parseDouble(totalNumberErroneousRecord+"")/Double.parseDouble(totalNumberRecord+""))*100;
  10560.              }
  10561.              summayEClaimFileResultBean=new SummayEClaimFileResultBean(totalNumberRecord,totalNumberCorrectRecord,totalNumberErroneousRecord,
  10562.                      percentageCorrectRecord, percentageErroneousRecord,summaryECalimError,month,year,startDate,endDate);
  10563.              
  10564.             return summayEClaimFileResultBean;
  10565.            
  10566.         }
  10567.         catch (GOSIException ge)
  10568.         {
  10569.             ctx.setRollbackOnly ();
  10570.  
  10571.             throw   ge;
  10572.         }
  10573.         catch (Exception e)
  10574.         {
  10575.             ctx.setRollbackOnly ();
  10576.  
  10577.             throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  10578.                                        GOSIConstants.SOCIAL_INSURANCE,
  10579.                                        this.getClass().toString(),
  10580.                                        "getSummaryEClaimFileResult()",
  10581.                                        e,
  10582.                                        "CMN_ERR_1000");
  10583.         }
  10584.         finally
  10585.         {
  10586.             GOSIUtilities.cleanUp (con, ps, rs);
  10587.         }
  10588.     }
  10589.  
  10590.  
  10591.        
  10592.           /**
  10593.     * @METHOD NAME              :   IsTenthInvoice
  10594.     * @INFORMATION              :   Return true if the invoice position multiple of 10, otherwise false  
  10595.     * @PARAM                    :   class gosi.business.socialinsurance.occupationalhazards.injury.beans.RegHospInvoiceHeaderBean
  10596.     * @RETURN                   :   boolean
  10597.     * @EXCEPTION                :   class gosi.core.util.GOSIException
  10598.     * @LAST MODIFIED BY         : Abdulrahman Almohaimeed
  10599.     * @LAST MODIFIED DATE       : 04/11/2014
  10600.     **/
  10601.  
  10602.         public boolean IsTenthInvoice ( RegHospInvoiceHeaderBean invoiceBean) throws GOSIException
  10603.         {
  10604.             PreparedStatement ps = null ;
  10605.             ResultSet rs = null ;
  10606.             try{
  10607.             int i=0 , invoiceCounter = 0 ;
  10608.             StringBuilder sqlQuery = new StringBuilder();
  10609.  
  10610.             Long invoiceHeaderId   = invoiceBean.getInvoiceHeaderId();
  10611.  
  10612.         sqlQuery.append("SELECT  count(INVOICEHEADERID)  FROM T_REGHOSPINVOICEHDR a  where  A.INVOICEHEADERID<=?   ");
  10613.             GOSIDebug.debugMessages("SQL Query : " + sqlQuery.toString());
  10614.          con = GOSIUtilities.getConnection (GOSIConstants.OCCUPATIONAL_HAZARDS_ID);
  10615.            
  10616.                     ps = con.prepareStatement (sqlQuery.toString());
  10617.             ps.setLong(++i, invoiceHeaderId);
  10618.                         rs = ps.executeQuery ();     
  10619.                         if(rs.next())
  10620.              {  
  10621.                 Long invoicePosition =  rs.getLong(1);
  10622.                                 GOSIDebug.debugMessages("invoice Header ID IS "+invoiceHeaderId+"    AND THE Invoice Position is "+ invoicePosition);
  10623.                                 if (invoicePosition % 10 == 0)
  10624.                                     return true ;
  10625.                          }
  10626.             }
  10627.         catch (GOSIException ge)
  10628.         {
  10629.             ctx.setRollbackOnly ();
  10630.  
  10631.             throw   ge;
  10632.         }
  10633.         catch (Exception e)
  10634.         {
  10635.             ctx.setRollbackOnly ();
  10636.  
  10637.             throw   new GOSIException (GOSIConstants.SEVERITY_ONE,
  10638.                                        GOSIConstants.SOCIAL_INSURANCE,
  10639.                                        this.getClass().toString(),
  10640.                                        "getSummaryEClaimFileResult()",
  10641.                                        e,
  10642.                                        "CMN_ERR_1000");
  10643.         }
  10644.         finally
  10645.         {
  10646.             GOSIUtilities.cleanUp (con, ps, rs);
  10647.         }            
  10648.          return false ;
  10649.         }
  10650.  
  10651.  
  10652.  
  10653.  
  10654.  
  10655.  
  10656.  
  10657.  
  10658.  
  10659.  
  10660.        
  10661.        
  10662. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement