Ejemplo n.º 1
0
        public PurchasePayment GetOne([FromBody] PurchasePayment input)
        {
            try
            {
                if (input != null)
                {
                    Expression <Func <Purchase, object> >[] exp = new Expression <Func <Purchase, object> >[] { x => x.PurchasePayments, x => x.PurchaseDetails, x => x.Suplier };
                    var predicate = PredicateBuilder.True <Purchase>();
                    predicate = predicate.And(x => !x.IsDeleted);

                    if (!string.IsNullOrWhiteSpace(input.BillId))
                    {
                        predicate = predicate.And(x => x.PurchaseId.ToUpper().Trim() == input.BillId.ToUpper().Trim());
                    }

                    if (input.FK_PurchaseId > 0)
                    {
                        predicate = predicate.And(x => x.Id == input.FK_PurchaseId);
                    }

                    var result = _purchaseOpp.GetAllUsingExpression(out int totalCount, 1, 0, predicate, null, null, exp).FirstOrDefault();

                    if (result != null)
                    {
                        if (result.PurchasePayments != null)
                        {
                            foreach (var each in result.PurchasePayments)
                            {
                                result.TotalPaid = result.TotalPaid + each.Amount;
                            }
                        }

                        result.Due = Math.Round(result.RoundOffTotal - result.TotalPaid, 2);
                        //nullifying to avoid object chain
                        if (result.PurchasePayments != null)
                        {
                            result.PurchasePayments.ForEach(x => x.Purchase = null);
                        }

                        if (result.Suplier != null)
                        {
                            result.Suplier.Purchases = null;
                        }

                        if (result.PurchaseDetails != null)
                        {
                            result.PurchaseDetails.ForEach(x => x.Purchase = null);
                        }

                        input.Purchase = result;
                    }
                }
            }
            catch (Exception ex)
            {
                input.IsFailure = true;
                input.Msg       = "";
            }
            return(input);
        }
Ejemplo n.º 2
0
        public List <PurchasePayment> GetPurchasePayment(int id, string connectionString)
        {
            List <PurchasePayment> payments = new List <PurchasePayment>();

            SqlConnection connection = null;

            try
            {
                using (connection = new SqlConnection(connectionString))
                {
                    connection.Open();
                    using (SqlCommand command = connection.CreateCommand())
                    {
                        command.CommandText = "GetPurchasePayment";
                        command.CommandType = CommandType.StoredProcedure;
                        command.Parameters.Add(new SqlParameter("@id", id));

                        using (SqlDataReader rdr = command.ExecuteReader())
                        {
                            while (rdr.Read())
                            {
                                if (!string.IsNullOrEmpty(rdr["Id"].ToString()))
                                {
                                    PurchasePayment r = new PurchasePayment();
                                    r.Id = int.Parse(rdr["Id"].ToString());

                                    if (!string.IsNullOrEmpty(rdr["PaymentMethod"].ToString()))
                                    {
                                        r.PaymentMethod = int.Parse(rdr["PaymentMethod"].ToString());
                                    }
                                    if (!string.IsNullOrEmpty(rdr["Sum"].ToString()))
                                    {
                                        r.Sum = decimal.Parse(rdr["Sum"].ToString());
                                    }

                                    payments.Add(r);
                                }
                            }
                        }
                    }
                }
            }
            catch (SqlException sqlEx)
            {
            }
            catch (Exception ex)
            {
            }
            finally
            {
                if (connection != null && connection.State == ConnectionState.Open)
                {
                    connection.Close();
                }
            }
            return(payments);
        }
Ejemplo n.º 3
0
        public int InsertPurchasePayment(PurchasePayment purchasePayment, string connectionString)
        {
            int           purchaseStatus = 0;
            SqlConnection connection     = null;

            try
            {
                using (connection = new SqlConnection(connectionString))
                {
                    connection.Open();
                    using (SqlCommand command = connection.CreateCommand())
                    {
                        command.CommandText = "InsertPurchasePayment";
                        command.CommandType = CommandType.StoredProcedure;
                        command.Parameters.Add(new SqlParameter("@purchaseId", purchasePayment.PurchaseId));
                        command.Parameters.Add(new SqlParameter("@paymentMethod", purchasePayment.PaymentMethod));
                        command.Parameters.Add(new SqlParameter("@sum", purchasePayment.Sum));

                        using (SqlDataReader rdr = command.ExecuteReader())
                        {
                            while (rdr.Read())
                            {
                                if (!string.IsNullOrEmpty(rdr["status"].ToString()))
                                {
                                    purchaseStatus = int.Parse(rdr["status"].ToString());
                                }
                            }
                        }
                    }
                }
            }
            catch (SqlException sqlEx)
            {
            }
            catch (Exception ex)
            {
            }
            finally
            {
                if (connection != null && connection.State == ConnectionState.Open)
                {
                    connection.Close();
                }
            }
            return(purchaseStatus);
        }
Ejemplo n.º 4
0
        public async Task <IActionResult> PostPurchasePayment([FromBody] PurchasePayment purchasePayment)
        {
            //validate
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (!_context.Purchase.Any(p => p.Id == purchasePayment.PurchaseId))
            {
                return(BadRequest("This Purchase doesn't exist"));
            }
            if (!_context.PaymentMethod.Any(p => p.Id == purchasePayment.PaymentMethod))
            {
                return(BadRequest("This Payment Method doesn't exist"));
            }
            Purchase purchase = _context.Purchase.AsNoTracking().SingleOrDefault(p => p.Id == purchasePayment.PurchaseId);

            if (purchase.TotalSum - purchase.PaidAmount <= 0)
            {
                return(BadRequest("Already completed all payments for this purchase"));
            }
            if (purchase.TotalSum - purchase.PaidAmount < purchasePayment.Sum || purchasePayment.Sum <= 0)
            {
                purchasePayment.Sum = purchase.TotalSum - (decimal)purchase.PaidAmount;
            }

            // complete payment and receive the response
            //if(!paymentApproved)
            //return - payment declined.

            //Insert Payment to DB
            int purchaseStatus = Repository.Instance.InsertPurchasePayment(purchasePayment, _context.Database.GetDbConnection().ConnectionString);

            //Retreive the Updated Purchase
            Purchase updatedPurchase = Repository.Instance.GetPurchase(purchasePayment.PurchaseId, _context.Database.GetDbConnection().ConnectionString);

            if (updatedPurchase == null)
            {
                return(NotFound());
            }
            return(Ok(updatedPurchase));
        }
Ejemplo n.º 5
0
        public PurchasePayment Payment([FromBody] PurchasePayment input)
        {
            try
            {
                if (input != null)
                {
                    input.Purchase = null;

                    if (input.Id <= 0)
                    {
                        input.Id = 0;
                        _purchasePaymentOpp.Add(input);
                    }

                    input = GetOne(input);
                }
            }
            catch (Exception ex)
            {
                input.Msg       = "";
                input.IsFailure = true;
            }
            return(input);
        }
Ejemplo n.º 6
0
        public async Task <DbResponse <int> > BillUpdated(PurchaseUpdatePostModel model, IUnitOfWork db, string userName)
        {
            var response = new DbResponse <int>();

            try
            {
                var purchase = Context.Purchase
                               .Include(s => s.PurchaseList)
                               .FirstOrDefault(s => s.PurchaseId == model.PurchaseId);

                if (purchase == null)
                {
                    response.IsSuccess = false;
                    response.Message   = "Not found";
                    return(response);
                }
                var registrationId = db.Registrations.GetRegID_ByUserName(userName);
                var returnRecord   = new PurchasePaymentReturnRecordModel
                {
                    PrevReturnAmount    = decimal.Round(purchase.PurchaseReturnAmount, 2),
                    CurrentReturnAmount = decimal.Round(model.PurchaseReturnAmount, 2),
                    AccountId           = model.AccountId,
                    PurchaseId          = purchase.PurchaseId,
                    RegistrationId      = registrationId
                };

                purchase.PurchaseTotalPrice     = decimal.Round(model.PurchaseTotalPrice, 2);
                purchase.PurchaseDiscountAmount = decimal.Round(model.PurchaseDiscountAmount, 2);
                purchase.PurchaseReturnAmount   = decimal.Round(model.PurchaseReturnAmount, 2);
                purchase.PurchasePaidAmount    += decimal.Round(model.PaidAmount, 2);


                var due = (purchase.PurchaseTotalPrice + purchase.PurchaseReturnAmount) - (purchase.PurchaseDiscountAmount + purchase.PurchasePaidAmount);
                if (due < 0)
                {
                    response.IsSuccess = false;
                    response.Message   = "Due cannot be less than zero";
                    return(response);
                }

                if (model.RemovedProductStockIds != null)
                {
                    if (model.RemovedProductStockIds.Any())
                    {
                        var removedStocks = Context.ProductStock
                                            .Include(s => s.ProductLog)
                                            .Include(s => s.Warranty)
                                            .Where(s => model.RemovedProductStockIds.Contains(s.ProductStockId)).ToList();

                        if (removedStocks.Any(s => s.IsSold))
                        {
                            response.IsSuccess = false;
                            response.Message   = "Sold product can not be return";
                            return(response);
                        }

                        if (removedStocks.Any())
                        {
                            Context.ProductStock.RemoveRange(removedStocks);
                        }
                    }
                }


                if (model.PurchaseList == null)
                {
                    purchase.PurchaseList = null;
                }

                Context.Purchase.Update(purchase);

                var existProduct = model.PurchaseList.Where(p => p.PurchaseListId != 0 && p.AddedProductCodes != null).ToList();


                foreach (var pItem in existProduct)
                {
                    var purchaseList = Context.PurchaseList.Find(pItem.PurchaseListId);

                    purchaseList.SellingPrice  = pItem.SellingPrice;
                    purchaseList.PurchasePrice = pItem.PurchasePrice;
                    purchaseList.Description   = pItem.Description;
                    purchaseList.Note          = pItem.Note;
                    purchaseList.Warranty      = pItem.Warranty;
                    purchaseList.ProductStock  = pItem.AddedProductCodes.Select(s => new ProductStock
                    {
                        ProductId   = pItem.ProductId,
                        ProductCode = s
                    }).ToList();

                    Context.PurchaseList.Update(purchaseList);
                }

                var newProduct = model.PurchaseList.Where(p => p.PurchaseListId == 0 && p.AddedProductCodes != null).ToList();

                var newPurchaseList = newProduct.Select(p => new PurchaseList
                {
                    PurchaseListId = p.PurchaseListId,
                    PurchaseId     = model.PurchaseId,
                    ProductId      = p.ProductId,
                    SellingPrice   = p.SellingPrice,
                    PurchasePrice  = p.PurchasePrice,
                    Description    = p.Description,
                    Note           = p.Note,
                    Warranty       = p.Warranty,
                    ProductStock   = p.AddedProductCodes.Select(s => new ProductStock
                    {
                        ProductId   = p.ProductId,
                        ProductCode = s
                    }).ToList()
                }).ToList();

                Context.PurchaseList.AddRange(newPurchaseList);



                if (model.PaidAmount > 0)
                {
                    var newSellingPaymentSn = await db.PurchasePayments.GetNewSnAsync().ConfigureAwait(false);

                    var payment = new PurchasePayment
                    {
                        RegistrationId      = registrationId,
                        VendorId            = purchase.VendorId,
                        ReceiptSn           = newSellingPaymentSn,
                        PaidAmount          = model.PaidAmount,
                        AccountId           = model.AccountId,
                        PaidDate            = DateTime.Now.BdTime().Date,
                        PurchasePaymentList = new List <PurchasePaymentList>
                        {
                            new PurchasePaymentList
                            {
                                PurchasePaidAmount = model.PaidAmount,
                                PurchaseId         = model.PurchaseId
                            }
                        }
                    };

                    await Context.PurchasePayment.AddAsync(payment);
                }

                //Account add balance
                if (model.PaidAmount > 0 && model.AccountId != null)
                {
                    db.Account.BalanceSubtract(model.AccountId.Value, model.PaidAmount);
                }


                await Context.SaveChangesAsync();

                db.Vendors.UpdatePaidDue(purchase.VendorId);

                //remove purchase list
                var removedPurchaseList = Context.PurchaseList.Where(l => !l.ProductStock.Any()).ToList();

                Context.RemoveRange(removedPurchaseList);
                await Context.SaveChangesAsync();

                //Product Logs
                var codes     = model.PurchaseList.SelectMany(l => l.AddedProductCodes).ToArray();
                var stockList = Context
                                .ProductStock
                                .Include(p => p.PurchaseList)
                                .Where(s => s.PurchaseList.PurchaseId == model.PurchaseId && codes.Contains(s.ProductCode))
                                .ToList();

                if (stockList.Any())
                {
                    var productLogs = stockList.Select(c => new ProductLogAddModel
                    {
                        PurchaseId               = model.PurchaseId,
                        ProductStockId           = c.ProductStockId,
                        ActivityByRegistrationId = registrationId,
                        Details   = $"Bill Updated: Product Buy at Receipt No: {purchase.PurchaseSn}",
                        LogStatus = ProductLogStatus.PurchaseUpdate
                    }).ToList();
                    //Product log
                    db.ProductLog.AddList(productLogs);
                }

                //Return amount account update
                db.Account.PurchaseReturnRecordAdd(returnRecord);
            }
            catch (Exception e)
            {
                response.IsSuccess = false;
                response.Message   = e.Message;
                return(response);
            }

            response.IsSuccess = true;
            response.Message   = "Success";
            response.Data      = model.PurchaseId;

            return(response);
        }