示例#1
0
        public void PrepareDataToDataset(ExpenseDataSet ds, long perdiemId)
        {
            ExpenseDataSet.FnExpensePerdiemRow  row    = ds.FnExpensePerdiem.FindByExpensePerdiemID(perdiemId);
            ExpenseDataSet.FnExpenseDocumentRow expRow = ds.FnExpenseDocument.FindByExpenseID(row.ExpenseID);
            string PerdiemType = expRow.ExpenseType;

            IList <FnExpensePerdiemItem> perdiemItemList = ScgeAccountingQueryProvider.FnExpensePerdiemItemQuery.GetPerdiemItemByPerdiemID(perdiemId);

            decimal totalNetDay = 0;

            foreach (FnExpensePerdiemItem item in perdiemItemList)
            {
                // Set data to perdiem item row in Dataset.
                ExpenseDataSet.FnExpensePerdiemItemRow itemRow = ds.FnExpensePerdiemItem.NewFnExpensePerdiemItemRow();
                itemRow.PerdiemItemID    = item.PerdiemItemID;
                itemRow.ExpensePerdiemID = item.ExpensePerdiem.ExpensePerdiemID;
                itemRow.FromDate         = item.FromDate.Value;
                itemRow.FromTime         = ConvertDateTime(item.FromDate.Value, item.FromTime.Value);
                itemRow.ToDate           = item.ToDate.Value;
                itemRow.ToTime           = ConvertDateTime(item.ToDate, item.ToTime);
                itemRow.AdjustedDay      = (decimal)item.AdjustedDay;
                itemRow.NetDay           = (decimal)item.NetDay;

                totalNetDay += itemRow.NetDay;

                if (PerdiemType == ZoneType.Foreign)
                {
                    itemRow.HalfDay = (decimal)item.HalfDay;
                    itemRow.FullDay = (decimal)item.FullDay;
                    itemRow.SetCountryIDNull();
                    if (item.CountryID != null)
                    {
                        itemRow.CountryID = item.CountryID.Value;
                    }
                    itemRow.SetCountryZoneIDNull();
                    if (item.CountryZoneID != null)
                    {
                        itemRow.CountryZoneID = item.CountryZoneID.Value;
                    }
                }

                itemRow.Remark = item.Remark;


                itemRow.Active  = item.Active;
                itemRow.CreBy   = item.CreBy;
                itemRow.CreDate = item.CreDate;
                itemRow.UpdBy   = item.UpdBy;
                itemRow.UpdDate = item.UpdDate;
                itemRow.UpdPgm  = item.UpdPgm;

                // Add perdiem item row to documentDataset.
                ds.FnExpensePerdiemItem.AddFnExpensePerdiemItemRow(itemRow);
            }

            if (PerdiemType == ZoneType.Domestic)
            {
                row.TotalFullDayPerdiem       = totalNetDay;
                row.TotalFullDayPerdiemAmount = totalNetDay * row.FullDayPerdiemRate;
            }
        }
示例#2
0
        public void UpdateExpensePerdiemItemTransaction(FnExpensePerdiemItem item, Guid txId)
        {
            Spring.Validation.ValidationErrors errors = new Spring.Validation.ValidationErrors();

            string PerdiemType = GetPerdiemType(item, txId);

            if (!item.FromDate.HasValue)
            {
                errors.AddError("PerdiemItem.Error", new Spring.Validation.ErrorMessage("RequiredFromDate"));
            }
            if (!item.FromTime.HasValue)
            {
                errors.AddError("PerdiemItem.Error", new Spring.Validation.ErrorMessage("RequiredFromTime"));
            }
            if (!item.ToDate.HasValue)
            {
                errors.AddError("PerdiemItem.Error", new Spring.Validation.ErrorMessage("RequiredToDate"));
            }
            if (!item.ToTime.HasValue)
            {
                errors.AddError("PerdiemItem.Error", new Spring.Validation.ErrorMessage("RequiredToTime"));
            }
            if (item.FromDate.HasValue && item.FromTime.HasValue && item.ToDate.HasValue && item.ToTime.HasValue)
            {
                DateTime FromDateTime = ConvertDateTime(item.FromDate, item.FromTime);
                DateTime ToDateTime   = ConvertDateTime(item.ToDate, item.ToTime);

                if (ToDateTime < FromDateTime)
                {
                    errors.AddError("PerdiemItem.Error", new Spring.Validation.ErrorMessage("RequiredToDateIncorrect"));
                }
                else
                {
                    if (CalculateNetDay(CalculateTotalDay(FromDateTime, ToDateTime, PerdiemType), item.AdjustedDay) < 0)
                    {
                        errors.AddError("PerdiemItem.Error", new Spring.Validation.ErrorMessage("Invalid Date Information"));
                    }
                    if (PerdiemType == ZoneType.Foreign)
                    {
                        if (item.HalfDay < 0)
                        {
                            errors.AddError("PerdiemItem.Error", new Spring.Validation.ErrorMessage("Invalid Date Information"));
                        }
                        else
                        {
                            if (CalculateFullDay(CalculateNetDay(CalculateTotalDay(FromDateTime, ToDateTime, PerdiemType), item.AdjustedDay), item.HalfDay) < 0)
                            {
                                errors.AddError("PerdiemItem.Error", new Spring.Validation.ErrorMessage("Invalid Date Information"));
                            }
                        }
                    }
                }
            }
            if (PerdiemType == ZoneType.Foreign)
            {
                if (!item.CountryID.HasValue && string.IsNullOrEmpty(item.Remark))
                {
                    errors.AddError("PerdiemItem.Error", new Spring.Validation.ErrorMessage("Remark is required"));
                }
            }
            if (!errors.IsEmpty)
            {
                throw new ServiceValidationException(errors);
            }

            ExpenseDataSet ds = (ExpenseDataSet)TransactionService.GetDS(txId);

            ExpenseDataSet.FnExpensePerdiemItemRow row = ds.FnExpensePerdiemItem.FindByPerdiemItemID(item.PerdiemItemID);

            row.ExpensePerdiemID = item.ExpensePerdiem.ExpensePerdiemID;
            row.FromDate         = item.FromDate.Value;
            row.FromTime         = ConvertDateTime(item.FromDate.Value, item.FromTime.Value);
            row.ToDate           = item.ToDate.Value;
            row.ToTime           = ConvertDateTime(item.ToDate, item.ToTime);
            row.AdjustedDay      = (decimal)item.AdjustedDay;
            row.NetDay           = (decimal)CalculateNetDay(CalculateTotalDay(row.FromTime, row.ToTime, PerdiemType), item.AdjustedDay);

            //for Domestic and Foreign
            row.Remark = item.Remark;

            if (PerdiemType == ZoneType.Foreign)
            {
                row.HalfDay = (decimal)item.HalfDay;
                row.FullDay = (decimal)CalculateFullDay((double)row.NetDay, (double)row.HalfDay);

                if (item.CountryID.HasValue)
                {
                    row.CountryID = item.CountryID.Value;
                }
                else
                {
                    row.SetCountryIDNull();
                }
                row.CountryZoneID = item.CountryZoneID.Value;
            }

            row.UpdBy   = UserAccount.UserID;
            row.UpdDate = DateTime.Now.Date;
            row.UpdPgm  = item.UpdPgm;
            row.Active  = true;
            FnExpensePerdiemService.UpdateExpensePerdiemCalculateTransaction(item.ExpensePerdiem.ExpensePerdiemID, txId);
        }