//public static string SaveSuspendedDuesofCustomer(int CustID,int EmpId) //{ // decimal pendingdues= BL_Customer.GetCustomerBalance(CustID)??0; // if (pendingdues > 0) // { // BO_ReceiptVoucher _rvoucher = new BO_ReceiptVoucher(); // _rvoucher.rCustomerId = CustID; // _rvoucher.rRecived = pendingdues; // _rvoucher.empID = EmpId; // _rvoucher.rComments = "Clear Pending Dues of Subscription Customer"; // _rvoucher.rActivityDate = BL_Common.GetDatetime(); // _rvoucher.TypeId = 2; // _rvoucher.rbalance = pendingdues;//its not enter in db , sets it for Acc REC entry // SaveReceiptVoucher(_rvoucher); // } // return "success"; //} public static string SaveReceiptVoucher(BO_ReceiptVoucher _rvoucher) { using (AprosysAccountingEntities db = new AprosysAccountingEntities()) { using (var transaction = db.Database.BeginTransaction()) { try { int transType = (int)Constants.TransactionTypes.ReceiptVoucher; _rvoucher.invoiceNo = Util.GetNextVoucher(transType); bool isPostPaid = _rvoucher.TypeId == 2 ? true : false; //Parent Entry var GLParent = new Acc_GL() { CoaId = 0, UserId = _rvoucher.empID, Comments = _rvoucher.rComments, CustId = _rvoucher.rCustomerId, ActivityTimestamp = _rvoucher.rActivityDate, TranTypeId = transType, Debit = _rvoucher.rRecived, Credit = _rvoucher.rRecived, InvoiceNo = _rvoucher.invoiceNo, IsActive = true, IsPostpaid = isPostPaid, CreatedBy = _rvoucher.empID, ModifiedBy = _rvoucher.empID, CreatedDate = DateTime.Now, ModifiedDate = DateTime.Now }; string InvoiceID = GLParent.InvoiceNo; db.Acc_GL.Add(GLParent); db.SaveChanges(); //Acc Receiveable for Type=1 , Subscrtiption Receiveable=2 if (_rvoucher.TypeId == 1 || (_rvoucher.TypeId == 2 && _rvoucher.rbalance != 0)) { //Acc Receivable var GLpaid = new Acc_GL() { TranId = GLParent.GlId, UserId = _rvoucher.empID, CoaId = 10, CustId = _rvoucher.rCustomerId, ActivityTimestamp = _rvoucher.rActivityDate, TranTypeId = transType, InvoiceNo = _rvoucher.invoiceNo, IsActive = true, Credit = _rvoucher.rRecived, IsPostpaid = isPostPaid, CreatedBy = _rvoucher.empID, ModifiedBy = _rvoucher.empID, CreatedDate = DateTime.Now, ModifiedDate = DateTime.Now }; db.Acc_GL.Add(GLpaid); } else { //Subscription Sales var GLSalesSub = new Acc_GL() { TranId = GLParent.GlId, UserId = _rvoucher.empID, CoaId = 100, CustId = _rvoucher.rCustomerId, ActivityTimestamp = _rvoucher.rActivityDate, TranTypeId = transType, InvoiceNo = _rvoucher.invoiceNo, IsActive = true, Credit = _rvoucher.rRecived, IsPostpaid = isPostPaid, CreatedBy = _rvoucher.empID, ModifiedBy = _rvoucher.empID, CreatedDate = DateTime.Now, ModifiedDate = DateTime.Now }; db.Acc_GL.Add(GLSalesSub); } //Cash Entry var GLCash = new Acc_GL() { TranId = GLParent.GlId, UserId = _rvoucher.empID, CoaId = 11, CustId = _rvoucher.rCustomerId, ActivityTimestamp = _rvoucher.rActivityDate, TranTypeId = transType, InvoiceNo = _rvoucher.invoiceNo, IsActive = true, Debit = _rvoucher.rRecived, IsPostpaid = isPostPaid, CreatedBy = _rvoucher.empID, ModifiedBy = _rvoucher.empID, CreatedDate = DateTime.Now, ModifiedDate = DateTime.Now }; db.Acc_GL.Add(GLCash); db.SaveChanges(); transaction.Commit(); return(InvoiceID); } catch (Exception) { transaction.Rollback(); throw; } } } }
public static string InsertEquityInfo(BO_Equity obj) { using (AprosysAccountingEntities db = new AprosysAccountingEntities()) { using (var transaction = db.Database.BeginTransaction()) { try { int transType = (int)Constants.TransactionTypes.Equity; obj.invoiceNo = Util.GetNextVoucher(transType); //obj.transDate = DateTime.Now; //Parent Entry var GLParent = new Acc_GL() { CoaId = 0, UserId = obj.userId, Debit = Math.Abs(obj.amount), Credit = Math.Abs(obj.amount), ActivityTimestamp = obj.activityTime, TranTypeId = transType, InvoiceNo = obj.invoiceNo, IsActive = true, CreatedBy = obj.userId, CreatedDate = DateTime.Now, ModifiedBy = obj.userId, ModifiedDate = DateTime.Now }; db.Acc_GL.Add(GLParent); db.SaveChanges(); //Bank Entry if (obj.accountId > 0) { var GLBank = new Acc_GL() { TranId = GLParent.GlId, CoaId = obj.accountId, UserId = obj.userId, Debit = (obj.isdeposit == true ? obj.amount : 0), Credit = (obj.isdeposit == false ? obj.amount : 0), ActivityTimestamp = obj.activityTime, TranTypeId = transType, InvoiceNo = obj.invoiceNo, IsActive = true, CreatedBy = obj.userId, CreatedDate = DateTime.Now, ModifiedBy = obj.userId, ModifiedDate = DateTime.Now }; GLBank.Comments = obj.comments; db.Acc_GL.Add(GLBank); } else { ///Cash Entry var GLBank = new Acc_GL() { TranId = GLParent.GlId, CoaId = 11, UserId = obj.userId, Debit = (obj.isdeposit == true ? obj.amount : 0), Credit = (obj.isdeposit == false ? obj.amount : 0), ActivityTimestamp = obj.activityTime, TranTypeId = transType, InvoiceNo = obj.invoiceNo, IsActive = true, CreatedBy = obj.userId, CreatedDate = DateTime.Now, ModifiedBy = obj.userId, ModifiedDate = DateTime.Now }; GLBank.Comments = obj.comments; db.Acc_GL.Add(GLBank); } //Investor Entry var GLRecvable = new Acc_GL() { TranId = GLParent.GlId, CoaId = obj.investorId, UserId = obj.userId, Debit = (obj.isdeposit == false ? obj.amount : 0), Credit = (obj.isdeposit == true ? obj.amount : 0), ActivityTimestamp = obj.activityTime, TranTypeId = transType, InvoiceNo = obj.invoiceNo, IsActive = true, CreatedBy = obj.userId, CreatedDate = DateTime.Now, ModifiedBy = obj.userId, ModifiedDate = DateTime.Now }; db.Acc_GL.Add(GLRecvable); db.SaveChanges(); transaction.Commit(); return("success"); } catch { transaction.Rollback(); throw; } } } }
public static string SaveSalesReturn(BO_SalesReturn salesReturn, int empId) { string InvoiceNo; BO_LineItems lineItem = null; BO_SaleInvoice obj = null; var orderDetails = GetOrderDetailsByInvoiceNo(salesReturn.InvoiceNo).FirstOrDefault(x => x.ItemCode == salesReturn.ItemCode); int? itemId = orderDetails.ItemId; var quantity = salesReturn.Quantity; var unitPrice = orderDetails.UnitPrice * (-1); var amount = orderDetails.UnitPrice * (-1 * quantity); var tex = orderDetails.TAX; obj = new BO_SaleInvoice(); obj.items = new List <BO_LineItems>(); obj.comments = salesReturn.Comments; obj.empID = empId; obj.invoiceNo = orderDetails.InvoiceNo; lineItem = new BO_LineItems() { amount = amount, unitPrice = unitPrice, qty = quantity, itemID = itemId ?? 0, isServiceItem = false, glid = 0, coaID = 0, tax = tex, }; obj.items.Add(lineItem); obj.empID = empId; obj.saleDate = DateTime.Now; obj.netAmount = amount ?? 0m; obj.paid = amount ?? 0; using (AprosysAccountingEntities db = new AprosysAccountingEntities()) { Acc_GL GLPurchases = db.Acc_GL.FirstOrDefault(x => (x.IsActive ?? false) && x.CoaId == 6 && x.ItemId == itemId.Value && (x.TranTypeId == 1 || x.TranTypeId == 7)); GLPurchases.QuantityBalance = GLPurchases.QuantityBalance + quantity; var itmTransaction = db.Acc_GL.Where(x => (x.ItemId == itemId) && (x.InvoiceNo == salesReturn.InvoiceNo)); foreach (var item in itmTransaction) { //Comment for sales return goes here. if (item.InvoiceNo == salesReturn.InvoiceNo && item.ItemId == itemId) { } //item.Quantity = item.Quantity - quantity; } db.SaveChanges(); } InvoiceNo = SaveSalesReturn(obj); return(InvoiceNo); }
public static string InsertBankTransfer(BO_Banks obj) { using (AprosysAccountingEntities db = new AprosysAccountingEntities()) { using (var transaction = db.Database.BeginTransaction()) { try { int transType = (int)Constants.TransactionTypes.BanksTransfer; obj.invoiceNo = Util.GetNextVoucher(transType); //obj.transDate = DateTime.Now; //Parent Entry var GLParent = new Acc_GL() { CoaId = 0, UserId = obj.empID, Debit = Math.Abs(obj.amount), Credit = Math.Abs(obj.amount), ActivityTimestamp = obj.transDate, TranTypeId = transType, InvoiceNo = obj.invoiceNo, IsActive = true, CreatedBy = obj.empID, CreatedDate = DateTime.Now, ModifiedBy = obj.empID, ModifiedDate = DateTime.Now }; db.Acc_GL.Add(GLParent); db.SaveChanges(); //Bank Entry var GLBank = new Acc_GL() { TranId = GLParent.GlId, CoaId = obj.bankID, UserId = obj.empID, Debit = obj.amount > 0 ? obj.amount : (decimal?)null, Credit = obj.amount < 0 ? Math.Abs(obj.amount) : (decimal?)null, ActivityTimestamp = obj.transDate, TranTypeId = transType, InvoiceNo = obj.invoiceNo, IsActive = true, CreatedBy = obj.empID, CreatedDate = DateTime.Now, ModifiedBy = obj.empID, ModifiedDate = DateTime.Now }; GLBank.Comments = obj.comment; db.Acc_GL.Add(GLBank); if (!string.IsNullOrEmpty(obj.documentId)) { // Receivable Entry var GLRecvable = new Acc_GL() { TranId = GLParent.GlId, CoaId = 11, UserId = obj.empID, Debit = obj.amount < 0 ? Math.Abs(obj.amount) : (decimal?)null, Credit = obj.amount > 0 ? obj.amount : (decimal?)null, ActivityTimestamp = obj.transDate, TranTypeId = transType, InvoiceNo = obj.invoiceNo, IsActive = true, CreatedBy = obj.empID, CreatedDate = DateTime.Now, ModifiedBy = obj.empID, ModifiedDate = DateTime.Now, DocumentId = obj.documentId }; db.Acc_GL.Add(GLRecvable); } else { //Cash Entry var GLCash = new Acc_GL() { TranId = GLParent.GlId, CoaId = 11, UserId = obj.empID, Debit = obj.amount < 0 ? Math.Abs(obj.amount) : (decimal?)null, Credit = obj.amount > 0 ? obj.amount : (decimal?)null, ActivityTimestamp = obj.transDate, TranTypeId = transType, InvoiceNo = obj.invoiceNo, IsActive = true, CreatedBy = obj.empID, CreatedDate = DateTime.Now, ModifiedBy = obj.empID, ModifiedDate = DateTime.Now }; db.Acc_GL.Add(GLCash); } db.SaveChanges(); transaction.Commit(); return("success"); } catch { transaction.Rollback(); throw; } } } }
public static string SavePaymentVoucher(BO_PaymentVoucher _rvoucher) { using (AprosysAccountingEntities db = new AprosysAccountingEntities()) { using (var transaction = db.Database.BeginTransaction()) { try { int transType = (int)Constants.TransactionTypes.PaymentVoucher; _rvoucher.invoiceNo = Util.GetNextVoucher(transType); var actingID = _rvoucher.expenseTypeCategory == 10 || _rvoucher.expenseTypeCategory == 12 ? _rvoucher.expensetype : 0; //Parent Entry var GLParent = new Acc_GL() { CoaId = 0, UserId = _rvoucher.empID, Comments = _rvoucher.comments, CustId = _rvoucher.expenseTypeCategory == 10 ? actingID : (int?)null, VendorId = _rvoucher.expenseTypeCategory == 12 ? actingID : (int?)null, Debit = _rvoucher.paid, Credit = _rvoucher.paid, ActivityTimestamp = _rvoucher.activityDate, TranTypeId = transType, InvoiceNo = _rvoucher.invoiceNo, IsActive = true, CreatedBy = _rvoucher.empID, CreatedDate = DateTime.Now, ModifiedBy = _rvoucher.empID, ModifiedDate = DateTime.Now }; db.Acc_GL.Add(GLParent); db.SaveChanges(); int _coaId = 11; if (_rvoucher.paymentMode == 2) { _coaId = _rvoucher.bankId ?? 0; } if (_rvoucher.paymentMode == 3) { _coaId = _rvoucher.bankTransferAccountId ?? 0; } var GLPaid = new Acc_GL() { TranId = GLParent.GlId, UserId = _rvoucher.empID, CoaId = _coaId, CustId = _rvoucher.expenseTypeCategory == 10 ? actingID : (int?)null, VendorId = _rvoucher.expenseTypeCategory == 12 ? actingID : (int?)null, Credit = _rvoucher.paid, ActivityTimestamp = _rvoucher.activityDate, TranTypeId = transType, InvoiceNo = _rvoucher.invoiceNo, IsActive = true, CreatedBy = _rvoucher.empID, CreatedDate = DateTime.Now, ModifiedBy = _rvoucher.empID, ModifiedDate = DateTime.Now, DocumentId = _rvoucher.checkNo }; db.Acc_GL.Add(GLPaid); var GLType = new Acc_GL() { TranId = GLParent.GlId, UserId = _rvoucher.empID, CoaId = _rvoucher.expenseTypeCategory == 10 || _rvoucher.expenseTypeCategory == 12 ? _rvoucher.expenseTypeCategory : _rvoucher.expensetype, CustId = _rvoucher.expenseTypeCategory == 10 ? actingID : (int?)null, VendorId = _rvoucher.expenseTypeCategory == 12 ? actingID : (int?)null, Debit = _rvoucher.paid, ActivityTimestamp = _rvoucher.activityDate, TranTypeId = transType, InvoiceNo = _rvoucher.invoiceNo, IsActive = true, CreatedBy = _rvoucher.empID, CreatedDate = DateTime.Now, ModifiedBy = _rvoucher.empID, ModifiedDate = DateTime.Now }; db.Acc_GL.Add(GLType); db.SaveChanges(); transaction.Commit(); return("success"); } catch (Exception) { transaction.Rollback(); throw; } } } }
public static string SaveBonus(BO_BonusRevenue br, int empID, System.Data.Entity.DbContextTransaction trans = null, AprosysAccountingEntities context = null) { AprosysAccountingEntities db = context == null ? new AprosysAccountingEntities() : context; var transaction = trans == null?db.Database.BeginTransaction() : trans; try { var editVal = trans != null?db.Acc_GL.Where(x => x.IsActive == false && x.CoaId == 0).Select(x => new { createdBy = x.CreatedBy.Value, createdDate = x.CreatedDate.Value }).FirstOrDefault() : new { createdBy = empID, createdDate = DateTime.Now }; if (br.TransactionId != null) { var update = db.Acc_GL.Where(x => (x.TranId == br.TransactionId || x.GlId == br.TransactionId) && x.IsActive == true).ToList(); foreach (var rows in update) { rows.IsActive = false; } db.SaveChanges(); } var GLParent = new Acc_GL() { CoaId = 5, UserId = empID, Comments = br.Misc, ActivityTimestamp = br.activityDate, Debit = br.BonusAmount, Credit = br.BonusAmount, TranTypeId = (int)TransactionTypes.Bonus, IsActive = true, CreatedBy = editVal.createdBy, CreatedDate = editVal.createdDate, ModifiedBy = empID, ModifiedDate = DateTime.Now }; db.Acc_GL.Add(GLParent); db.SaveChanges(); var GLDebitEntry = new Acc_GL() { TranId = GLParent.GlId, Comments = br.Misc, UserId = empID, CoaId = br.BankAccount != null?Convert.ToInt32(br.BankAccount) : (int?)null, ActivityTimestamp = br.activityDate, TranTypeId = (int)TransactionTypes.Bonus, IsActive = true, Debit = br.BonusAmount, CreatedBy = editVal.createdBy, CreatedDate = editVal.createdDate, ModifiedBy = empID, ModifiedDate = DateTime.Now }; db.Acc_GL.Add(GLDebitEntry); var GLCreditEntry = new Acc_GL() { TranId = GLParent.GlId, Comments = br.Misc, UserId = empID, CoaId = br.RevenueAccount != null?Convert.ToInt32(br.RevenueAccount) : (int?)null, ActivityTimestamp = br.activityDate, TranTypeId = (int)TransactionTypes.Bonus, IsActive = true, Credit = br.BonusAmount, CreatedBy = editVal.createdBy, CreatedDate = editVal.createdDate, ModifiedBy = empID, ModifiedDate = DateTime.Now }; db.Acc_GL.Add(GLCreditEntry); db.SaveChanges(); if (trans == null) { transaction.Commit(); db.Dispose(); transaction.Dispose(); } return("Success"); } catch (Exception ex) { transaction.Rollback(); throw; } }
public static string SaveStockOut(BO_StockIn so) { using (AprosysAccountingEntities db = new AprosysAccountingEntities()) { using (var transaction = db.Database.BeginTransaction()) { try { int transType = (int)Constants.TransactionTypes.StockOut; string invNo = Util.GetNextVoucher(transType); so.date = DateTime.Now; //Parent Entry var GLParent = new Acc_GL() { CoaId = 0, UserId = so.empID, Comments = so.comments, ActivityTimestamp = so.date, TranTypeId = transType, Debit = so.netAmount, Credit = so.netAmount, InvoiceNo = invNo, IsActive = true, CreatedBy = so.empID, CreatedDate = DateTime.Now, ModifiedBy = so.empID, ModifiedDate = DateTime.Now }; db.Acc_GL.Add(GLParent); db.SaveChanges(); foreach (var item in so.items) { //Stock Entry var GLStock = new Acc_GL() { TranId = GLParent.GlId, UserId = so.empID, CoaId = 6, ActivityTimestamp = so.date, TranTypeId = transType, InvoiceNo = invNo, IsActive = true, ItemId = item.itemID, Quantity = -item.qty, QuantityBalance = item.qty, UnitPrice = item.unitPrice, Credit = item.amount, CreatedBy = so.empID, CreatedDate = DateTime.Now, ModifiedBy = so.empID, ModifiedDate = DateTime.Now }; db.Acc_GL.Add(GLStock); } //Counter Entry var GLpayable = new Acc_GL() { TranId = GLParent.GlId, UserId = so.empID, CoaId = so.coaID, ActivityTimestamp = so.date, TranTypeId = transType, InvoiceNo = invNo, IsActive = true, Debit = so.netAmount, CreatedBy = so.empID, CreatedDate = DateTime.Now, ModifiedBy = so.empID, ModifiedDate = DateTime.Now }; db.Acc_GL.Add(GLpayable); db.SaveChanges(); transaction.Commit(); return("success"); } catch (Exception) { transaction.Rollback(); throw; } } } }
public static string EditReceiptVoucher(BO_ReceiptVoucher _rvoucher) { using (AprosysAccountingEntities db = new AprosysAccountingEntities()) { using (var transaction = db.Database.BeginTransaction()) { try { bool isPostPaid = _rvoucher.TypeId == 2 ? true : false; var rctL = db.Acc_GL.Where(x => x.InvoiceNo == _rvoucher.invoiceNo && x.IsActive == true).ToList(); rctL.ForEach(x => x.IsActive = false); var parent = rctL.Find(x => x.CoaId == 0); parent.Comments = _rvoucher.rComments; parent.CustId = _rvoucher.rCustomerId; parent.ActivityTimestamp = _rvoucher.rActivityDate; parent.Debit = _rvoucher.rRecived; parent.Credit = _rvoucher.rRecived; parent.InvoiceNo = _rvoucher.invoiceNo; parent.UserId = parent.ModifiedBy = _rvoucher.empID; parent.ModifiedDate = DateTime.Now; parent.IsActive = true; db.SaveChanges(); if (_rvoucher.TypeId == 1 || (_rvoucher.TypeId == 2 && _rvoucher.rbalance != 0)) { var paid = rctL.Find(x => x.CoaId == 10); if (paid != null) { paid.CustId = _rvoucher.rCustomerId; paid.ActivityTimestamp = _rvoucher.rActivityDate; paid.Credit = _rvoucher.rRecived; paid.UserId = paid.ModifiedBy = _rvoucher.empID; paid.ModifiedDate = DateTime.Now; paid.IsActive = true; } else { var GLpaid = new Acc_GL() { TranId = parent.GlId, UserId = _rvoucher.empID, CoaId = 10, CustId = _rvoucher.rCustomerId, ActivityTimestamp = _rvoucher.rActivityDate, TranTypeId = parent.TranTypeId, InvoiceNo = _rvoucher.invoiceNo, IsActive = true, Credit = _rvoucher.rRecived, IsPostpaid = isPostPaid, CreatedBy = _rvoucher.empID, ModifiedBy = _rvoucher.empID, CreatedDate = DateTime.Now, ModifiedDate = DateTime.Now }; db.Acc_GL.Add(GLpaid); } } else { var paid = rctL.Find(x => x.CoaId == 100); if (paid != null) { paid.CustId = _rvoucher.rCustomerId; paid.ActivityTimestamp = _rvoucher.rActivityDate; paid.Credit = _rvoucher.rRecived; paid.UserId = paid.ModifiedBy = _rvoucher.empID; paid.IsActive = true; paid.ModifiedDate = DateTime.Now; } else { var GLSalesSub = new Acc_GL() { TranId = parent.GlId, UserId = _rvoucher.empID, CoaId = 100, CustId = _rvoucher.rCustomerId, ActivityTimestamp = _rvoucher.rActivityDate, TranTypeId = parent.TranTypeId, InvoiceNo = _rvoucher.invoiceNo, IsActive = true, Credit = _rvoucher.rRecived, IsPostpaid = isPostPaid, CreatedBy = _rvoucher.empID, ModifiedBy = _rvoucher.empID, CreatedDate = DateTime.Now, ModifiedDate = DateTime.Now }; db.Acc_GL.Add(GLSalesSub); } } var cash = rctL.Find(x => x.CoaId == 11); cash.CustId = _rvoucher.rCustomerId; cash.ActivityTimestamp = _rvoucher.rActivityDate; cash.IsActive = true; cash.Debit = _rvoucher.rRecived; cash.ModifiedDate = DateTime.Now; cash.UserId = cash.ModifiedBy = _rvoucher.empID; db.SaveChanges(); transaction.Commit(); return(_rvoucher.invoiceNo); } catch (Exception) { transaction.Rollback(); throw; } } } }
public static string EditPurchases(BO_PurchaseInvoice pi) { if (pi.items.GroupBy(x => x.itemID).Where(x => x.Count() > 1).Count() == 1) { return("bad request"); } using (AprosysAccountingEntities db = new AprosysAccountingEntities()) { using (var transaction = db.Database.BeginTransaction()) { try { int transType = (int)Constants.TransactionTypes.Purchase; var glPurchaseOld = db.Acc_GL.Where(x => x.InvoiceNo == pi.invoiceNo && x.IsActive == true).ToList(); glPurchaseOld.Where(x => x.CoaId != 0).ToList().ForEach(x => x.IsActive = false); int transID = glPurchaseOld.Where(x => x.CoaId != 0).Select(x => x.TranId.Value).FirstOrDefault(); var glParent = glPurchaseOld.Find(x => x.CoaId == 0); glParent.Credit = glParent.Debit = pi.netAmount; glParent.VendorId = pi.vendorID; glParent.ActivityTimestamp = pi.purchaseDate; glParent.UserId = pi.empID; glParent.Comments = pi.comments; glParent.ModifiedDate = DateTime.Now; glParent.ModifiedBy = pi.empID; foreach (var item in pi.items) { var currItem = glPurchaseOld.Find(x => x.ItemId == item.itemID && x.CoaId == 6); if (currItem == null) { //New Stock Entry var GLStock = new Acc_GL() { TranId = transID, UserId = pi.empID, CoaId = 6, VendorId = pi.vendorID, ActivityTimestamp = pi.purchaseDate, TranTypeId = transType, InvoiceNo = pi.invoiceNo, IsActive = true, ItemId = item.itemID, Quantity = item.qty, QuantityBalance = item.qty, UnitPrice = item.unitPrice, Debit = item.amount, CreatedBy = pi.empID, CreatedDate = DateTime.Now, ModifiedBy = pi.empID, ModifiedDate = DateTime.Now }; db.Acc_GL.Add(GLStock); } else { if (currItem.Quantity == currItem.QuantityBalance) { currItem.UnitPrice = item.unitPrice; } if (item.qty > currItem.Quantity) { currItem.QuantityBalance = item.qty - (currItem.Quantity - currItem.QuantityBalance); } currItem.Debit = item.amount; currItem.Quantity = item.qty; currItem.UserId = pi.empID; currItem.ActivityTimestamp = pi.purchaseDate; currItem.IsActive = true; currItem.VendorId = pi.vendorID; currItem.ModifiedDate = DateTime.Now; currItem.ModifiedBy = pi.empID; } } db.SaveChanges(); if (pi.paid > 0) { //Paid Entry var objPaid = glPurchaseOld.Find(x => x.CoaId == 11); if (objPaid == null) { db.Acc_GL.Add(new Acc_GL() { TranId = transID, CoaId = 11, VendorId = pi.vendorID, ActivityTimestamp = pi.purchaseDate, TranTypeId = transType, Credit = pi.paid, InvoiceNo = pi.invoiceNo, IsActive = true, CreatedBy = pi.empID, CreatedDate = DateTime.Now, ModifiedBy = pi.empID, ModifiedDate = DateTime.Now }); } else { objPaid.Credit = pi.paid; objPaid.VendorId = pi.vendorID; objPaid.ActivityTimestamp = pi.purchaseDate; objPaid.UserId = pi.empID; objPaid.IsActive = true; objPaid.ModifiedDate = DateTime.Now; objPaid.ModifiedBy = pi.empID; } db.SaveChanges(); } decimal balance = pi.netAmount - pi.paid; if (balance != 0) { //Acc Payable Entry var objPayable = glPurchaseOld.Find(x => x.CoaId == 12); if (objPayable == null) { db.Acc_GL.Add(new Acc_GL() { TranId = transID, CoaId = 12, VendorId = pi.vendorID, ActivityTimestamp = pi.purchaseDate, TranTypeId = transType, Credit = balance, InvoiceNo = pi.invoiceNo, IsActive = true, CreatedBy = pi.empID, CreatedDate = DateTime.Now, ModifiedBy = pi.empID, ModifiedDate = DateTime.Now }); } else { objPayable.Credit = balance; objPayable.VendorId = pi.vendorID; objPayable.ActivityTimestamp = pi.purchaseDate; objPayable.UserId = pi.empID; objPayable.IsActive = true; objPayable.ModifiedDate = DateTime.Now; objPayable.ModifiedBy = pi.empID; } db.SaveChanges(); } db.SaveChanges(); transaction.Commit(); return("success"); } catch (Exception) { transaction.Rollback(); throw; } } } }
public static string SavePurchase(BO_PurchaseInvoice pi) { if (pi.items.GroupBy(x => x.itemID).Where(x => x.Count() > 1).Count() == 1) { return("bad request"); } using (AprosysAccountingEntities db = new AprosysAccountingEntities()) { using (var transaction = db.Database.BeginTransaction()) { try { int transType = (int)Constants.TransactionTypes.Purchase; pi.invoiceNo = Util.GetNextVoucher(transType); //Parent Entry var GLParent = new Acc_GL() { CoaId = 0, UserId = pi.empID, Comments = pi.comments, VendorId = pi.vendorID, ActivityTimestamp = pi.purchaseDate, TranTypeId = transType, Debit = pi.netAmount, Credit = pi.netAmount, InvoiceNo = pi.invoiceNo, IsActive = true, CreatedBy = pi.empID, CreatedDate = DateTime.Now, ModifiedBy = pi.empID, ModifiedDate = DateTime.Now }; db.Acc_GL.Add(GLParent); db.SaveChanges(); foreach (var item in pi.items) { //Stock Entry var GLStock = new Acc_GL() { TranId = GLParent.GlId, UserId = pi.empID, CoaId = 6, VendorId = pi.vendorID, ActivityTimestamp = pi.purchaseDate, TranTypeId = transType, InvoiceNo = pi.invoiceNo, IsActive = true, ItemId = item.itemID, Quantity = item.qty, QuantityBalance = item.qty, UnitPrice = item.unitPrice, Debit = item.amount, CreatedBy = pi.empID, CreatedDate = DateTime.Now, ModifiedBy = pi.empID, ModifiedDate = DateTime.Now }; db.Acc_GL.Add(GLStock); } if (pi.paid > 0) { //Paid Entry var GLpaid = new Acc_GL() { TranId = GLParent.GlId, UserId = pi.empID, CoaId = 11, VendorId = pi.vendorID, ActivityTimestamp = pi.purchaseDate, TranTypeId = transType, InvoiceNo = pi.invoiceNo, IsActive = true, Credit = pi.paid, CreatedBy = pi.empID, CreatedDate = DateTime.Now, ModifiedBy = pi.empID, ModifiedDate = DateTime.Now }; db.Acc_GL.Add(GLpaid); } decimal balance = pi.netAmount - pi.paid; if (balance != 0) { //Acc Payable Entry var GLpayable = new Acc_GL() { TranId = GLParent.GlId, UserId = pi.empID, CoaId = 12, VendorId = pi.vendorID, ActivityTimestamp = pi.purchaseDate, TranTypeId = transType, InvoiceNo = pi.invoiceNo, IsActive = true, Credit = balance, CreatedBy = pi.empID, CreatedDate = DateTime.Now, ModifiedBy = pi.empID, ModifiedDate = DateTime.Now }; db.Acc_GL.Add(GLpayable); } db.SaveChanges(); transaction.Commit(); return("success"); } catch (Exception) { transaction.Rollback(); throw; } } } }
public static string SaveSales(BO_SaleInvoice pi, System.Data.Entity.DbContextTransaction trans = null, AprosysAccountingEntities context = null) { //if (pi.items.GroupBy(x => x.itemID).Where(x => x.Count() > 1).Count() == 1) { return "bad request"; } //if transaction data is delted AprosysAccountingEntities db = context == null ? new AprosysAccountingEntities() : context; #region if Customer , Items And Services Deleted var _cust = db.Customers.Where(x => x.Id == pi.customerID && x.IsActive == false).FirstOrDefault(); if (_cust != null) { throw new Exception("Customer is not Exist "); } List <int> itemids = pi.items.Select(x => x.itemID).ToList(); var _item = db.Items.Where(x => itemids.Contains(x.Id) && x.IsActive == false).FirstOrDefault(); if (_item != null) { throw new Exception("Items not Exist "); } List <int> serviceids = pi.items.Select(x => x.coaID).ToList(); var _service = db.Acc_COA.Where(x => serviceids.Contains(x.CoaId) && x.IsActive == false).FirstOrDefault(); if (_service != null) { throw new Exception("Services not Exist "); } #endregion var transaction = trans == null?db.Database.BeginTransaction() : trans; try { string InvoiceNumber; var editVal = trans != null?db.Acc_GL.Where(x => x.IsActive == false && x.CoaId == 0).Select(x => new { createdBy = x.CreatedBy.Value, createdDate = x.CreatedDate.Value }).FirstOrDefault() : new { createdBy = pi.empID, createdDate = DateTime.Now }; //Getting Purchased Stock for FIFO Base deduction var GLPurchases = db.Acc_GL.Where(x => (x.IsActive ?? false) && x.CoaId == 6 && x.QuantityBalance > 0 && (x.TranTypeId == 1 || x.TranTypeId == 7)).OrderBy(x => x.ActivityTimestamp).AsEnumerable(); int transType = (int)Constants.TransactionTypes.Sales; pi.invoiceNo = trans == null?Util.GetNextVoucher(transType) : pi.invoiceNo; bool _isSalesCredit = pi.IsSalesCredit; //Parent Entry var GLParent = new Acc_GL() { CoaId = 0, UserId = pi.empID, Comments = pi.comments, CustId = pi.customerID, ActivityTimestamp = pi.saleDate, Debit = pi.netAmount, Credit = pi.netAmount, TranTypeId = transType, InvoiceNo = pi.invoiceNo, IsActive = true, CreatedBy = editVal.createdBy, CreatedDate = editVal.createdDate, ModifiedBy = pi.empID, ModifiedDate = DateTime.Now, IsSalesCredit = _isSalesCredit, SalesPersonId = pi.salesPersonId }; InvoiceNumber = GLParent.InvoiceNo; db.Acc_GL.Add(GLParent); db.SaveChanges(); foreach (var item in pi.items) { //In Case of Service Item if (item.isServiceItem) { var GLServSales = new Acc_GL() { TranId = GLParent.GlId, UserId = pi.empID, TaxPercent = item.tax, Quantity = item.qty, CoaId = item.coaID, CustId = pi.customerID, ActivityTimestamp = pi.saleDate, TranTypeId = transType, InvoiceNo = pi.invoiceNo, IsActive = true, UnitPrice = item.unitPrice, Credit = item.amount - item.tax, IsPostpaid = true, CreatedBy = editVal.createdBy, CreatedDate = editVal.createdDate, ModifiedBy = pi.empID, ModifiedDate = DateTime.Now, IsSalesCredit = _isSalesCredit, SalesPersonId = pi.salesPersonId }; db.Acc_GL.Add(GLServSales); db.SaveChanges(); continue; } var qty = item.qty; var purchaseAmount = new List <decimal>(); #region --- FIFO base deduction --- List <Acc_GLTxLinks> txLinks = new List <Acc_GLTxLinks>(); var itemPurchases = GLPurchases.Where(x => x.ItemId == item.itemID).ToList(); foreach (var objpurchase in itemPurchases) { var qtytodeduct = 0m; var bal = qty - objpurchase.QuantityBalance; if (bal == 0 || bal < 0) { qtytodeduct = qty; } else { qtytodeduct = objpurchase.QuantityBalance ?? 0; } objpurchase.QuantityBalance -= qtytodeduct; Acc_GLTxLinks objTxLinks = new Acc_GLTxLinks() { UnitPrice = item.unitPrice, Credit = item.amount, TranTypeID = transType, Quantity = qtytodeduct, IsActive = true, ItemID = item.itemID, RelGLID = objpurchase.GlId }; txLinks.Add(objTxLinks); db.Acc_GLTxLinks.Add(objTxLinks); qty = qty - qtytodeduct; purchaseAmount.Add(objpurchase.UnitPrice ?? 0); if (qty == 0) { break; } } decimal avgPurchaseUnitPrice = purchaseAmount.Average(); //Stock Entry var GLStock = new Acc_GL() { TranId = GLParent.GlId, UserId = pi.empID, CoaId = 6, CustId = pi.customerID, ActivityTimestamp = pi.saleDate, TranTypeId = transType, InvoiceNo = pi.invoiceNo, IsActive = true, ItemId = item.itemID, Quantity = -item.qty, QuantityBalance = item.qty, UnitPrice = avgPurchaseUnitPrice, Credit = avgPurchaseUnitPrice * item.qty, TaxPercent = item.tax, CreatedBy = editVal.createdBy, CreatedDate = editVal.createdDate, ModifiedBy = pi.empID, ModifiedDate = DateTime.Now, IsSalesCredit = _isSalesCredit, SalesPersonId = pi.salesPersonId }; db.Acc_GL.Add(GLStock); //COGS Entry var GLCOGS = new Acc_GL() { TranId = GLParent.GlId, UserId = pi.empID, CoaId = 13, CustId = pi.customerID, ActivityTimestamp = pi.saleDate, TranTypeId = transType, InvoiceNo = pi.invoiceNo, IsActive = true, ItemId = item.itemID, Quantity = item.qty, UnitPrice = avgPurchaseUnitPrice, Debit = avgPurchaseUnitPrice * item.qty, TaxPercent = item.tax, CreatedBy = editVal.createdBy, CreatedDate = editVal.createdDate, ModifiedBy = pi.empID, ModifiedDate = DateTime.Now, IsSalesCredit = _isSalesCredit, SalesPersonId = pi.salesPersonId }; db.Acc_GL.Add(GLCOGS); //Sales Entry var GLSales = new Acc_GL() { TranId = GLParent.GlId, UserId = pi.empID, CoaId = 14, CustId = pi.customerID, ActivityTimestamp = pi.saleDate, TranTypeId = transType, InvoiceNo = pi.invoiceNo, IsActive = true, ItemId = item.itemID, Quantity = item.qty, UnitPrice = item.unitPrice, Credit = item.amount - item.tax, TaxPercent = item.tax, CreatedBy = editVal.createdBy, CreatedDate = editVal.createdDate, ModifiedBy = pi.empID, ModifiedDate = DateTime.Now, IsSalesCredit = _isSalesCredit, SalesPersonId = pi.salesPersonId }; db.Acc_GL.Add(GLSales); db.SaveChanges(); txLinks.ForEach(x => x.GLID = GLStock.GlId); #endregion } if (pi.IsSalesCredit) { pi.paid = 0; } if (pi.paid > 0) { //Paid Entry var GLpaid = new Acc_GL() { TranId = GLParent.GlId, UserId = pi.empID, CoaId = 11, CustId = pi.customerID, ActivityTimestamp = pi.saleDate, TranTypeId = transType, InvoiceNo = pi.invoiceNo, IsActive = true, Debit = pi.paid, CreatedBy = editVal.createdBy, CreatedDate = editVal.createdDate, ModifiedBy = pi.empID, ModifiedDate = DateTime.Now, IsSalesCredit = _isSalesCredit, SalesPersonId = pi.salesPersonId }; db.Acc_GL.Add(GLpaid); } decimal balance = pi.netAmount - pi.paid; if (balance != 0) { //Acc Receivable Entry var GLpayable = new Acc_GL() { TranId = GLParent.GlId, UserId = pi.empID, CoaId = 10, CustId = pi.customerID, ActivityTimestamp = pi.saleDate, TranTypeId = transType, InvoiceNo = pi.invoiceNo, IsActive = true, Debit = balance, CreatedBy = editVal.createdBy, CreatedDate = editVal.createdDate, ModifiedBy = pi.empID, ModifiedDate = DateTime.Now, IsSalesCredit = _isSalesCredit, SalesPersonId = pi.salesPersonId }; db.Acc_GL.Add(GLpayable); } decimal tax = pi.items.Sum(x => x.tax ?? 0); if (tax > 0) { //Tax Entry var GLTax = new Acc_GL() { TranId = GLParent.GlId, UserId = pi.empID, CoaId = 99, CustId = pi.customerID, ActivityTimestamp = pi.saleDate, TranTypeId = transType, InvoiceNo = pi.invoiceNo, IsActive = true, Credit = tax, CreatedBy = editVal.createdBy, CreatedDate = editVal.createdDate, ModifiedBy = pi.empID, ModifiedDate = DateTime.Now, IsSalesCredit = _isSalesCredit, SalesPersonId = pi.salesPersonId }; db.Acc_GL.Add(GLTax); } db.SaveChanges(); if (trans == null) { transaction.Commit(); db.Dispose(); transaction.Dispose(); } return(InvoiceNumber); } catch (Exception ex) { transaction.Rollback(); throw; } }
public static string ValidateDueDates(DateTime actingDate) { lock (objLck) { using (AprosysAccountingEntities db = new AprosysAccountingEntities()) { Appcode.Logger.Write("Subscription Routine", "ValidateDueDates", "DateTime: " + actingDate.ToString() + " ," + actingDate.ToString(), Appcode.Logger.LogType.InformationLog); // var custl = db.Customers.Where(x => x.TypeId == 2 && x.IsActive == true).Select(x => x.Id).ToList(); var custl = (from t1 in db.Customers.Where(x => x.IsActive == true) join t2 in db.Subscriptions.Where(s => s.IsActive == true) on t1.Id equals t2.CustId select t1.Id).ToList(); var subsl = db.Subscriptions.Where(x => x.IsActive == true).ToList(); var subexcdates = (from s in db.Subscriptions join e in db.SubscriptionExcludingDates on s.CustId equals e.CustId select new { e.CustId, e.SubDisableStartDate, e.SubDisableEndDate }).ToList(); int transType = (int)Constants.TransactionTypes.SubscriptionDue; var glList = db.Acc_GL.Where(x => x.TranTypeId == transType && x.IsActive == true && x.CoaId == 10).Select(x => new { x.GlId, x.CustId, x.SubscriptionDueDate }).ToList();//.ToList().Where(x => x.ActivityTimestamp.Value.Date.Month == BL_Common.GetDatetime().Month && x.ActivityTimestamp.Value.Date.Year == BL_Common.GetDatetime().Year).Select(x => new { x.GlId, x.CustId, x.ActivityTimestamp }).ToList(); glList = glList.Where(x => custl.Contains(x.CustId.Value)).ToList(); //if (glList.Count == 0) { return "Ledger is empty"; } foreach (var cust in custl) { var sub = subsl.SingleOrDefault(x => x.CustId == cust); var subStartDate = sub.StartDate; while (subStartDate <= new DateTime(actingDate.Year, actingDate.Month, DateTime.DaysInMonth(actingDate.Year, actingDate.Month))) { // do something with target.Month and target.Year var monthDue = subStartDate; var dueDate = new DateTime(monthDue.Year, monthDue.Month, sub.DueDate); if ((/*(monthDue.Month < DateTime.Now.Month && monthDue < DateTime.Now) ||*/ (dueDate <= actingDate.Date && dueDate >= sub.StartDate)) && !glList.Exists(x => x.CustId == cust && x.SubscriptionDueDate.Value.Month == dueDate.Month && x.SubscriptionDueDate.Value.Year == dueDate.Year)) { // Need to add a check which stops Excluding Entries in Acc_GL , however theese entries is removed in Exclusion Region if (sub.SubStatus == true) { var subExclusionsDates = db.SubscriptionExcludingDates.Where(x => x.CustId == sub.Id && x.IsActive == true).ToList(); if (subExclusionsDates != null && subExclusionsDates.Count > 0) { DateTime _startdisabledate = subExclusionsDates[0].SubDisableStartDate ?? BL_Common.GetDatetime(); DateTime _enddisabledate = subExclusionsDates[0].SubDisableEndDate ?? BL_Common.GetDatetime(); if (dueDate < _startdisabledate) { #region Insertion into AccGL using (var transaction = db.Database.BeginTransaction()) { try { var vNo = GetNextVoucher(); //if (!(sub.SubStatus == true && dueDate > sub.SubDisableStartDate && dueDate < sub.SubDisableEndDate)) // if (!(sub.SubStatus == true && dueDate > subexcdates.Where( x=>x.SubDisableStartDate > dueDate).FirstOrDefault() && dueDate < sub.SubDisableEndDate)) { //Parent Entry var GLParent = new Acc_GL() { CoaId = 0, CustId = cust, ActivityTimestamp = actingDate, SubscriptionDueDate = dueDate, TranTypeId = transType, Debit = sub.SubscriptionAmount, Credit = sub.SubscriptionAmount, InvoiceNo = vNo, IsActive = true, CreatedDate = actingDate, CreatedBy = 1, ModifiedBy = 1, ModifiedDate = actingDate }; db.Acc_GL.Add(GLParent); db.SaveChanges(); //Account Receivable var GLRec = new Acc_GL() { TranId = GLParent.GlId, CoaId = 10, CustId = cust, ActivityTimestamp = actingDate, SubscriptionDueDate = dueDate, TranTypeId = transType, Debit = sub.SubscriptionAmount, InvoiceNo = vNo, IsActive = true, IsPostpaid = true, CreatedDate = actingDate, CreatedBy = 1, ModifiedBy = 1, ModifiedDate = actingDate }; db.Acc_GL.Add(GLRec); //Subscription Sales var GLSubSales = new Acc_GL() { TranId = GLParent.GlId, CoaId = 100, CustId = cust, ActivityTimestamp = actingDate, SubscriptionDueDate = dueDate, TranTypeId = transType, Credit = sub.SubscriptionAmount, InvoiceNo = vNo, IsActive = true, IsPostpaid = true, CreatedDate = actingDate, CreatedBy = 1, ModifiedBy = 1, ModifiedDate = actingDate }; db.Acc_GL.Add(GLSubSales); db.SaveChanges(); } transaction.Commit(); } catch (Exception ex) { Appcode.Logger.Write("Subscription Routine", "Validate Due Dates", ex.ToString(), Appcode.Logger.LogType.ErrorLog); transaction.Rollback(); throw; } } #endregion } } } else { #region Insertion into AccGL using (var transaction = db.Database.BeginTransaction()) { try { var vNo = GetNextVoucher(); //if (!(sub.SubStatus == true && dueDate > sub.SubDisableStartDate && dueDate < sub.SubDisableEndDate)) // if (!(sub.SubStatus == true && dueDate > subexcdates.Where( x=>x.SubDisableStartDate > dueDate).FirstOrDefault() && dueDate < sub.SubDisableEndDate)) { //Parent Entry var GLParent = new Acc_GL() { CoaId = 0, CustId = cust, ActivityTimestamp = actingDate, SubscriptionDueDate = dueDate, TranTypeId = transType, Debit = sub.SubscriptionAmount, Credit = sub.SubscriptionAmount, InvoiceNo = vNo, IsActive = true, CreatedDate = actingDate, CreatedBy = 1, ModifiedBy = 1, ModifiedDate = actingDate }; db.Acc_GL.Add(GLParent); db.SaveChanges(); //Account Receivable var GLRec = new Acc_GL() { TranId = GLParent.GlId, CoaId = 10, CustId = cust, ActivityTimestamp = actingDate, SubscriptionDueDate = dueDate, TranTypeId = transType, Debit = sub.SubscriptionAmount, InvoiceNo = vNo, IsActive = true, IsPostpaid = true, CreatedDate = actingDate, CreatedBy = 1, ModifiedBy = 1, ModifiedDate = actingDate }; db.Acc_GL.Add(GLRec); //Subscription Sales var GLSubSales = new Acc_GL() { TranId = GLParent.GlId, CoaId = 100, CustId = cust, ActivityTimestamp = actingDate, SubscriptionDueDate = dueDate, TranTypeId = transType, Credit = sub.SubscriptionAmount, InvoiceNo = vNo, IsActive = true, IsPostpaid = true, CreatedDate = actingDate, CreatedBy = 1, ModifiedBy = 1, ModifiedDate = actingDate }; db.Acc_GL.Add(GLSubSales); db.SaveChanges(); } transaction.Commit(); } catch (Exception ex) { Appcode.Logger.Write("Subscription Routine", "Validate Due Dates", ex.ToString(), Appcode.Logger.LogType.ErrorLog); transaction.Rollback(); throw; } } #endregion } } subStartDate = subStartDate.AddMonths(1); } // if (sub.SubStatus == true) { #region Exclusion work var subExclusionsDates = db.SubscriptionExcludingDates.Where(x => x.CustId == sub.Id && x.IsActive == true).ToList(); if (subExclusionsDates != null && subExclusionsDates.Count > 0) { for (int i = 0; i < subExclusionsDates.Count; i++) { DateTime _startdisabledate = subExclusionsDates[i].SubDisableStartDate ?? BL_Common.GetDatetime(); DateTime _enddisabledate = subExclusionsDates[i].SubDisableEndDate ?? BL_Common.GetDatetime(); var subDeactive = db.Acc_GL.Where(x => (x.SubscriptionDueDate >= _startdisabledate) && (x.SubscriptionDueDate < _enddisabledate) && (x.IsActive == true) && (x.CustId == cust)).ToList(); if (subDeactive != null && subDeactive.Count > 0) { for (int j = 0; j < subDeactive.Count; j++) { subDeactive[j].IsActive = false; subDeactive[j].Comments = "Disabled From Routine by Disable Feature"; db.SaveChanges(); } } } } #endregion } } return("success"); } } }
public static string SaveSalesReturn(BO_SaleInvoice pi) { using (AprosysAccountingEntities db = new AprosysAccountingEntities()) { #region if Customer , Items And Services Deleted var _cust = db.Customers.Where(x => x.Id == pi.customerID && x.IsActive == false).FirstOrDefault(); if (_cust != null) { throw new Exception("Customer is not Exist "); } List <int> itemids = pi.items.Select(x => x.itemID).ToList(); var _item = db.Items.Where(x => itemids.Contains(x.Id) && x.IsActive == false).FirstOrDefault(); if (_item != null) { throw new Exception("Items not Exist "); } List <int> serviceids = pi.items.Select(x => x.coaID).ToList(); var _service = db.Acc_COA.Where(x => serviceids.Contains(x.CoaId) && x.IsActive == false).FirstOrDefault(); if (_service != null) { throw new Exception("Services not Exist "); } #endregion try { //Getting Purchased Stock for FIFO Base deduction var GLPurchases = db.Acc_GL.Where(x => (x.IsActive ?? false) && x.CoaId == 6 && x.QuantityBalance > 0 && (x.TranTypeId == 1 || x.TranTypeId == 7)).OrderBy(x => x.ActivityTimestamp).AsEnumerable(); int transType = (int)Constants.TransactionTypes.Sales; bool _isSalesCredit = pi.IsSalesCredit; var GLParentGlId = db.Acc_GL.FirstOrDefault(x => x.InvoiceNo.Equals(pi.invoiceNo) && (x.Debit.Value > 0 && x.Credit > 0)).GlId; foreach (var item in pi.items) { //In Case of Service Item if (item.isServiceItem) { var GLServSales = new Acc_GL() { TranId = GLParentGlId, UserId = pi.empID, TaxPercent = item.tax, Quantity = item.qty, CoaId = item.coaID, CustId = pi.customerID, ActivityTimestamp = pi.saleDate, TranTypeId = transType, InvoiceNo = pi.invoiceNo, IsActive = true, UnitPrice = item.unitPrice, Credit = item.amount - item.tax, IsPostpaid = true, CreatedBy = pi.empID, CreatedDate = DateTime.Now, ModifiedBy = pi.empID, ModifiedDate = DateTime.Now, IsSalesCredit = _isSalesCredit, SalesPersonId = pi.salesPersonId }; db.Acc_GL.Add(GLServSales); db.SaveChanges(); continue; } var qty = item.qty; var purchaseAmount = new List <decimal>(); #region --- FIFO base deduction --- List <Acc_GLTxLinks> txLinks = new List <Acc_GLTxLinks>(); var itemPurchases = GLPurchases.Where(x => x.ItemId == item.itemID).ToList(); foreach (var objpurchase in itemPurchases) { var qtytodeduct = 0m; var bal = qty - objpurchase.QuantityBalance; if (bal == 0 || bal < 0) { qtytodeduct = qty; } else { qtytodeduct = objpurchase.QuantityBalance ?? 0; } objpurchase.QuantityBalance -= qtytodeduct; Acc_GLTxLinks objTxLinks = new Acc_GLTxLinks() { UnitPrice = item.unitPrice, Credit = item.amount, TranTypeID = transType, Quantity = qtytodeduct, IsActive = true, ItemID = item.itemID, RelGLID = objpurchase.GlId }; txLinks.Add(objTxLinks); db.Acc_GLTxLinks.Add(objTxLinks); qty = qty - qtytodeduct; purchaseAmount.Add(objpurchase.UnitPrice ?? 0); if (qty == 0) { break; } } decimal avgPurchaseUnitPrice = purchaseAmount.Average(); //Stock Entry var GLStock = new Acc_GL() { TranId = GLParentGlId, UserId = pi.empID, CoaId = 6, CustId = pi.customerID, ActivityTimestamp = pi.saleDate, TranTypeId = transType, InvoiceNo = pi.invoiceNo, IsActive = true, ItemId = item.itemID, Quantity = -item.qty, QuantityBalance = item.qty, UnitPrice = avgPurchaseUnitPrice, Credit = avgPurchaseUnitPrice * item.qty, TaxPercent = item.tax, CreatedBy = pi.empID, CreatedDate = DateTime.Now, ModifiedBy = pi.empID, ModifiedDate = DateTime.Now, IsSalesCredit = _isSalesCredit, SalesPersonId = pi.salesPersonId }; db.Acc_GL.Add(GLStock); //COGS Entry -- COGS = Cost of goods sold var GLCOGS = new Acc_GL() { TranId = GLParentGlId, UserId = pi.empID, CoaId = 13, CustId = pi.customerID, ActivityTimestamp = pi.saleDate, TranTypeId = transType, InvoiceNo = pi.invoiceNo, IsActive = true, ItemId = item.itemID, Quantity = item.qty, UnitPrice = avgPurchaseUnitPrice, Debit = avgPurchaseUnitPrice * item.qty, TaxPercent = item.tax, CreatedBy = pi.empID, CreatedDate = DateTime.Now, ModifiedBy = pi.empID, ModifiedDate = DateTime.Now, IsSalesCredit = _isSalesCredit, SalesPersonId = pi.salesPersonId }; db.Acc_GL.Add(GLCOGS); //Sales Entry var GLSales = new Acc_GL() { TranId = GLParentGlId, UserId = pi.empID, CoaId = 14, CustId = pi.customerID, ActivityTimestamp = pi.saleDate, TranTypeId = transType, InvoiceNo = pi.invoiceNo, IsActive = true, ItemId = item.itemID, Quantity = item.qty, UnitPrice = item.unitPrice, Credit = item.amount - item.tax, TaxPercent = item.tax, CreatedBy = pi.empID, CreatedDate = DateTime.Now, ModifiedBy = pi.empID, ModifiedDate = DateTime.Now, IsSalesCredit = _isSalesCredit, SalesPersonId = pi.salesPersonId }; db.Acc_GL.Add(GLSales); db.SaveChanges(); txLinks.ForEach(x => x.GLID = GLStock.GlId); #endregion } if (pi.IsSalesCredit) { pi.paid = 0; } if (pi.paid > 0) { //Paid Entry var GLpaid = new Acc_GL() { TranId = GLParentGlId, UserId = pi.empID, CoaId = 11, CustId = pi.customerID, ActivityTimestamp = pi.saleDate, TranTypeId = transType, InvoiceNo = pi.invoiceNo, IsActive = true, Debit = pi.paid, CreatedBy = pi.empID, CreatedDate = DateTime.Now, ModifiedBy = pi.empID, ModifiedDate = DateTime.Now, IsSalesCredit = _isSalesCredit, SalesPersonId = pi.salesPersonId }; db.Acc_GL.Add(GLpaid); } decimal balance = pi.netAmount - pi.paid; if (balance != 0) { //Acc Receivable Entry var GLpayable = new Acc_GL() { TranId = GLParentGlId, UserId = pi.empID, CoaId = 10, CustId = pi.customerID, ActivityTimestamp = pi.saleDate, TranTypeId = transType, InvoiceNo = pi.invoiceNo, IsActive = true, Debit = balance, CreatedBy = pi.empID, CreatedDate = DateTime.Now, ModifiedBy = pi.empID, ModifiedDate = DateTime.Now, IsSalesCredit = _isSalesCredit, SalesPersonId = pi.salesPersonId }; db.Acc_GL.Add(GLpayable); } decimal tax = pi.items.Sum(x => x.tax ?? 0); if (tax > 0) { //Tax Entry var GLTax = new Acc_GL() { TranId = GLParentGlId, UserId = pi.empID, CoaId = 99, CustId = pi.customerID, ActivityTimestamp = pi.saleDate, TranTypeId = transType, InvoiceNo = pi.invoiceNo, IsActive = true, Credit = tax, CreatedBy = pi.empID, CreatedDate = DateTime.Now, ModifiedBy = pi.empID, ModifiedDate = DateTime.Now, IsSalesCredit = _isSalesCredit, SalesPersonId = pi.salesPersonId }; db.Acc_GL.Add(GLTax); } db.SaveChanges(); return(pi.invoiceNo); } catch (Exception ex) { throw; } } }
public static void InsertPartialPayments(decimal Amount, int User, string Invoice, string DocID, string Comment, DateTime ActivityTime) { using (AprosysAccountingEntities db = new AprosysAccountingEntities()) { var trans = db.Database.BeginTransaction(); try { //Get Customer From Original Invoice var refTrans = db.Acc_GL.Where(x => x.InvoiceNo == Invoice && x.IsActive == true && x.TranTypeId == 2 && x.CustId.HasValue).FirstOrDefault(); var sellerID = db.Customers.Where(x => x.Id == refTrans.CustId).Select(x => x.SalesPersonId).FirstOrDefault(); //We make a Dummy Entry for reference var GLParent = new Acc_GL() { CoaId = 0, UserId = User, CustId = refTrans.CustId, ActivityTimestamp = ActivityTime, Debit = Amount, Credit = Amount, TranTypeId = (int)Constants.TransactionTypes.PaymentAgainstCreditSales, InvoiceNo = Invoice, IsActive = true, CreatedBy = User, CreatedDate = DateTime.Now, ModifiedBy = User, ModifiedDate = DateTime.Now, SalesPersonId = sellerID }; GLParent.DocumentId = DocID; GLParent.Comments = Comment; db.Acc_GL.Add(GLParent); db.SaveChanges(); var GLCash = new Acc_GL() { CoaId = (int)Constants.COAID.CASH, DocumentId = DocID, Comments = Comment, TranId = GLParent.GlId, UserId = User, CustId = refTrans.CustId, ActivityTimestamp = ActivityTime, Debit = Amount, Credit = 0, TranTypeId = (int)Constants.TransactionTypes.PaymentAgainstCreditSales, InvoiceNo = Invoice, IsActive = true, CreatedBy = User, CreatedDate = DateTime.Now, ModifiedBy = User, ModifiedDate = DateTime.Now, SalesPersonId = sellerID }; var GL_Recv = new Acc_GL() { CoaId = (int)Constants.COAID.AccountRecievable, DocumentId = DocID, Comments = Comment, TranId = GLParent.GlId, UserId = User, CustId = refTrans.CustId, ActivityTimestamp = ActivityTime, Debit = 0, Credit = Amount, TranTypeId = (int)Constants.TransactionTypes.PaymentAgainstCreditSales, InvoiceNo = Invoice, IsActive = true, CreatedBy = User, CreatedDate = DateTime.Now, ModifiedBy = User, ModifiedDate = DateTime.Now, SalesPersonId = sellerID }; db.Acc_GL.Add(GLCash); db.Acc_GL.Add(GL_Recv); db.SaveChanges(); trans.Commit(); } catch { if (trans != null) { trans.Rollback(); } throw; } } }