Ejemplo n.º 1
0
        public ActionResult Edit(int id)
        {
            ProductModel product = ProductsHelper.ProductToProductModel(new ProductHandler().Get(id));

            ViewBag.Products = ProductsHelper.ProductsToProductModels(new ProductHandler().Get());
            return(View(product));
        }
Ejemplo n.º 2
0
        public static void Initialize(EshopDBContext dBContext)
        {
            dBContext.Database.EnsureCreated();

            if (dBContext.Carousels.Count() == 0)
            {
                IList <Carousel> carousels = CarouselHelper.GenerateCarousel();
                foreach (var item in carousels)
                {
                    dBContext.Carousels.Add(item);
                }

                dBContext.SaveChanges();
            }

            if (dBContext.Products.Count() == 0)
            {
                IList <Product> products = ProductsHelper.GenerateProducts();
                foreach (var item in products)
                {
                    dBContext.Products.Add(item);
                }
                dBContext.SaveChanges();
            }
        }
Ejemplo n.º 3
0
        public static Result <object> ReInsertInventoryToWarehouse(InvoiceDetail detail, IDataRepositoryFactory _repositoryFactory, Warehouse currentWarehouse)
        {
            var productUnitsRepo      = _repositoryFactory.GetDataRepositories <UnitProductEquivalence>();
            var inventoryRepo         = _repositoryFactory.GetDataRepositories <Inventory>();
            var warehouseMovementRepo = _repositoryFactory.GetDataRepositories <WarehouseMovement>();
            var productRepo           = _repositoryFactory.GetDataRepositories <Product>();

            Inventory currentInventory = inventoryRepo.Get(x => x.Where(y => y.ProductId == detail.ProductId && y.WarehouseId == currentWarehouse.Id && y.Active == true));

            if (currentInventory != null)
            {
                detail.Product.ProductUnits = detail.Product.ProductUnits ?? productUnitsRepo.GetAll(x => x.Where(y => y.Active && y.ProductId == detail.ProductId)).Data.ToList();

                var convertionResult = ProductsHelper.ConvertToProductPrincipalUnit(
                    currentInventory.Quantity,
                    detail.Product.ProductUnits.Where(pu => pu.IsPrimary).FirstOrDefault().UnitId,
                    detail.Product.ProductUnits
                    );
                if (convertionResult.Status < 0)
                {
                    return(convertionResult);
                }
                currentInventory.Quantity = (decimal)convertionResult.Data.FirstOrDefault();

                convertionResult = ProductsHelper.ConvertToProductPrincipalUnit(
                    detail.Quantity,
                    detail.UnitId.Value,
                    detail.Product.ProductUnits
                    );
                if (convertionResult.Status < 0)
                {
                    return(convertionResult);
                }

                detail.Quantity = (decimal)convertionResult.Data.FirstOrDefault();

                currentInventory.Quantity += detail.Quantity;
                Product Product = productRepo.Get(detail.ProductId).Data.FirstOrDefault();
                Product.Existence += detail.Quantity;
                productRepo.Update(Product);
                inventoryRepo.Update(currentInventory);
            }
            else
            {
                inventoryRepo.Add(new Inventory()
                {
                    Active      = true,
                    Quantity    = detail.Quantity,
                    WarehouseId = currentWarehouse.Id,
                    CreatedBy   = detail.CreatedBy,
                    CreatedDate = DateTime.Now,
                    ProductId   = detail.ProductId,
                    UnitId      = detail.Product.ProductUnits.Where(u => u.IsPrimary).FirstOrDefault().Id
                });
            }

            return(new Result <object>(0, 0, "ok_msg"));
        }
Ejemplo n.º 4
0
 public ProductsController()
 {
     products = ProductsHelper.linqProducts();
     // I'm deleting the shopping cart file everytime the index page is loaded.
     if (File.Exists(BasketHelper.shoppingCartFile))
     {
         File.Delete(BasketHelper.shoppingCartFile);
     }
 }
Ejemplo n.º 5
0
        public Result <object> RemoveEntries(string sequence)
        {
            Result <object> result = new Result <object>(-1, -1, "error_msg");

            using (var tran = _Context.Database.BeginTransaction())
            {
                try
                {
                    var entries = _Context.SuppliersReturns.AsNoTracking().Where(x => x.Active == true && x.Sequence == sequence).ToList();
                    entries.ForEach(e =>
                    {
                        e.Active             = false;
                        var productUnits     = _Context.UnitProductsEquivalences.AsNoTracking().Where(x => x.Active == true && x.ProductId == e.ProductId).ToList();
                        var convertionResult = ProductsHelper.ConvertToProductPrincipalUnit(
                            e.Quantity,
                            e.UnitId,
                            productUnits
                            );
                        var inventory = _Context.Inventory.AsNoTracking().FirstOrDefault(x => x.Active == true && x.ProductId == e.ProductId && x.WarehouseId == e.WarehouseId);

                        inventory.Quantity    += (decimal)convertionResult.Data.FirstOrDefault();
                        decimal currentBalance = inventory.Quantity;
                        var movement           = new WarehouseMovement()
                        {
                            CurrentBalance = currentBalance,
                            BranchOfficeId = inventory.BranchOfficeId,
                            MovementType   = Enums.MovementTypes.IN.ToString(),
                            ProductId      = inventory.ProductId,
                            Quantity       = -(decimal)convertionResult.Data.FirstOrDefault(),
                            Reference      = sequence,
                            UnitId         = inventory.UnitId,
                            WarehouseId    = inventory.WarehouseId
                        };
                        _Context.Inventory.Update(inventory);
                        _Context.SaveChanges();
                        warehouseMovements.Add(movement);
                    });
                    _Context.SuppliersReturns.UpdateRange(entries);
                    _Context.SaveChanges();
                    tran.Commit();
                    result = new Result <object>(0, 0, "ok_msg");
                }
                catch (Exception ex)
                {
                    tran.Rollback();
                    result = new Result <object>(-1, -1, "error_msg", null, new Exception(ex.Message));
                }
            }
            return(result);
        }
        public async Task <IActionResult> Get(string id)
        {
            var file = await ProductsHelper.GetProductConfig(id);

            if (string.IsNullOrEmpty(file))
            {
                return(StatusCode(404));
            }
            else
            {
                object jsonObject = JsonConvert.DeserializeObject(file);
                return(new JsonResult(jsonObject));
            }
        }
Ejemplo n.º 7
0
 /// Delete image in directory
 /// <summary>
 ///  Delete image in directory
 /// </summary>
 /// <returns>boolean</returns>
 ///
 public bool DeleteProductImages(string account_id, string product_id)
 {
     using (var db = new DBConnection())
     {
         // Query the database for the rows to be deleted.
         var DBQuery = db.ProductImages.Where(s => s.ProductID == product_id);
         try
         {
             foreach (var item in DBQuery)
             {
                 var FilePath = @"wwwroot\\files\\" + ProductsHelper.GetProductImageLink(account_id, item.ProductID);
                 if (File.Exists(FilePath))
                 {
                     File.Delete(FilePath);
                 }
             }
             return(true);
         }
         catch (Exception)
         {
             return(false);
         }
     }
 }
 public IActionResult GetAll()
 {
     return(new JsonResult(ProductsHelper.GetProductConfigsList()));
 }
Ejemplo n.º 9
0
        public static Result <object> AddInventory(InvoiceDetail detail, Invoice invoice, IDataRepositoryFactory _repositoryFactory)
        {
            var warehouseMovementRepo = _repositoryFactory.GetDataRepositories <WarehouseMovement>();
            var productUnitsRepo      = _repositoryFactory.GetDataRepositories <UnitProductEquivalence>();
            var productRepo           = _repositoryFactory.GetDataRepositories <Product>();
            var inventoryRepo         = _repositoryFactory.GetDataRepositories <Inventory>();

            if (!detail.Product.IsService)
            {
                detail.Product.ProductUnits = detail.Product.ProductUnits ?? productUnitsRepo.GetAll(x => x.Where(y => y.Active == true && y.ProductId == detail.ProductId)).Data.ToList();


                if (detail.WarehouseId.HasValue)
                {
                    Inventory currentInventory = inventoryRepo.Get(x => x.Where(y => y.Active == true && y.ProductId == detail.ProductId && y.WarehouseId == detail.WarehouseId.Value));
                    if (currentInventory != null)
                    {
                        var convertionResult = ProductsHelper.ConvertToProductPrincipalUnit(
                            currentInventory.Quantity,
                            detail.Product.ProductUnits.Where(pu => pu.IsPrimary).FirstOrDefault().UnitId,
                            detail.Product.ProductUnits
                            );
                        if (convertionResult.Status < 0)
                        {
                            return(convertionResult);
                        }

                        currentInventory.Quantity = (decimal)convertionResult.Data.FirstOrDefault();

                        convertionResult = ProductsHelper.ConvertToProductPrincipalUnit(
                            detail.Quantity,
                            detail.UnitId.Value,
                            detail.Product.ProductUnits
                            );
                        if (convertionResult.Status < 0)
                        {
                            return(convertionResult);
                        }

                        detail.Quantity = (decimal)convertionResult.Data.FirstOrDefault();
                        var units = detail.Product.ProductUnits ?? productUnitsRepo.GetAll(x => x.Where(y => y.Active == true && y.ProductId == detail.ProductId)).Data.ToList();


                        currentInventory.Quantity += detail.Quantity;
                        Product Product = productRepo.Get(detail.ProductId).Data.FirstOrDefault();
                        Product.Existence += detail.Quantity;
                        productRepo.Update(Product);
                        inventoryRepo.Update(currentInventory);

                        WarehouseMovement movimientoAlmacen = new WarehouseMovement(currentInventory.WarehouseId, detail.ProductId, detail.Quantity, true,
                                                                                    units.Where(u => u.IsPrimary).FirstOrDefault().UnitId, 0, "IN", invoice.InvoiceNumber ?? invoice.DocumentNumber ?? string.Empty, currentInventory.Quantity);
                        warehouseMovementRepo.Add(movimientoAlmacen);
                        return(new Result <object>(0, 0, "ok_msg"));
                    }
                    else
                    {
                        return(new Result <object>(-1, -1, $"outOfStock_msg | {detail.Product.Name}"));
                    }
                }
            }

            return(new Result <object>(0, 0, "ok_msg"));
        }
Ejemplo n.º 10
0
        public static Result <object> UpdateInventory(InvoiceDetail detail, Warehouse currentWarehouse, Invoice invoice, IDataRepositoryFactory _repositoryFactory)
        {
            var       warehouseMovementRepo = _repositoryFactory.GetDataRepositories <WarehouseMovement>();
            var       productUnitsRepo      = _repositoryFactory.GetDataRepositories <UnitProductEquivalence>();
            var       productRepo           = _repositoryFactory.GetDataRepositories <Product>();
            var       inventoryRepo         = _repositoryFactory.GetDataRepositories <Inventory>();
            Inventory currentInventory      = inventoryRepo.Get(x => x.Where(y => y.Active == true && y.ProductId == detail.ProductId && y.WarehouseId == currentWarehouse.Id));

            if (currentInventory != null)
            {
                var convertionResult = ProductsHelper.ConvertToProductPrincipalUnit(
                    detail.Quantity,
                    detail.UnitId.Value,
                    detail.Product.ProductUnits
                    );
                if (convertionResult.Status >= 0)
                {
                    detail.Quantity = (decimal)convertionResult.Data.FirstOrDefault();
                }
                else
                {
                    return(convertionResult);
                }

                detail.UnitId    = detail.Product.ProductUnits.FirstOrDefault(pu => pu.IsPrimary).UnitId;
                convertionResult = ProductsHelper.ConvertFromProductPrincipalUnit(
                    currentInventory.Quantity,
                    detail.Product.ProductUnits.Where(pu => pu.IsPrimary).FirstOrDefault().UnitId,
                    detail.Product.ProductUnits
                    );

                if (convertionResult.Status >= 0)
                {
                    currentInventory.Quantity = (decimal)convertionResult.Data.FirstOrDefault();
                }
                else
                {
                    return(convertionResult);
                }


                if (currentInventory.Quantity < detail.Quantity)
                {
                    return(new Result <object>(-1, -1, $"outOfStock_msg | {detail.Product.Name},{currentWarehouse.Name}"));
                }
                else
                {
                    currentInventory.Quantity -= detail.Quantity;
                    Product product = productRepo.Get(detail.ProductId).Data?.FirstOrDefault();
                    product.Existence -= detail.Quantity;
                    productRepo.Update(product);
                    inventoryRepo.Update(currentInventory);


                    var units = detail.Product.ProductUnits ?? productUnitsRepo.GetAll(x => x.Where(y => y.Active == true && y.ProductId == detail.ProductId)).Data;
                    WarehouseMovement movement = new WarehouseMovement(currentWarehouse.Id, detail.ProductId, detail.Quantity * -1,
                                                                       true, units.Where(u => u.IsPrimary).FirstOrDefault().UnitId, 0, "OUT",
                                                                       invoice.InvoiceNumber ?? invoice.DocumentNumber ?? string.Empty, currentInventory.Quantity);

                    warehouseMovementRepo.Add(movement);
                    return(new Result <object>(0, 0, "ok_msg"));
                }
            }
            else
            {
                return(new Result <object>(-1, -1, $"outOfStock_msg | {detail.Product.Name},{currentWarehouse.Name}"));
            }
        }
Ejemplo n.º 11
0
 static DatabaseFake()
 {
     Carousels = CarouselHelper.GenerateCarousel();
     Products  = ProductsHelper.GenerateProducts();
 }
Ejemplo n.º 12
0
 // GET: Home
 public ActionResult Index()
 {
     ViewBag.Categories = CommonHelper.ToDropDownList(new CategoryHandler().Get());
     ViewBag.Products   = ProductsHelper.ProductsToProductModels(new ProductHandler().Get());
     return(View());
 }
Ejemplo n.º 13
0
        protected override Result <LeadDetail> ProcessReturnDetail(long branchOfficeId, LeadDetail detail, IDataRepositoryFactory dataRepositoryFactory, InvoiceLead invoice)
        {
            Inventory currentInventory = null;
            var       warehouseRepo    = dataRepositoryFactory.GetDataRepositories <Warehouse>();
            var       productRepo      = dataRepositoryFactory.GetDataRepositories <Product>();
            var       inventoryRepo    = dataRepositoryFactory.GetDataRepositories <Inventory>();
            var       productUnitsRepo = dataRepositoryFactory.GetDataRepositories <UnitProductEquivalence>();
            var       logMovementsRepo = dataRepositoryFactory.GetDataRepositories <WarehouseMovement>();

            if (detail.WarehouseId.HasValue)
            {
                detail.Product.ProductUnits = detail.Product.ProductUnits == null || detail.Product.ProductUnits.Count() == 0 ?
                                              productUnitsRepo.GetAll(x => x.AsNoTracking().Where(y => y.Active == true && y.ProductId == detail.ProductId)).Data.ToList() : detail.Product.ProductUnits;

                if (detail.Defective)
                {
                    var defectiveWarehouse = warehouseRepo.Get(x => x.AsNoTracking().Where(y => y.Active == true && y.Code == "DEF" && y.BranchOfficeId == branchOfficeId));
                    if (defectiveWarehouse == null)
                    {
                        return(new Result <LeadDetail>(-1, -1, $"defWarehouseNotExit_msg"));
                    }

                    currentInventory = inventoryRepo.Get(x => x.AsNoTracking().Where(y => y.Active == true && y.BranchOfficeId == branchOfficeId && y.ProductId == detail.ProductId &&
                                                                                     y.WarehouseId == defectiveWarehouse.Id)) ??
                                       new Inventory()
                    {
                        WarehouseId    = defectiveWarehouse.Id,
                        ProductId      = detail.ProductId,
                        Active         = true,
                        Quantity       = 0,
                        CreatedBy      = detail.CreatedBy,
                        CreatedDate    = DateTime.Now,
                        BranchOfficeId = branchOfficeId,
                        UnitId         = detail.Product.ProductUnits.FirstOrDefault(u => u.IsPrimary).UnitId,
                        Product        = detail.Product
                    };
                }
                else
                {
                    currentInventory = inventoryRepo.Get(x => x.AsNoTracking().Where(y => y.Active == true && y.ProductId == detail.ProductId && y.WarehouseId == detail.WarehouseId));
                }
                if (currentInventory != null)
                {
                    currentInventory.Product.ProductUnits = currentInventory.Product.ProductUnits == null || currentInventory.Product.ProductUnits.Count() == 0 ?
                                                            productUnitsRepo.GetAll(x => x.AsNoTracking().Where(y => y.Active == true && y.ProductId == currentInventory.ProductId)).Data.ToList(): currentInventory.Product.ProductUnits;

                    currentInventory.Quantity = (decimal)ProductsHelper.ConvertToProductPrincipalUnit(
                        currentInventory.Quantity,
                        detail.Product.ProductUnits.FirstOrDefault(pu => pu.IsPrimary).UnitId,
                        detail.Product.ProductUnits.ToList()
                        ).Data.FirstOrDefault();
                    detail.Quantity = (decimal)ProductsHelper.ConvertToProductPrincipalUnit(
                        detail.Quantity,
                        detail.UnitId.Value,
                        detail.Product.ProductUnits.ToList()
                        ).Data.FirstOrDefault();
                    var units = detail.Product.ProductUnits == null || detail.Product.ProductUnits.Count() == 0 ?
                                productUnitsRepo.GetAll(x => x.AsNoTracking().Where(y => y.Active == true && y.ProductId == detail.ProductId)).Data.ToList() : detail.Product.ProductUnits;

                    var warehouseMov = new WarehouseMovement(currentInventory.WarehouseId, detail.ProductId, detail.Quantity, true,
                                                             units.Where(u => u.IsPrimary).FirstOrDefault().UnitId, branchOfficeId, "IN", invoice.InvoiceNumber ?? invoice.DocumentNumber ?? string.Empty);
                    logMovementsRepo.Add(warehouseMov);

                    currentInventory.Quantity += detail.Quantity;
                    currentInventory.UnitId    = currentInventory.Product.ProductUnits.FirstOrDefault(x => x.IsPrimary).UnitId;
                    Product Product = productRepo.Get(detail.ProductId).Data.FirstOrDefault();
                    Product.Existence += detail.Quantity;
                    productRepo.Update(Product);
                    if (currentInventory.Id > 0)
                    {
                        inventoryRepo.Update(currentInventory);
                    }
                    else
                    {
                        inventoryRepo.Add(currentInventory);
                    }
                }
                else
                {
                    return(new Result <LeadDetail>(-1, -1, "outOfStock_msg"));
                }
            }

            return(new Result <LeadDetail>(0, 0, "ok_msg", new List <LeadDetail>()
            {
                detail
            }));
        }
Ejemplo n.º 14
0
        public static Result <Invoice> UpdateDetails(Invoice invoice, IDataRepositoryFactory dataRepositoryFactory)
        {
            var detailsRepo      = dataRepositoryFactory.GetCustomDataRepositories <IInvoiceDetailRepository>();
            var productUnitsRepo = dataRepositoryFactory.GetCustomDataRepositories <IUnitProductEquivalenceRepository>();
            var oldDetails       = detailsRepo.GetByInvoiceId(invoice.Id).ToList();
            var newDetails       = invoice.InvoiceDetails.Where(x => x.Id == 0).ToList();
            var modifiedDetails  = invoice.InvoiceDetails.Except(newDetails).ToList().Except(oldDetails).ToList();
            var untouchedDetails = invoice.InvoiceDetails.Intersect(oldDetails).ToList();



            oldDetails.ForEach(d =>
            {
                bool existe = (modifiedDetails.Exists(x => x.ProductId == d.ProductId && d.ParentId == null) || untouchedDetails.Exists(x => x.ProductId == d.ProductId && d.ParentId == null));
                if (!existe)
                {
                    detailsRepo.Remove(d.Id);
                    var result = InventoryHelper.AddInventory(d, invoice, dataRepositoryFactory);
                    if (result.Status < 0)
                    {
                        throw new Exception(result.Message);
                    }
                }
            });


            Invoice newinvoice = new Invoice(invoice);

            newinvoice.InvoiceDetails = newDetails;
            AddDetails(newinvoice, dataRepositoryFactory);


            modifiedDetails.ForEach(d =>
            {
                if (!d.Product.IsService)
                {
                    var oldDetail           = oldDetails.Where(x => x.Id == d.Id).FirstOrDefault();
                    decimal currentQuantity = (decimal)ProductsHelper.ConvertToProductPrincipalUnit(
                        d.Quantity,
                        d.UnitId.Value,
                        d.Product.ProductUnits == null || d.Product.ProductUnits.Count == 0 ? productUnitsRepo.GetProductUnits(d.ProductId).ToList() : d.Product.ProductUnits
                        ).Data.FirstOrDefault();

                    decimal oldQuantity = (decimal)ProductsHelper.ConvertToProductPrincipalUnit(
                        oldDetail.Quantity,
                        oldDetail.UnitId.Value,
                        oldDetail.Product.ProductUnits == null || oldDetail.Product.ProductUnits.Count == 0 ? productUnitsRepo.GetProductUnits(oldDetail.ProductId).ToList() : oldDetail.Product.ProductUnits
                        ).Data.FirstOrDefault();
                    decimal difference = currentQuantity - oldQuantity;
                    if (difference > 0)
                    {
                        var warehouse = invoice.BranchOffice.Warehouses?.Where(y => y.Id == d.WarehouseId).FirstOrDefault();
                        if (warehouse == null)
                        {
                            throw new Exception("warehouseError_msg");
                        }


                        InvoiceDetail nuevoDetalle = new InvoiceDetail()
                        {
                            Product   = d.Product,
                            ProductId = d.ProductId,
                            Quantity  = difference,
                            UnitId    = d.UnitId ?? null,
                            Unit      = d.Unit ?? null
                        };

                        var result = InventoryHelper.UpdateInventory(nuevoDetalle, warehouse, invoice, dataRepositoryFactory);
                        if (result.Status < 0)
                        {
                            throw new Exception(result.Message);
                        }
                    }
                    else if (difference < 0)
                    {
                        InvoiceDetail detailToInsert = new InvoiceDetail(d);
                        detailToInsert.Quantity      = Math.Abs(difference);
                        detailToInsert.Unit          = d.Product.ProductUnits.Where(u => u.IsPrimary).FirstOrDefault().Unit;
                        detailToInsert.UnitId        = detailToInsert.Unit.Id;
                        var result = InventoryHelper.AddInventory(detailToInsert, invoice, dataRepositoryFactory);
                        if (result.Status < 0)
                        {
                            throw new Exception(result.Message);
                        }
                    }
                    detailsRepo.Update(d);
                }
                else
                {
                    detailsRepo.Update(d);
                }
            });

            UpdateInvoiceTaxes(invoice, dataRepositoryFactory);
            return(new Result <Invoice>(0, 0, "ok_msg", new List <Invoice>()
            {
                invoice
            }));
        }
Ejemplo n.º 15
0
        public Result <object> AddInventoryList(List <SupplierReturn> entries, string reference, string details)
        {
            var result = new Result <object>(-1, -1, "error_msg");

            using (var tran = _Context.Database.BeginTransaction())
            {
                try
                {
                    string           sequence    = sequenceRepo.CreateSequence(SequenceTypes.SupplierReturns);
                    List <Inventory> inventories = new List <Inventory>();
                    entries.ForEach(e =>
                    {
                        var currency = e.Currency ?? _Context.Currencies.Find(e.CurrencyId);
                        _Context.Entry <Currency>(currency).State = EntityState.Detached;
                        e.ExchangeRate    = currency.ExchangeRate;
                        e.Details         = details;
                        e.Date            = DateTime.Now;
                        e.Reference       = reference;
                        e.BeforeTaxAmount = e.ProductCost * e.Quantity;
                        if (e.TaxAmount <= 0 && e.NoTaxes == false)
                        {
                            throw new Exception("taxIsReq_msg");
                        }
                        e.TotalAmount        = e.TaxAmount + e.BeforeTaxAmount;
                        e.ExchangeRateAmount = e.TotalAmount * currency.ExchangeRate;
                        e.Sequence           = sequence;

                        int inventoryIndex = inventories.FindIndex(x => x.ProductId == e.ProductId && x.WarehouseId == e.WarehouseId);
                        e.Product          = e.Product != null ? e.Product : new Product()
                        {
                            Id = e.ProductId
                        };
                        e.Product.ProductUnits = _Context.UnitProductsEquivalences.Include(x => x.Unit).AsNoTracking().Where(x => x.Active == true && x.ProductId == e.ProductId);
                        var convertionResult   = ProductsHelper.ConvertToProductPrincipalUnit(
                            e.Quantity,
                            e.UnitId,
                            e.Product.ProductUnits.ToList()
                            );
                        if (inventoryIndex < 0)
                        {
                            inventories.Add(new Inventory()
                            {
                                Quantity       = -1 * (convertionResult.Status >= 0 ? (decimal)convertionResult.Data.FirstOrDefault() : 0),
                                BranchOfficeId = e.BranchOfficeId,
                                ProductId      = e.ProductId,
                                UnitId         = e.Product.ProductUnits.FirstOrDefault(x => x.IsPrimary == true).UnitId,
                                WarehouseId    = e.WarehouseId
                            });
                        }
                        else
                        {
                            inventories[inventoryIndex].Quantity += -1 * (convertionResult.Status >= 0 ? (decimal)convertionResult.Data.FirstOrDefault() : 0);
                        }
                        e.Supplier  = null;
                        e.Product   = null;
                        e.Unit      = null;
                        e.Warehouse = null;
                        e.Currency  = null;
                    });
                    if (entries.Count > 0)
                    {
                        _Context.SuppliersReturns.AddRange(entries);
                        _Context.SaveChanges();
                    }


                    inventories.ForEach(inventory =>
                    {
                        decimal currentQuantity = 0;
                        var currentInventory    = _Context.Inventory.AsNoTracking().FirstOrDefault(x => x.ProductId == inventory.ProductId && x.WarehouseId == inventory.WarehouseId && x.UnitId == inventory.UnitId && x.Active == true);
                        if (currentInventory != null)
                        {
                            currentInventory.Quantity += inventory.Quantity;
                            currentQuantity            = currentInventory.Quantity;
                            _Context.Inventory.Update(currentInventory);
                            _Context.SaveChanges();
                        }
                        else
                        {
                            throw new Exception("inventoryDoesntExist_msg");
                        }

                        var movement = new WarehouseMovement()
                        {
                            CurrentBalance = currentQuantity,
                            BranchOfficeId = inventory.BranchOfficeId,
                            MovementType   = Enums.MovementTypes.OUT.ToString(),
                            ProductId      = inventory.ProductId,
                            Quantity       = inventory.Quantity,
                            Reference      = sequence,
                            UnitId         = inventory.UnitId,
                            WarehouseId    = inventory.WarehouseId
                        };
                        warehouseMovements.Add(movement);
                    });
                    tran.Commit();
                    return(new Result <object>(0, 0, "ok_msg"));
                }
                catch (Exception ex)
                {
                    tran.Rollback();
                    result = new Result <object>(-1, -1, "error_msg", null, new Exception(ex.Message));
                }
            }

            return(result);
        }
Ejemplo n.º 16
0
        static void Main(string[] args)
        {
            var products = ProductsHelper.GetAllProducts();

            Console.WriteLine("All the products in the store are:");
            products.ForEach(produt => Console.WriteLine(produt.Name));

            //Search products by category // return all products from given category
            var allByCategory = products.Where(product => product.Category.Equals(Category.ItEquipment)).ToList();

            Console.WriteLine("\n\nAll the products in category ITEQuip are:");
            allByCategory.ForEach(product => Console.WriteLine(product.Name));


            //Filter products by price range(from min to max) // return all products that fall in the given price range
            var productsByPrice = products.OrderBy(product => product.Price).ToList();

            Console.WriteLine("\n\nOrdered by price:");
            productsByPrice.ForEach(product => Console.WriteLine(product.Name));

            //Find products by part of name // get all products that consist the part in their names
            var partOfNameSearch = products.Where(product => product.Name.ToLower().Contains("tra")).ToList();

            Console.WriteLine("\n\nOrdered by part of name:");
            partOfNameSearch.ForEach(product => Console.WriteLine(product.Name));

            //Get only products ids // return only the ids of the products
            Console.WriteLine("\n\nList of all IDs of the products:");
            products.ForEach(product => Console.WriteLine(product.generateID()));


            //Get product price // get the price of the product - give the id as parameter
            var priceProducts = products.Select(product => product.Price).ToList();

            Console.WriteLine("\n\nList of all prices of the products:");
            priceProducts.ForEach(product => Console.WriteLine(product));

            //Get cheapest product // return the cheapest product
            var lowestPrice     = products.Min(product => product.Price);
            var cheapestProduct = products.SingleOrDefault(product => product.Price.Equals(lowestPrice));

            Console.WriteLine("\n\nThe cheapest product is:");
            Console.WriteLine(cheapestProduct.Name);


            //vtor obid
            var lowest = products.OrderBy(product => product.Price).Take(1).ToList();

            foreach (var item in lowest)
            {
                Console.WriteLine(item.Name);
            }

            //Get most expensive product // return the most expensive one
            var highestPrice    = products.Max(product => product.Price);
            var priciestProduct = products.SingleOrDefault(product => product.Price.Equals(highestPrice));

            Console.WriteLine("\n\nThe most expencive product is:");
            Console.WriteLine(priciestProduct.Name);


            //Add product // create method to add product to the list of products
            ProductsHelper.AddProduct(products, "RAM", 3500, Category.ItEquipment);
            Console.WriteLine("\n\nWith added product:");
            products.ForEach(product => Console.WriteLine(product.Name));

            //Remove product // and a method to remove it - use id as parameter
            ProductsHelper.RemoveProduct(products, "RAM");
            Console.WriteLine("\n\nWith removed product:");
            products.ForEach(product => Console.WriteLine(product.Name));

            Console.ForegroundColor = ConsoleColor.Blue;
            Console.WriteLine("\n\n\bThis is the end");
            Console.ReadLine();
        }
Ejemplo n.º 17
0
        protected override Result <LeadDetail> ProcessDetail(long branchOfficeId, LeadDetail detail, IDataRepositoryFactory dataRepositoryFactory, InvoiceLead invoiceLead)
        {
            var        inventoriesRepo  = dataRepositoryFactory.GetDataRepositories <Inventory>();
            var        warehouseRepo    = dataRepositoryFactory.GetDataRepositories <Warehouse>();
            var        productUnitsRepo = dataRepositoryFactory.GetDataRepositories <UnitProductEquivalence>();
            LeadDetail newDetail        = new LeadDetail(detail);

            detail.Product.ProductUnits = detail.Product.ProductUnits == null || detail.Product.ProductUnits.Count() == 0 ?
                                          productUnitsRepo.GetAll(x => x.AsNoTracking().Where(y => y.Active == true && y.ProductId == detail.ProductId)).Data.ToList() : detail.Product.ProductUnits;
            var convertionResult = ProductsHelper.ConvertToProductPrincipalUnit(
                newDetail.Quantity,
                newDetail.UnitId.Value,
                newDetail.Product.ProductUnits.ToList()
                );

            if (convertionResult.Status < 0)
            {
                return(new Result <LeadDetail>(-1, -1, convertionResult.Message));
            }

            decimal warehouseQuantity = (decimal)convertionResult.Data.FirstOrDefault();
            decimal quantitySumm      = warehouseQuantity;

            LeadDetail newDetailCustom = new LeadDetail(newDetail)
            {
                Quantity = warehouseQuantity
            };
            Warehouse warehouse = null;

            if ((invoiceLead.WarehouseId <= 0))
            {
                var branchOfficeWarehouses = warehouseRepo.GetAll(x => x.AsNoTracking().Where(y => y.Active == true && y.BranchOfficeId == branchOfficeId &&
                                                                                              y.Code.ToLower() != "DEF")).Data.ToList();
                // ojo ojo ojo
                var productInventory = inventoriesRepo.Get(x => x.AsNoTracking().Where(y => y.Active == true && y.ProductId == newDetail.ProductId &&
                                                                                       y.Quantity >= warehouseQuantity && branchOfficeWarehouses.Select(r => r.Id).ToList().Contains(y.WarehouseId)));

                if (productInventory == null)
                {
                    return(new Result <LeadDetail>(-1, -1, "outOfStock_msg"));
                }
                // ojo ojo ojo

                warehouse = branchOfficeWarehouses.FirstOrDefault(x => x.Id == productInventory.WarehouseId);
            }
            else
            {
                warehouse = warehouseRepo.Get(invoiceLead.WarehouseId).Data.FirstOrDefault();
            }


            if ((invoiceLead.WarehouseId > 0) && (inventoriesRepo.Get(x => x.AsNoTracking().Where(y => y.Active == true && y.ProductId == newDetail.ProductId &&
                                                                                                  y.Quantity >= warehouseQuantity && y.WarehouseId == invoiceLead.WarehouseId)) == null))
            {
                return(new Result <LeadDetail>(-1, -1, $"outOfStock_msg | {detail.Product?.Name?? ""}"));
            }

            if (warehouse == null)
            {
                var branchOfficeWarehouses = warehouseRepo.GetAll(x => x.AsNoTracking().Where(y => y.Active == true && y.BranchOfficeId == branchOfficeId &&
                                                                                              y.Code.ToLower() != "DEF")).Data.ToList();
                // ojo ojo ojo
                var branchOfficeInventory = inventoriesRepo.GetAll(x => x.AsNoTracking().Where(y => y.Active == true && y.ProductId == newDetail.ProductId &&
                                                                                               y.Quantity > 0 && branchOfficeWarehouses.Select(r => r.Id).ToList().Contains(y.WarehouseId))).Data.ToList();

                if (branchOfficeInventory == null)
                {
                    return(new Result <LeadDetail>(-1, -1, $"outOfStock_msg | {newDetail.Product.Name}"));
                }


                convertionResult = ProductsHelper.ConvertToProductPrincipalUnit(
                    branchOfficeInventory.Sum(p => p.Quantity),
                    branchOfficeInventory.FirstOrDefault().UnitId,
                    newDetail.Product.ProductUnits.ToList()
                    );
                if (convertionResult.Status < 0)
                {
                    return(new Result <LeadDetail>(-1, -1, convertionResult.Message));
                }

                decimal warehousesQuantitySumm = (decimal)convertionResult.Data.FirstOrDefault();

                if (warehousesQuantitySumm < warehouseQuantity)
                {
                    return(new Result <LeadDetail>(-1, -1, $"outOfStock_msg | {newDetail.Product.Name}"));
                }

                foreach (Inventory warehouseProduct in branchOfficeInventory)
                {
                    if (quantitySumm <= 0)
                    {
                        break;
                    }
                    decimal currentWarehouseQuantity = warehouseProduct.Quantity;
                    if (quantitySumm < currentWarehouseQuantity)
                    {
                        currentWarehouseQuantity = quantitySumm;
                    }

                    newDetailCustom          = new LeadDetail(newDetail);
                    newDetailCustom.Quantity = (decimal)ProductsHelper.ConvertFromProductPrincipalUnit(
                        currentWarehouseQuantity,
                        newDetail.UnitId.Value,
                        newDetail.Product.ProductUnits.ToList()
                        ).Data.FirstOrDefault();

                    newDetailCustom.WarehouseId = warehouseProduct.WarehouseId;
                    //  newDetailCustom.UnitId = newDetailCustom.Product.ProductUnits.FirstOrDefault(x => x.IsPrimary).UnitId;
                    InventoryHelper.UpdateInventory(newDetailCustom, warehouseRepo.Get(warehouseProduct.WarehouseId).Data.FirstOrDefault(), invoiceLead, dataRepositoryFactory);
                    newDetail.WarehouseId = warehouseProduct.WarehouseId;

                    quantitySumm -= currentWarehouseQuantity;
                }
            }
            else
            {
                newDetail.WarehouseId  = warehouse.Id;
                newDetailCustom.Unit   = newDetailCustom.Product.ProductUnits.FirstOrDefault(x => x.IsPrimary).Unit;
                newDetailCustom.UnitId = newDetailCustom.Unit.Id;
                InventoryHelper.UpdateInventory(newDetailCustom, warehouse, invoiceLead, dataRepositoryFactory);
            }

            return(new Result <LeadDetail>(0, 0, "ok_msg", new List <LeadDetail>()
            {
                newDetail
            }));
        }
Ejemplo n.º 18
0
 public ProdcutsDemo1 GenerateProducts(Func <Product, bool> action = null)
 {
     _products = new ArrayList();
     _products.AddRange(ProductsHelper.RetrieveProducts((action)));
     return(this);
 }
Ejemplo n.º 19
0
 public IActionResult GetAll()
 {
     return(new JsonResult(ProductsHelper.GetProductConfigsList(_hostEnvironment.ContentRootPath)));
 }
        public Result <object> AddTransfersList(List <WarehouseTransfer> entries, string reference, string details)
        {
            var result = new Result <object>(-1, -1, "error_msg");

            using (var tran = _Context.Database.BeginTransaction())
            {
                try
                {
                    string           sequence    = sequenceRepo.CreateSequence(SequenceTypes.WarehouseTransfers);
                    List <Inventory> inventories = new List <Inventory>();
                    entries.ForEach(e =>
                    {
                        e.Details   = details;
                        e.Date      = DateTime.Now;
                        e.Reference = reference;
                        e.Sequence  = sequence;

                        int destinyIndex = inventories.FindIndex(x => x.ProductId == e.ProductId && x.WarehouseId == e.DestinyId);
                        int originIndex  = inventories.FindIndex(x => x.ProductId == e.ProductId && x.WarehouseId == e.OriginId);
                        e.Product        = e.Product != null ? e.Product : new Product()
                        {
                            Id = e.ProductId
                        };
                        e.Product.ProductUnits = _Context.UnitProductsEquivalences.Include(x => x.Unit).AsNoTracking().Where(x => x.Active == true && x.ProductId == e.ProductId);
                        var convertionResult   = ProductsHelper.ConvertToProductPrincipalUnit(
                            e.Quantity,
                            e.UnitId,
                            e.Product.ProductUnits.ToList()
                            );
                        if (destinyIndex < 0)
                        {
                            inventories.Add(new Inventory()
                            {
                                Quantity       = convertionResult.Status >= 0 ? (decimal)convertionResult.Data.FirstOrDefault() : 0,
                                BranchOfficeId = e.DestinyBranchOfficeId,
                                ProductId      = e.ProductId,
                                UnitId         = e.Product.ProductUnits.FirstOrDefault(x => x.IsPrimary == true).UnitId,
                                WarehouseId    = e.DestinyId
                            });
                        }
                        else
                        {
                            inventories[destinyIndex].Quantity += convertionResult.Status >= 0 ? (decimal)convertionResult.Data.FirstOrDefault() : 0;
                        }

                        if (originIndex < 0)
                        {
                            inventories.Add(new Inventory()
                            {
                                Quantity       = convertionResult.Status >= 0 ? -1 * (decimal)convertionResult.Data.FirstOrDefault() : 0,
                                BranchOfficeId = e.OriginBranchOfficeId,
                                ProductId      = e.ProductId,
                                UnitId         = e.Product.ProductUnits.FirstOrDefault(x => x.IsPrimary == true).UnitId,
                                WarehouseId    = e.OriginId
                            });
                        }
                        else
                        {
                            inventories[originIndex].Quantity += convertionResult.Status >= 0 ?-1 * (decimal)convertionResult.Data.FirstOrDefault() : 0;
                        }
                        e.OriginBranchOffice = null;
                        e.Product            = null;
                        e.Unit = null;
                        e.DestinyBranchOffice = null;
                        e.Origin  = null;
                        e.Destiny = null;
                    });

                    _Context.WarehousesTransfers.AddRange(entries);
                    _Context.SaveChanges();

                    inventories.ForEach(inventory =>
                    {
                        if (inventory.Quantity != 0)
                        {
                            var currentInventory = _Context.Inventory.AsNoTracking().FirstOrDefault(x => x.ProductId == inventory.ProductId && x.WarehouseId == inventory.WarehouseId && x.UnitId == inventory.UnitId && x.Active == true);
                            if (currentInventory != null)
                            {
                                currentInventory.Quantity += inventory.Quantity;
                                _Context.Inventory.Update(currentInventory);
                            }
                            else
                            {
                                _Context.Inventory.Add(inventory);
                            }
                            _Context.SaveChanges();
                            var movement = new WarehouseMovement()
                            {
                                CurrentBalance = currentInventory.Quantity,
                                BranchOfficeId = inventory.BranchOfficeId,
                                MovementType   = inventory.Quantity > 0 ? Enums.MovementTypes.IN.ToString() : Enums.MovementTypes.OUT.ToString(),
                                ProductId      = inventory.ProductId,
                                Quantity       = inventory.Quantity,
                                Reference      = sequence,
                                UnitId         = inventory.UnitId,
                                WarehouseId    = inventory.WarehouseId
                            };
                            warehouseMovements.Add(movement);
                        }
                    });
                    tran.Commit();
                    return(new Result <object>(0, 0, "ok_msg"));
                }
                catch (Exception ex)
                {
                    tran.Rollback();
                    result = new Result <object>(-1, -1, "error_msg", null, new Exception(ex.Message));
                }
            }

            return(result);
        }