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); }
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(); }
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); } }
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); } }