コード例 #1
0
        public long AddNewExpenseDocumentOnTransaction(FnExpenseDocument exp, Guid txId)
        {
            ExpenseDataSet ds = (ExpenseDataSet)TransactionService.GetDS(txId);

            ExpenseDataSet.DocumentRow docRow = ds.Document.NewDocumentRow();


            ExpenseDataSet.FnExpenseDocumentRow expRow = ds.FnExpenseDocument.NewFnExpenseDocumentRow();
            expRow.DocumentID = docRow.DocumentID;
            ds.FnExpenseDocument.AddFnExpenseDocumentRow(expRow);

            return(expRow.ExpenseID);
        }
コード例 #2
0
        public void UpdateExpenseDocumentOnTransaction(FnExpenseDocument exp, Guid txId)
        {
            ExpenseDataSet ds = (ExpenseDataSet)TransactionService.GetDS(txId);

            if (exp.Document != null)
            {
                ExpenseDataSet.DocumentRow docRow = ds.Document.FindByDocumentID(exp.Document.DocumentID);
                docRow.BeginEdit();
                docRow.DocumentNo = exp.Document.DocumentNo;
                //docRow.DocumentStatus = exp.Document.DocumentStatus;
                docRow.Subject = exp.Document.Subject;
                docRow.Memo    = exp.Document.Memo;
                if (exp.Document.DocumentType != null)
                {
                    docRow.DocumentTypeID = exp.Document.DocumentType.DocumentTypeID;
                }
                if (exp.Document.CompanyID != null)
                {
                    docRow.CompanyID = exp.Document.CompanyID.CompanyID;
                }
                if (exp.Document.CreatorID != null)
                {
                    docRow.CreatorID = exp.Document.CreatorID.Userid;
                }
                if (exp.Document.RequesterID != null)
                {
                    docRow.RequesterID = exp.Document.RequesterID.Userid;
                }
                if (exp.Document.ReceiverID != null)
                {
                    docRow.ReceiverID = exp.Document.ReceiverID.Userid;
                }
                if (exp.Document.ApproverID != null)
                {
                    docRow.ApproverID = exp.Document.ApproverID.Userid;
                }

                docRow.Active  = exp.Document.Active;
                docRow.CreDate = exp.CreDate;
                docRow.CreBy   = exp.CreBy;
                docRow.UpdDate = exp.UpdDate;
                docRow.UpdBy   = exp.UpdBy;
                docRow.UpdPgm  = exp.UpdPgm;

                docRow.EndEdit();
                docRow.AcceptChanges();
            }
            ExpenseDataSet.FnExpenseDocumentRow expRow = ds.FnExpenseDocument.FindByExpenseID(exp.ExpenseID);
            expRow.BeginEdit();

            if (exp.ServiceTeam != null)
            {
                expRow.ServiceTeamID = exp.ServiceTeam.ServiceTeamID;
            }
            if (exp.PB != null)
            {
                expRow.PBID = exp.PB.Pbid;
            }
            expRow.PaymentType  = exp.PaymentType;
            expRow.TotalAdvance = (decimal)exp.TotalAdvance;
            expRow.TotalExpense = (decimal)exp.TotalExpense;
            expRow.CreDate      = exp.CreDate;
            expRow.CreBy        = exp.CreBy;
            expRow.UpdDate      = exp.UpdDate;
            expRow.UpdBy        = exp.UpdBy;
            expRow.UpdPgm       = exp.UpdPgm;

            expRow.EndEdit();
            expRow.AcceptChanges();
        }
コード例 #3
0
        public void UpdateExpenseMileageOnTransaction(FnExpenseMileage expenseMileage, Guid txId)
        {
            Spring.Validation.ValidationErrors errors = new Spring.Validation.ValidationErrors();
            ExpenseDataSet ds         = (ExpenseDataSet)TransactionService.GetDS(txId);
            long           documentId = 0;

            if (expenseMileage.Expense != null)
            {
                ExpenseDataSet.FnExpenseDocumentRow expRow = ds.FnExpenseDocument.FindByExpenseID(expenseMileage.Expense.ExpenseID);
                documentId = expRow == null ? 0 : expRow.DocumentID;
            }

            if (expenseMileage.CarLicenseNo.Length.Equals(0))
            {
                errors.AddError("Mileage.Error", new Spring.Validation.ErrorMessage("RequiredCarLicenseNo"));
            }

            if (expenseMileage.Owner.Equals(OwnerMileage.Employee))
            {
                if (expenseMileage.First100KmRate.Equals((double)0))
                {
                    errors.AddError("Mileage.Error", new Spring.Validation.ErrorMessage("RequiredFirst100KmOverZero"));
                }
                if (expenseMileage.Exceed100KmRate.Equals((double)0))
                {
                    errors.AddError("Mileage.Error", new Spring.Validation.ErrorMessage("RequiredExceed100KmOverZero"));
                }
            }
            else
            {
                if (expenseMileage.TotalAmount.Equals((double)0))
                {
                    errors.AddError("Mileage.Error", new Spring.Validation.ErrorMessage("RequiredTotalAmountOverZero"));
                }
            }

            if (!expenseMileage.Owner.Equals(OwnerMileage.Company) || !expenseMileage.TypeOfCar.Equals(TypeOfCar.Pickup))
            {
                // Validate CostCenter.
                if (expenseMileage.CostCenter == null)
                {
                    errors.AddError("Mileage.Error", new Spring.Validation.ErrorMessage("RequiredCostCenter"));
                }
                else
                {
                    if (ScgDbQueryProvider.DbCostCenterQuery.FindByIdentity(expenseMileage.CostCenter.CostCenterID) == null)
                    {
                        errors.AddError("Mileage.Error", new Spring.Validation.ErrorMessage("RequiredCostCenter"));
                    }
                }

                // Validate Account.
                if (expenseMileage.Account == null)
                {
                    errors.AddError("Mileage.Error", new Spring.Validation.ErrorMessage("RequiredAccountID"));
                }
                else
                {
                    if (ScgDbQueryProvider.DbAccountQuery.FindByIdentity(expenseMileage.Account.AccountID) == null)
                    {
                        errors.AddError("Mileage.Error", new Spring.Validation.ErrorMessage("RequiredAccountID"));
                    }
                }
            }
            if (!errors.IsEmpty)
            {
                throw new ServiceValidationException(errors);
            }

            ExpenseDataSet.FnExpenseMileageRow row = ds.FnExpenseMileage.FindByExpenseMileageID(expenseMileage.ExpenseMileageID);

            row.BeginEdit();
            if (expenseMileage.Expense != null)
            {
                row.ExpenseID = expenseMileage.Expense.ExpenseID;
            }
            row.Owner                 = expenseMileage.Owner;
            row.CarLicenseNo          = expenseMileage.CarLicenseNo;
            row.TypeOfCar             = expenseMileage.TypeOfCar;
            row.PermissionNo          = expenseMileage.PermissionNo;
            row.HomeToOfficeRoundTrip = (decimal)expenseMileage.HomeToOfficeRoundTrip;
            row.PrivateUse            = (decimal)expenseMileage.PrivateUse;
            row.IsOverrideLevel       = expenseMileage.IsOverrideLevel;
            if (expenseMileage.OverrideCompanyId != null)
            {
                row.OverrideCompanyId = (long)expenseMileage.OverrideCompanyId;
            }
            if (expenseMileage.CurrentCompanyId != null)
            {
                row.CurrentCompanyId = (long)expenseMileage.CurrentCompanyId;
            }

            row.OverrideLevelRemark           = expenseMileage.OverrideLevelRemark;
            row.OverrideUserPersonalLevelCode = expenseMileage.OverrideUserPersonalLevelCode;
            row.CurrentUserPersonalLevelCode  = expenseMileage.CurrentUserPersonalLevelCode;

            row.First100KmRate    = (decimal)expenseMileage.First100KmRate;
            row.Exceed100KmRate   = (decimal)expenseMileage.Exceed100KmRate;
            row.HelpingAmount     = (decimal)expenseMileage.HelpingAmount;
            row.OverHelpingAmount = (decimal)expenseMileage.OverHelpingAmount;

            row.TotalAmount = (decimal)expenseMileage.TotalAmount;

            if (expenseMileage.CostCenter != null)
            {
                row.CostCenterID = expenseMileage.CostCenter.CostCenterID;
            }
            else
            {
                row.SetCostCenterIDNull();
            }

            if (expenseMileage.Account != null)
            {
                row.AccountID = expenseMileage.Account.AccountID;
            }
            else
            {
                row.SetAccountIDNull();
            }

            if (expenseMileage.IO != null)
            {
                row.IOID = expenseMileage.IO.IOID;
            }
            else
            {
                row.SetIOIDNull();
            }

            row.CreDate = DateTime.Now;
            row.CreBy   = UserAccount.UserID;
            row.UpdDate = DateTime.Now;
            row.UpdBy   = UserAccount.UserID;
            row.UpdPgm  = UserAccount.CurrentProgramCode;
            row.Active  = true;
            row.EndEdit();

            UpdateMileageSummary(txId, expenseMileage);

            ExpenseDataSet.FnExpenseMileageRow mileageRow = ds.FnExpenseMileage.FindByExpenseMileageID(expenseMileage.ExpenseMileageID);

            ExpenseDataSet.FnExpenseDocumentRow expenseRow = ds.FnExpenseDocument.FindByExpenseID(row.ExpenseID);
            long requesterId = 0;

            if (expenseRow != null)
            {
                ExpenseDataSet.DocumentRow docRow = ds.Document.FindByDocumentID(expenseRow.DocumentID);
                if (docRow != null)
                {
                    requesterId = docRow.RequesterID;
                }
            }
            long invoiceId = 0;

            DataRow[]        invoiceRows = ds.FnExpenseInvoice.Select(String.Format("InvoiceDocumentType = '{0}'", InvoiceType.Mileage));
            FnExpenseInvoice invoice     = new FnExpenseInvoice();

            string accountCode = string.Empty;
            SuUser requester   = SS.SU.Query.QueryProvider.SuUserQuery.FindByIdentity(requesterId);

            if (expenseMileage.Owner.Equals(OwnerMileage.Employee) || (expenseMileage.Owner.Equals(OwnerMileage.Company) && !expenseMileage.TypeOfCar.Equals(TypeOfCar.Pickup)))
            {
                if (invoiceRows.Length > 0)
                {
                    foreach (DataRow inv in invoiceRows)
                    {
                        invoiceId = inv.Field <long>("InvoiceID");
                        DataRow[] invoiceItemRows = ds.FnExpenseInvoiceItem.Select(String.Format("InvoiceID = {0} ", invoiceId));
                        foreach (DataRow item in invoiceRows)
                        {
                            item.Delete();
                        }
                        inv.Delete();
                    }
                }
            }

            //Add empty invoice
            invoice.InvoiceDocumentType = InvoiceType.Mileage;
            invoice.Expense             = expenseMileage.Expense;
            DbCostCenter cost         = null;
            string       expenseGroup = "0";

            if (!mileageRow.IsCostCenterIDNull())
            {
                cost         = ScgDbQueryProvider.DbCostCenterQuery.FindByIdentity(mileageRow.CostCenterID);
                expenseGroup = (cost == null ? string.Empty : cost.CostCenterCode.Substring(3, 1).Equals("0") ? "0" : "1");
            }

            DbInternalOrder io = null;

            if (expenseMileage.IO != null)
            {
                io = ScgDbQueryProvider.DbIOQuery.FindByIdentity(expenseMileage.IO.IOID);
            }

            if (expenseMileage.Owner.Equals(OwnerMileage.Employee))
            {
                double total = (double)mileageRow.TotalAmount;
                invoice.TotalAmount     = total;
                invoice.TotalBaseAmount = total;
                invoice.NetAmount       = total;
                invoiceId = FnExpenseInvoiceService.AddInvoiceOnTransaction(invoice, txId);

                invoice.InvoiceID = invoiceId;

                FnExpenseInvoiceItem invoiceItemGov   = new FnExpenseInvoiceItem();
                FnExpenseInvoiceItem invoiceItemExtra = new FnExpenseInvoiceItem();

                invoiceItemGov.Invoice   = invoice;
                invoiceItemExtra.Invoice = invoice;

                invoiceItemGov.CostCenter = expenseMileage.CostCenter;
                invoiceItemGov.Account    = expenseMileage.Account;
                invoiceItemGov.IO         = expenseMileage.IO;

                invoiceItemExtra.CostCenter = expenseMileage.CostCenter;
                if (io != null && !string.IsNullOrEmpty(io.IONumber))
                {
                    string ioType = io.IONumber.Substring(4, 2);
                    if (ioType.Contains("02") || ioType.Contains("03") || ioType.Contains("04") || ioType.Contains("09"))
                    {
                        invoiceItemExtra.IO = null;
                    }
                    else
                    {
                        invoiceItemExtra.IO = io;
                    }
                }

                invoiceItemExtra.Account = ScgDbQueryProvider.DbAccountQuery.FindAccountByAccountCodeExpenseGroup(ParameterServices.AccountMileageExtra, null);

                //switch (expenseGroup)
                //{
                //    case "0":
                //        invoiceItemExtra.Account = ScgDbQueryProvider.DbAccountQuery.FindAccountByAccountCodeExpenseGroup(ParameterServices.AccountMileageOfficeExtra, expenseGroup, null);
                //        break;
                //    case "1":
                //        invoiceItemExtra.Account = ScgDbQueryProvider.DbAccountQuery.FindAccountByAccountCodeExpenseGroup(ParameterServices.AccountMileageFactoryExtra, expenseGroup, null);
                //        break;

                //    default:
                //        break;
                //}
                if (mileageRow.HelpingAmount <= mileageRow.TotalAmount)
                {
                    invoiceItemGov.Amount = (double)mileageRow.HelpingAmount;
                }
                else if (mileageRow.HelpingAmount > mileageRow.TotalAmount)
                {
                    invoiceItemGov.Amount = (double)mileageRow.TotalAmount;
                }

                invoiceItemExtra.Amount = (double)mileageRow.OverHelpingAmount;
                if (invoiceItemGov.Amount > 0)
                {
                    FnExpenseInvoiceItemService.AddMileageInvoiceItem(invoiceItemGov, txId);
                }

                if (invoiceItemExtra.Amount > 0)
                {
                    FnExpenseInvoiceItemService.AddMileageInvoiceItem(invoiceItemExtra, txId);
                }
            }
            else if (expenseMileage.Owner.Equals(OwnerMileage.Company) && (!expenseMileage.TypeOfCar.Equals(TypeOfCar.Pickup)))
            {
                invoice.TotalAmount     = (double)mileageRow.HelpingAmount;
                invoice.TotalBaseAmount = (double)mileageRow.HelpingAmount;
                invoice.NetAmount       = (double)mileageRow.HelpingAmount;
                invoiceId = FnExpenseInvoiceService.AddInvoiceOnTransaction(invoice, txId);

                FnExpenseInvoiceItem invoiceItem = new FnExpenseInvoiceItem();

                invoice.InvoiceID      = invoiceId;
                invoiceItem.Invoice    = invoice;
                invoiceItem.CostCenter = expenseMileage.CostCenter;
                invoiceItem.Account    = expenseMileage.Account;
                invoiceItem.IO         = expenseMileage.IO;

                //switch (expenseGroup)
                //{
                //    case "0":
                //        accountCode = ParameterServices.AccountMileageOfficeCompany;
                //        break;
                //    case "1":

                //        accountCode = ParameterServices.AccountMileageFactoryCompany;
                //        break;

                //    default:
                //        break;
                //}

                //invoiceItem.Account = ScgDbQueryProvider.DbAccountQuery.FindAccountByAccountCodeExpenseGroup(accountCode, expenseGroup, null);
                invoiceItem.Amount = (double)mileageRow.HelpingAmount;
                FnExpenseInvoiceItemService.AddMileageInvoiceItem(invoiceItem, txId);
            }
        }
コード例 #4
0
        public void ValidateInvoiceItem(Guid txId, long expenseId)
        {
            Spring.Validation.ValidationErrors errors = new Spring.Validation.ValidationErrors();

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

            ExpenseDataSet.FnExpenseDocumentRow      expRow   = expDs.FnExpenseDocument.FindByExpenseID(expenseId);
            ExpenseDataSet.DocumentRow               docRow   = expDs.Document.FindByDocumentID(expRow.DocumentID);
            ExpenseDataSet.FnExpenseInvoiceItemRow[] itemRows = (ExpenseDataSet.FnExpenseInvoiceItemRow[])expDs.FnExpenseInvoiceItem.Select();

            foreach (ExpenseDataSet.FnExpenseInvoiceItemRow row in itemRows)
            {
                string accountCode = string.Empty;
                if (!row.IsIOIDNull())
                {
                    DbInternalOrder io = ScgDbQueryProvider.DbIOQuery.FindByIdentity(row.IOID);
                    if (io == null || !io.CompanyID.HasValue || io.CompanyID.Value != docRow.CompanyID)
                    {
                        if (io == null)
                        {
                            io = new DbInternalOrder()
                            {
                                IONumber = "Unknown"
                            };
                        }
                        errors.AddError("Provider.Error", new Spring.Validation.ErrorMessage("InternalOrder_Is_Invalid", new object[] { io.IONumber }));
                    }
                }
                if (!row.IsAccountIDNull())
                {
                    DbAccount account = ScgDbQueryProvider.DbAccountQuery.FindByIdentity(row.AccountID);


                    IList <VOAccountCompany> accountList = ScgDbQueryProvider.DbAccountCompanyQuery.FindAccountCompany(docRow.CompanyID, row.AccountID);
                    if (account == null || accountList.Count == 0)
                    {
                        if (account == null)
                        {
                            account = new DbAccount()
                            {
                                AccountCode = "Unknown"
                            };
                        }
                        errors.AddError("Provider.Error", new Spring.Validation.ErrorMessage("ExpenseCode_Is_Invalid", new object[] { account.AccountCode }));
                    }
                    accountCode = account.AccountCode;
                }
                if (!row.IsCostCenterIDNull())
                {
                    DbCostCenter cost = ScgDbQueryProvider.DbCostCenterQuery.FindByIdentity(row.CostCenterID);

                    if (cost == null || cost.CompanyID == null || cost.CompanyID.CompanyID != docRow.CompanyID)
                    {
                        errors.AddError("Provider.Error", new Spring.Validation.ErrorMessage("CostCenter_Is_Invalid", new object[] { cost.CostCenterCode }));
                    }
                    else
                    {
                        if (!string.IsNullOrEmpty(accountCode))
                        {
                            DbAccount ac = ScgDbQueryProvider.DbAccountQuery.FindAccountByAccountCodeExpenseGroup(accountCode, null);
                            if (ac == null)
                            {
                                errors.AddError("Provider.Error", new Spring.Validation.ErrorMessage("ExpenseCode_Is_Invalid_With_Costcenter", new object[] { accountCode, cost.CostCenterCode }));
                            }
                        }
                    }
                }
            }

            if (!errors.IsEmpty)
            {
                throw new ServiceValidationException(errors);
            }
        }