Beispiel #1
0
        //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;
                    }
                }
            }
        }
Beispiel #2
0
        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; }
                }
            }
        }
Beispiel #3
0
        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; }
                }
            }
        }
Beispiel #5
0
        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;
             }
         }
     }
 }
Beispiel #8
0
 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;
             }
         }
     }
 }
Beispiel #9
0
        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;
                    }
                }
            }
        }
Beispiel #10
0
 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;
             }
         }
     }
 }
Beispiel #11
0
        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");
                }
            }
        }
Beispiel #13
0
        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;
         }
     }
 }