Beispiel #1
0
        public void DeleteLastExtensionHistory(int nPackageID, int last_nExtensionID)
        {
            myMemberPackage.NPackageID = nPackageID;
            myMemberPackage.SelectOne();

            TblPackageExtension packageExt = new TblPackageExtension();
            packageExt.NPackageID = nPackageID;
            DataTable packageExtTable = packageExt.SelectAllWnPackageIDLogic();

            if (packageExtTable == null)
                throw new Exception("This extension row has been deleted by others");
            if (packageExtTable.Rows.Count == 0)
                throw new Exception("This extension row has been deleted by others");

            if (packageExtTable.Rows.Count > 0)
            {
                DataRow [] rowList = packageExtTable.Select(" nStatusID = 0 AND nExtensionID > " + last_nExtensionID.ToString());
                if (rowList.Length > 0) // mean is not last package extension
                {
                    throw new Exception("Only the most recent package extension can be deleted.");
                }
            }

            DataRow[] deletedDataRowList = packageExtTable.Select("nStatusID = 0 and nExtensionID = " + last_nExtensionID, "nExtensionID", DataViewRowState.CurrentRows);
            if (deletedDataRowList.Length == 0)
                throw new Exception("This extension row has been deleted by others");
            //deletedDataRowList should be one row
            deletedDataRowList[0]["nStatusID"] = 1;
            TimeSpan durationToReverse = TimeSpan.FromDays((double) ACMS.Convert.ToInt32(deletedDataRowList[0]["nDaysExtended"]));

            DataRow[] tempDataRowList = packageExtTable.Select("nStatusID = 0", "nExtensionID", DataViewRowState.CurrentRows);
            // now need to use the last row's info to calculate the expriry date.
            // but if there is the only row in extension package for this member package, i have to use other info to calculate the expiry date for this memberpackage

            myMemberPackage.DtExpiryDate = myMemberPackage.DtExpiryDate.Value.Subtract(durationToReverse);

            ACMSDAL.ConnectionProvider connProvider = new ConnectionProvider();

            try
            {
                myMemberPackage.MainConnectionProvider = connProvider;
                packageExt.MainConnectionProvider = connProvider;
                connProvider.OpenConnection();
                connProvider.BeginTransaction("SaveExtension");
                myMemberPackage.Update();
                packageExt.SaveData(packageExtTable);
                connProvider.CommitTransaction();
            }
            catch (Exception)
            {
                connProvider.RollbackTransaction("SaveExtension");
                throw new Exception("Failed to Create New Extension");
            }
            finally
            {
                if (connProvider.CurrentTransaction != null)
                    connProvider.CurrentTransaction.Dispose();
                if (connProvider.DBConnection != null)
             		{
                    if (connProvider.DBConnection.State == ConnectionState.Open)
                        connProvider.DBConnection.Close();
                }
                myMemberPackage.MainConnactionIsCreatedLocal = true;
                packageExt.MainConnactionIsCreatedLocal = true;
            }
        }
Beispiel #2
0
        //public void SaveExtensionHistory(int nPackageID, DataTable packageExtensionTable, DateTime oldExpiryDate)
        public void SaveExtensionHistory(int nPackageID, DataTable packageExtensionTable, DateTime oldExpiryDate, bool isGiro, DateTime StartDate, DateTime EndDate, int iReasonID)
        {
            // *TO Do -- if dtStartDate is null, no allow extend
            DataRow packExtRow = packageExtensionTable.Rows[0];
            int nReasonID=0;
            if (iReasonID != 0)
                nReasonID = iReasonID;
            else
                nReasonID = ACMS.Convert.ToInt32(packExtRow["nReasonID"]);

            if (nReasonID < 0)
                return;
            // Assume that nReasonID = 0 is Others

            TblPackageExtension packageExt = new TblPackageExtension();
            ACMSDAL.ConnectionProvider connProvider = new ConnectionProvider();

            if (nReasonID > 0)
            {
                try
                {
                    myMemberPackage.MainConnectionProvider = connProvider;
                    packageExt.MainConnectionProvider = connProvider;

                    connProvider.OpenConnection();
                    connProvider.BeginTransaction("SaveExtension");

                        DateTime packageExtensionStartDate;
                        DateTime packageExtensionEndDate;

                        if (isGiro == true)
                    {
                        packExtRow["dtStartDate"] = StartDate;
                        packExtRow["dtEndDate"] = EndDate;
                        packageExtensionStartDate = StartDate;
                        packageExtensionEndDate = EndDate;
                    }
                    else
                    {
                            //to support extension for multiple package at once
                        if (StartDate.ToString() != "" && EndDate.ToString() != "")
                        {
                            // C=Leave Start Date
                            packageExtensionStartDate = Convert.ToDateTime(StartDate);
                            // D=Leave End Date
                            packageExtensionEndDate = Convert.ToDateTime(EndDate);
                        }
                        else
                        {
                            // C=Leave Start Date
                            packageExtensionStartDate = ACMS.Convert.ToDateTime(packExtRow["dtStartDate"]);
                            // D=Leave End Date
                            packageExtensionEndDate = ACMS.Convert.ToDateTime(packExtRow["dtEndDate"]);
                        }
                    }

                    //B4 Save, must Check whether the startdate have overlap with previous one or not
                    packageExt.NPackageID = nPackageID;
                    DataTable table = packageExt.SelectAllWnPackageIDLogic();
                    if (table != null && table.Rows.Count > 0)
                    {
            //						DataRow[] tempRow = table.Select("nStatusID = 0 and dtEndDate > '" + packageExtensionStartDate + "'", "nExtensionID");
            //						if (tempRow.Length > 0)
            //							throw new Exception("Overlapped date in extension package.");
                        int RowExtention;
                        DateTime e = packageExtensionStartDate;
                        DateTime f = packageExtensionEndDate;
                        for (RowExtention = 0; RowExtention <= table.Rows.Count-1; RowExtention++)
                        {
                            if (e < ACMS.Convert.ToDateTime(table.Rows[RowExtention]["dtEndDate"]) && f >= ACMS.Convert.ToDateTime(table.Rows[RowExtention]["dtStartDate"])
                                || (f < e))
                            {
                            throw new Exception("Overlapped date in extension package.");
                            }
                        }

                    }
                    //end checking

                    myMemberPackage.NPackageID = nPackageID;
                    DataTable memberPackageTable = myMemberPackage.SelectOne();

                    if  (myMemberPackage.DtStartDate.IsNull)
                        throw new Exception("Member Package not been used yet.");

                    if  (memberPackageTable.Rows[0]["DtStartDate"] == DBNull.Value)
                        return;

                    //bool isGiro = !myMemberPackage.NGIRORefID.IsNull;

                    // A=Member Package Start Date
                    DateTime memberPackageStartDate = myMemberPackage.DtStartDate.Value;
                    // B=Member Package End Date
                    DateTime memberPackageExpiryDate = myMemberPackage.DtExpiryDate.Value;
                    DateTime memberPackagePurchaseDate = myMemberPackage.DtPurchaseDate.Value;

                    //if (packageExtensionStartDate > memberPackageExpiryDate)
                    //	throw new Exception("Extension Start Date is not allow to later than Member Package's Expiry Date.");

                    if (isGiro == false)
                    {
                        if (packageExtensionStartDate > memberPackageExpiryDate)
                            throw new Exception("Extension Start Date is not allow to later than Member Package's Expiry Date.");

                        DateTime latestNewExpiryDate = DateTime.MinValue;

                        if ( packageExtensionStartDate > memberPackageStartDate)
                        {

                              DateTime latestExpiryDate = DateTime.ParseExact("2012-04-01", "yyyy'-'MM'-'dd", null);
                              if (memberPackagePurchaseDate > latestExpiryDate && nReasonID != 6)
                            {
                                TimeSpan duration = packageExtensionEndDate.Subtract(packageExtensionStartDate);

                                    if (2 > duration.Days )//01042012 Member only can apply extension with a minimun of 3 days
                                    {
                                        throw new Exception("Extension only can apply for minimun of 3 days.");
                                    }
                                    else
                                    {
                                        TimeSpan duration1 = packageExtensionEndDate.Subtract(packageExtensionStartDate);
                                        myMemberPackage.DtExpiryDate = myMemberPackage.DtExpiryDate.Value.Add(duration1).AddDays(1);
                                    }

                            }
                            else
                            {
                                           TimeSpan duration = packageExtensionEndDate.Subtract(packageExtensionStartDate);
                                            myMemberPackage.DtExpiryDate = myMemberPackage.DtExpiryDate.Value.Add(duration).AddDays(1);
                            }
                        }
                        else if (packageExtensionStartDate < memberPackageStartDate)
                        {
                            TimeSpan duration = packageExtensionEndDate.Subtract(memberPackageStartDate);
                            myMemberPackage.DtExpiryDate = myMemberPackage.DtExpiryDate.Value.Add(duration).AddDays(1);
                        }

                        myMemberPackage.DtLastEdit = System.DateTime.Now;
                        myMemberPackage.NEmployeeID = User.EmployeeID;
                    }
                    else
                    {
                        //int nGiroRefID = (int)myMemberPackage.NGIRORefID;
                        // if the member package is Giro
                        // then need to make sure all the extension is follow the base one

                        myMemberPackage.NPackageID = nPackageID;
                        DataTable tempTable = myMemberPackage.SelectAllWnGIROPackageIDLogic();

                        if (tempTable == null)
                            return;
                        if (tempTable.Rows.Count == 0)
                            return;

                        if (tempTable.Rows.Count > 1)
                        {
                            DataRow[] rowList = tempTable.Select("dtStartDate is not null", "nGiroRefID", DataViewRowState.CurrentRows);

                            if (rowList.Length > 0)
                            {
                                DateTime latestNewExpiryDate = DateTime.MinValue;
                                DateTime tempnewExpiryDate = DateTime.MinValue;

                                memberPackageStartDate = ACMS.Convert.ToDateTime(rowList[0]["dtStartDate"]);
                                memberPackageExpiryDate = ACMS.Convert.ToDateTime(rowList[0]["dtExpiryDate"]);

                                if (packageExtensionStartDate > memberPackageStartDate)
                                {
                                    TimeSpan duration = packageExtensionEndDate.Subtract(packageExtensionStartDate);
                                    tempnewExpiryDate = memberPackageExpiryDate.Add(duration).AddDays(1);
                                }
                                else if (packageExtensionStartDate < memberPackageStartDate)
                                {
                                    TimeSpan duration = packageExtensionEndDate.Subtract(memberPackageStartDate);
                                    tempnewExpiryDate = memberPackageExpiryDate.Add(duration).AddDays(1);
                                }

                                tempTable.BeginInit();
                                foreach (DataRow r in rowList)
                                {
                                    r["dtExpiryDate"] = tempnewExpiryDate;
                                    r["dtLastEdit"] = DateTime.Now;
                                    r["nEmployeeID"] = User.EmployeeID;
                                }
                                tempTable.EndInit();
                            }
                            else
                                return;
                        }
                        else
                        {
                            isGiro = false;
                            myMemberPackage.NPackageID = nPackageID;
                            myMemberPackage.SelectOne();
                            myMemberPackage.DtLastEdit = System.DateTime.Now;
                            myMemberPackage.NEmployeeID = User.EmployeeID;
                            DateTime latestNewExpiryDate = DateTime.MinValue;

                            if (packageExtensionStartDate > memberPackageStartDate)
                            {
                                TimeSpan duration = packageExtensionEndDate.Subtract(packageExtensionStartDate);
                                myMemberPackage.DtExpiryDate = myMemberPackage.DtExpiryDate.Value.Add(duration).AddDays(1);
                            }
                            else if (packageExtensionStartDate < memberPackageStartDate)
                            {
                                TimeSpan duration = packageExtensionEndDate.Subtract(memberPackageStartDate);
                                myMemberPackage.DtExpiryDate = myMemberPackage.DtExpiryDate.Value.Add(duration).AddDays(1);
                            }
                        }
                    }

                    //To support extension for multiple package at once
                    object dtEndValue = packExtRow["dtEndDate"];
                    object dtStartDate = packExtRow["dtEndDate"];
                    if (dtEndValue == DBNull.Value && dtStartDate == DBNull.Value)
                    {
                        packExtRow["dtEndDate"] = EndDate;
                        packExtRow["dtStartDate"] = StartDate;
                    }
                    TimeSpan nDaysExtend = ACMS.Convert.ToDateTime(packExtRow["dtEndDate"]).Subtract(ACMS.Convert.ToDateTime(packExtRow["dtStartDate"]));

                    packExtRow["nDaysExtended"] = nDaysExtend.TotalDays+1;
                    packExtRow["dtOldExpiry"]=oldExpiryDate;
                    packExtRow["dtNewExpiry"]=	oldExpiryDate.AddDays(nDaysExtend.TotalDays+1);
                    packExtRow["dtCreateDate"] = System.DateTime.Now; //jackie 14032012
                    if (nReasonID != 0)
                        packExtRow["nReasonID"] = nReasonID;

                    packExtRow["nDaysExtended"]=(nDaysExtend.TotalDays)+1;
                    #region ====== Added By Albert ======
                    //To update member package status. If expiry date is greater than today date, change the status to active.
                    DateTime dtExpireDate = Convert.ToDateTime(myMemberPackage.DtExpiryDate.ToString());
                    if(DateTime.Compare(dtExpireDate,DateTime.Now)>0)
                        myMemberPackage.NStatusID = 0;
                    #endregion
                    myMemberPackage.Update();

                    packageExt.SaveData(packageExtensionTable);

                    connProvider.CommitTransaction();
                }
                catch (Exception ex)
                {
                    connProvider.RollbackTransaction("SaveExtension");
                    throw ex;
                }
                finally
                {
                    if (connProvider.CurrentTransaction != null)
                        connProvider.CurrentTransaction.Dispose();
                    if (connProvider.DBConnection != null)
                    {
                        if (connProvider.DBConnection.State == ConnectionState.Open)
                            connProvider.DBConnection.Close();
                    }
                    myMemberPackage.MainConnactionIsCreatedLocal = true;
                    packageExt.MainConnactionIsCreatedLocal = true;
                }
            }
            else
            {
                try
                {
                    myMemberPackage.MainConnectionProvider = connProvider;
                    packageExt.MainConnectionProvider = connProvider;

                    connProvider.OpenConnection();
                    connProvider.BeginTransaction("SaveExtension");

                    myMemberPackage.NPackageID = nPackageID;
                    myMemberPackage.SelectOne();

                    if (myMemberPackage.DtStartDate.IsNull)
                        throw new Exception("Member Package is yet been used. No need to extend");

                    myMemberPackage.DtExpiryDate = oldExpiryDate;
                    myMemberPackage.DtLastEdit = System.DateTime.Today;
                    myMemberPackage.NEmployeeID = User.EmployeeID;
                    //packageExt
                    packExtRow["dtStartDate"] = myMemberPackage.DtStartDate.Value;
                    packExtRow["dtEndDate"] =  myMemberPackage.DtExpiryDate.Value;
                    packExtRow["nDaysExtended"] = myMemberPackage.DtExpiryDate.Value.CompareTo(myMemberPackage.DtStartDate.Value);

                    packageExt.SaveData(packageExtensionTable);
                    myMemberPackage.Update();

                    connProvider.CommitTransaction();
                }
                catch (Exception ex)
                {
                    connProvider.RollbackTransaction("SaveExtension");
                    throw ex;
                }
                finally
                {
                    if (connProvider.CurrentTransaction != null)
                        connProvider.CurrentTransaction.Dispose();
                    if (connProvider.DBConnection != null)
                    {
                        if (connProvider.DBConnection.State == ConnectionState.Open)
                            connProvider.DBConnection.Close();
                    }
                    myMemberPackage.MainConnactionIsCreatedLocal = true;
                    packageExt.MainConnactionIsCreatedLocal = true;
                }
            }
        }