Exemplo n.º 1
0
        static void UpdateInvoiceTaxes(Invoice invoice, IDataRepositoryFactory dataRepositoryFactory)
        {
            var invoiceTaxRepo       = dataRepositoryFactory.GetCustomDataRepositories <IInvoiceTaxRepository>();
            var productTaxRepository = dataRepositoryFactory.GetCustomDataRepositories <IProductTaxRepository>();
            var invoiceTaxes         = invoiceTaxRepo.GetInvoiceTaxes(invoice.InvoiceNumber).ToList();

            if (invoiceTaxes != null && invoiceTaxes.Count > 0)
            {
                foreach (var tax in invoiceTaxes)
                {
                    invoiceTaxRepo.Remove(tax.Id);
                }
            }
            Dictionary <long, decimal> amountPerTax = new Dictionary <long, decimal>();

            invoice.InvoiceDetails.ForEach(x =>
            {
                x.InvoiceId = invoice.Id;

                var productTaxes = x.Product?.Taxes != null && x.Product?.Taxes.Count > 0 ? x.Product.Taxes :
                                   productTaxRepository.GetProductTaxes(x.ProductId);
                foreach (var impuesto in productTaxes)
                {
                    if (amountPerTax.Any(i => i.Key == impuesto.TaxId))
                    {
                        amountPerTax[impuesto.TaxId] += impuesto.Tax.Rate * x.BeforeTaxesAmount;
                    }
                    else
                    {
                        amountPerTax.Add(impuesto.TaxId, impuesto.Tax.Rate * x.BeforeTaxesAmount);
                    }
                }
            });

            foreach (var invoiceTaxAmount in amountPerTax)
            {
                InvoiceTax InvoiceImpuesto = new InvoiceTax()
                {
                    CreatedBy     = invoice.CreatedBy,
                    Active        = true,
                    InvoiceId     = invoice.Id,
                    CreatedDate   = DateTime.Now,
                    TaxId         = invoiceTaxAmount.Key,
                    CurrencyId    = invoice.CurrencyId,
                    TaxAmount     = invoiceTaxAmount.Value,
                    InvoiceNumber = string.IsNullOrEmpty(invoice.InvoiceNumber) ? invoice.DocumentNumber : invoice.InvoiceNumber,
                };
                invoiceTaxRepo.Add(InvoiceImpuesto);
            }
        }
Exemplo n.º 2
0
        public static void UpdateExpenseTaxes(Expense expense, IDataRepositoryFactory dataRepositoryFactory)
        {
            var expensesTaxRepo = dataRepositoryFactory.GetCustomDataRepositories <IExpenseTaxRepository>();

            expense.Taxes = expense.Taxes == null ? new List <ExpenseTax>() : expense.Taxes;
            var expenseTaxes = expensesTaxRepo.GetExpenseTaxes(expense.ExpenseReference).ToList();

            if (expenseTaxes != null && expenseTaxes.Count > 0)
            {
                foreach (ExpenseTax tax in expenseTaxes)
                {
                    expensesTaxRepo.Remove(tax.Id);
                }
            }



            foreach (var expenseTax in expense.Taxes)
            {
                ExpenseTax tax = new ExpenseTax()
                {
                    CreatedBy   = expense.CreatedBy,
                    Active      = true,
                    ExpenseId   = expense.Id,
                    Date        = DateTime.Now,
                    CreatedDate = DateTime.Now,
                    TaxId       = expenseTax.TaxId,
                    CurrencyId  = expense.CurrencyId,
                    TaxAmount   = expenseTax.TaxAmount,
                    Reference   = expense.ExpenseReference,
                };
                expensesTaxRepo.Add(tax);
            }
        }
Exemplo n.º 3
0
        public static bool IsProductInWarehouse(int productId, IDataRepositoryFactory dataRepositoryFactory)
        {
            var inventoryRepo = dataRepositoryFactory.GetCustomDataRepositories <IInventoryRepository>();

            if (inventoryRepo.GetProductInventory(productId).Where(e => e.Quantity > 0).Count() > 0)
            {
                return(true);
            }
            return(false);
        }
Exemplo n.º 4
0
        public static bool IsBaseProduct(int productId, IDataRepositoryFactory dataRepositoryFactory)
        {
            var repo = dataRepositoryFactory.GetCustomDataRepositories <ICompositeProductRepository>();

            if (repo.GetDerivedProducts(productId).Count() > 0)
            {
                return(true);
            }
            return(false);
        }
Exemplo n.º 5
0
        public static bool ExistProductInInvoices(int productId, IDataRepositoryFactory dataRepositoryFactory)
        {
            var detailsRepo = dataRepositoryFactory.GetCustomDataRepositories <IInvoiceDetailRepository>();

            if (detailsRepo.GetByProductId(productId).ToList().Count > 0)
            {
                return(true);
            }
            return(false);
        }
Exemplo n.º 6
0
 public CompanyStateController(IOptions <AppSettings> appSettings, IDataRepositoryFactory repositoryFactory, IMemoryCache cache)
 {
     this._customRepo      = repositoryFactory.GetCustomDataRepositories <IInvoiceRepository>();
     _repositoryFactory    = repositoryFactory;
     _appSettings          = appSettings;
     _cache                = cache;
     this.languageKeysRepo = repositoryFactory.GetDataRepositories <LanguageKey>();
     this.languageKeys     = _cache.Get <IEnumerable <LanguageKey> >("languageKeysMem");
     if (this.languageKeys == null)
     {
         this.languageKeys = this.languageKeysRepo.GetAll(x => x, y => y.Active == true).Data;
         this._cache.Set("languageKeysMem", this.languageKeys, DateTime.Now.AddHours(24));
     }
 }
Exemplo n.º 7
0
        public static bool UpdateProductTaxes(Product product, IDataRepositoryFactory dataRepositoryFactory)
        {
            List <ProductTax> productTaxes = product.Taxes != null?product.Taxes.ToList() : new List <ProductTax>();

            var taxesRepo     = dataRepositoryFactory.GetCustomDataRepositories <IProductTaxRepository>();
            var previousTaxes = taxesRepo.GetProductTaxes(product.Id).ToList();


            if (previousTaxes != null)
            {
                productTaxes.ForEach(u =>
                {
                    if (u.Id == 0)
                    {
                        u.Active      = true;
                        u.CreatedBy   = product.CreatedBy;
                        u.CreatedDate = product.CreatedDate;
                        u.ProductId   = product.Id;
                        taxesRepo.Add(u);
                    }
                    else
                    {
                        var previuosEquivalenceUnits = productTaxes.Where(e => e.Id == u.Id).FirstOrDefault();

                        previuosEquivalenceUnits.TaxId        = u.TaxId;
                        previuosEquivalenceUnits.ModifiedBy   = product.ModifiedBy;
                        previuosEquivalenceUnits.ModifiedDate = product.ModifiedDate;
                        taxesRepo.Update(previuosEquivalenceUnits);
                    }
                });

                var deletedUnits = previousTaxes.Except(productTaxes).ToList();
                if (deletedUnits != null)
                {
                    deletedUnits.ForEach(e =>
                    {
                        try
                        {
                            taxesRepo.Remove(e.Id);
                        }
                        catch
                        {
                            throw new Exception("cannotDeleteTax_msg");
                        }
                    });
                }
            }
            return(true);
        }
Exemplo n.º 8
0
        protected override Result <LeadDetail> ProcessDetail(long branchOfficeId, LeadDetail detail, IDataRepositoryFactory dataRepositoryFactory, InvoiceLead lead)
        {
            var detailService    = dataRepositoryFactory.GetCustomDataRepositories <IInvoiceDetailRepository>();
            var productRepo      = dataRepositoryFactory.GetDataRepositories <Product>();
            var productBasesRepo = dataRepositoryFactory.GetDataRepositories <CompositeProduct>();
            var productUnitRepo  = dataRepositoryFactory.GetDataRepositories <UnitProductEquivalence>();
            var productBases     = detail.Product.BaseCompositeProducts == null || detail.Product.BaseCompositeProducts.Count() == 0 ? productBasesRepo.GetAll(x => x.AsNoTracking().Where(y => y.Active == true && y.ProductId == detail.ProductId)).Data.ToList() :
                                   detail.Product.BaseCompositeProducts.ToList();

            detail.WarehouseId = null;
            detail.UnitId      = null;
            var detailResult = detailService.Add(detail);

            productBases.ForEach(p =>
            {
                var currentProduct = productRepo.Get(p.BaseProductId).Data.FirstOrDefault();

                var currentUnit = p.UnitProductEquivalence == null ? p.BaseProductUnitId.HasValue ?
                                  productUnitRepo.Get(p.BaseProductUnitId.Value).Data.FirstOrDefault() : null : p.UnitProductEquivalence;

                var instance = GetBillProductOrServiceInstance.GetBillingInstance(currentProduct);
                // decimal nuevaQuantity = p.Quantity * detail.Quantity;
                LeadDetail detailTemp = new LeadDetail(detail)
                {
                    Quantity  = p.Quantity * detail.Quantity,
                    UnitId    = currentUnit != null ? currentUnit.Unit.Id : p.BaseProductUnitId,
                    ProductId = p.BaseProductId,
                    ParentId  = detailResult.Id,
                    Product   = currentProduct,
                    Free      = true
                };
                var result = instance.ProcessProductService(branchOfficeId, detailTemp, dataRepositoryFactory, lead).Data.FirstOrDefault();
                if (result.SaveRegister)
                {
                    detailService.Add(result);
                }
            });
            detail.SaveRegister = false;
            return(new Result <LeadDetail>(0, 0, "ok_msg", new List <LeadDetail>()
            {
                detail
            }));
        }
Exemplo n.º 9
0
        protected override Result <LeadDetail> ProcessReturnDetail(long branchOfficeId, LeadDetail detail, IDataRepositoryFactory dataRepositoryFactory, InvoiceLead lead)
        {
            var invoiceDetailRepo = dataRepositoryFactory.GetCustomDataRepositories <IInvoiceDetailRepository>();
            var productRepo       = dataRepositoryFactory.GetDataRepositories <Product>();
            var productBasesRepo  = dataRepositoryFactory.GetDataRepositories <CompositeProduct>();
            var productUnitRepo   = dataRepositoryFactory.GetDataRepositories <UnitProductEquivalence>();

            var baseDetails = invoiceDetailRepo.GetChildren(detail.Id).ToList();

            baseDetails.ForEach(p =>
            {
                var currentProduct = p.Product ?? productRepo.Get(p.ProductId).Data.FirstOrDefault();



                var instance = GetBillProductOrServiceInstance.GetBillingInstance(currentProduct);
                // decimal nuevaQuantity = p.Quantity * detail.Quantity;
                LeadDetail detailTemp = new LeadDetail()
                {
                    Id            = p.Id,
                    Active        = p.Active,
                    WarehouseId   = p.WarehouseId ?? null,
                    Quantity      = p.Quantity * (detail.ReturnAmount / detail.Quantity),
                    ReturnAmount  = p.Quantity * (detail.ReturnAmount / detail.Quantity),
                    ParentId      = p.ParentId ?? null,
                    Defective     = detail.Defective,
                    InvoiceLeadId = p.InvoiceLeadId,
                    Product       = p.Product,
                    ProductId     = p.ProductId,
                    Unit          = p.Unit,
                    UnitId        = p.UnitId
                };

                var resultado = instance.ReturnProductService(branchOfficeId, detailTemp, dataRepositoryFactory, lead);
            });

            return(new Result <LeadDetail>(0, 0, "ok_msg", new List <LeadDetail>()
            {
                detail
            }));
        }
Exemplo n.º 10
0
        public static Result <Invoice> UpdateQuoteDetails(Invoice invoice, IDataRepositoryFactory dataRepositoryFactory)
        {
            var detailsRepo      = dataRepositoryFactory.GetCustomDataRepositories <IInvoiceDetailRepository>();
            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();


            // BORRA LOS QUE YA NO EXISTEN EN LA invoice NUEVA
            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);
                }
            });

            //INSERTAR DETALLES NUEVOS
            Invoice newinvoice = new Invoice(invoice);

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


            modifiedDetails.ForEach(d =>
            {
                detailsRepo.Update(d);
            });

            UpdateInvoiceTaxes(invoice, dataRepositoryFactory);
            return(new Result <Invoice>(0, 0, "ok_msg", new List <Invoice>()
            {
                invoice
            }));
        }
Exemplo n.º 11
0
 public CustomerController(IOptions <AppSettings> appSettings, IDataRepositoryFactory repositoryFactory, IMemoryCache cache)
     : base(appSettings, repositoryFactory, cache, repositoryFactory.GetCustomDataRepositories <ICustomerRepository>())
 {
     this.sequence = this._repositoryFactory.GetCustomDataRepositories <ISequenceManagerRepository>();
 }
Exemplo n.º 12
0
        public static bool UpdateProductUnits(Product product, IDataRepositoryFactory dataRepositoryFactory)
        {
            var unitsRepo = dataRepositoryFactory.GetCustomDataRepositories <IUnitProductEquivalenceRepository>();
            List <UnitProductEquivalence> productUnits = product.ProductUnits ?? new List <UnitProductEquivalence>();
            var previousUnits = unitsRepo.GetProductUnits(product.Id).ToList();

            if (product.IsService)
            {
                productUnits = new List <UnitProductEquivalence>();
                var deletedUnits = previousUnits.Except(productUnits).ToList();
                if (deletedUnits != null)
                {
                    deletedUnits.ForEach(e => { unitsRepo.Remove(e.Id); });
                }
            }

            if (!product.IsService)
            {
                if (productUnits.Count == 0)
                {
                    throw new Exception("productNeedsUnits_msg");
                }

                if (!productUnits.Exists(u => u.IsPrimary))
                {
                    throw new Exception("productNeedsPrimaryUnit_msg");
                }
            }
            if (!product.IsService && previousUnits != null)
            {
                productUnits.ForEach(u =>
                {
                    if (u.Id == 0)
                    {
                        u.Active      = true;
                        u.CreatedBy   = product.CreatedBy;
                        u.CreatedDate = product.CreatedDate;
                        unitsRepo.Add(u);
                    }
                    else
                    {
                        var previuosEquivalenceUnits          = previousUnits.Where(e => e.Id == u.Id).FirstOrDefault();
                        previuosEquivalenceUnits.Equivalence  = u.Equivalence;
                        previuosEquivalenceUnits.IsPrimary    = u.IsPrimary;
                        previuosEquivalenceUnits.CostPrice    = u.CostPrice;
                        previuosEquivalenceUnits.SellingPrice = u.SellingPrice;
                        previuosEquivalenceUnits.ModifiedBy   = product.ModifiedBy;
                        previuosEquivalenceUnits.ModifiedDate = product.ModifiedDate;
                        unitsRepo.Update(previuosEquivalenceUnits);
                    }
                });

                var deletedUnits = previousUnits.Except(productUnits).ToList();
                if (deletedUnits != null)
                {
                    deletedUnits.ForEach(e =>
                    {
                        try
                        {
                            unitsRepo.Remove(e.Id);
                        }
                        catch (Exception ex)
                        {
                            throw new Exception("cannotEraseUnit_msg");
                        }
                    });
                }
            }
            return(true);
        }
Exemplo n.º 13
0
 public InvoiceController(IOptions <AppSettings> appSettings, IDataRepositoryFactory repositoryFactory, IMemoryCache cache) : base(appSettings, repositoryFactory, cache, repositoryFactory.GetCustomDataRepositories <IInvoiceRepository>())
 {
     this._customRepo = repositoryFactory.GetCustomDataRepositories <IInvoiceRepository>();
 }
        public override Result <CustomerReturn> Add(CustomerReturn entity)
        {
            var result     = new Result <CustomerReturn>(-1, -1, "error_msg");
            var warehouses = _Context.Warehouses.AsNoTracking().Where(x => x.Active == true).ToList();

            using (var transaction = _Context.Database.BeginTransaction())
            {
                try
                {
                    var invoice = repositoryFactory.GetCustomDataRepositories <IInvoiceRepository>().GetByInvoiceNumber(entity.InvoiceNumber);
                    if (string.IsNullOrEmpty(entity.InvoiceNumber))
                    {
                        transaction.Rollback();
                        return(new Result <CustomerReturn>(-1, -1, "invoiceNumberRequired_error"));
                    }
                    if (repositoryFactory.GetDataRepositories <CustomerReturn>().Get(x => x, y => y.Active == true && y.InvoiceNumber.ToUpper() == entity.InvoiceNumber.ToUpper()) != null)
                    {
                        transaction.Rollback();
                        return(new Result <CustomerReturn>(-1, -1, "returnAlreadyApplied_error"));
                    }
                    if (entity.ReturnDetails == null || entity.ReturnDetails.Count == 0 || !entity.ReturnDetails.Any(x => x.Quantity > 0))
                    {
                        transaction.Rollback();
                        return(new Result <CustomerReturn>(-1, -1, "detailsRequired_error"));
                    }
                    if (invoice == null)
                    {
                        transaction.Rollback();
                        return(new Result <CustomerReturn>(-1, -1, "invoiceDoesNotExist_error"));
                    }
                    var validStates = new char[] { (char)Enums.BillingStates.Paid, (char)Enums.BillingStates.FullPaid };
                    if (!validStates.Contains(invoice.State))
                    {
                        transaction.Rollback();
                        return(new Result <CustomerReturn>(-1, -1, "invalidInvoiceStateReturn_error"));
                    }
                    entity.CurrencyId        = invoice.CurrencyId;
                    entity.CustomerId        = invoice.CustomerId;
                    entity.InvoiceId         = invoice.Id;
                    entity.BranchOfficeId    = invoice.BranchOfficeId;
                    entity.Date              = DateTime.Now;
                    entity.Active            = true;
                    entity.BranchOffice      = null;
                    entity.Currency          = null;
                    entity.Customer          = null;
                    entity.Invoice           = null;
                    entity.BeforeTaxesAmount = entity.ReturnDetails.Sum(x => x.BeforeTaxesAmount);
                    entity.TaxesAmount       = entity.ReturnDetails.Sum(x => x.TaxesAmount);
                    entity.TotalAmount       = entity.BeforeTaxesAmount + entity.TaxesAmount;
                    entity.InvoiceNumber     = invoice.InvoiceNumber;
                    CreditNote creditNote = new CreditNote()
                    {
                        Active               = true,
                        Amount               = entity.ReturnDetails.Sum(x => x.TotalAmount),
                        Applied              = false,
                        OriginInvoiceNumber  = entity.InvoiceNumber,
                        AppliedInvoiceNumber = "",
                        CurrencyId           = invoice.CurrencyId,
                        CustomerId           = invoice.CustomerId,
                        Date     = DateTime.Now,
                        Sequence = Helpers.SequencesHelper.CreateCustomersReturnsControl(repositoryFactory)
                    };
                    var creditNoteResult = repositoryFactory.GetCustomDataRepositories <ICreditNoteRepository>().Add(creditNote);
                    if (creditNoteResult.Status < 0)
                    {
                        transaction.Rollback();
                        return(new Result <CustomerReturn>(-1, -1, "error_msg"));
                    }
                    entity.CreditNoteId     = creditNoteResult.Data.FirstOrDefault().Id;
                    entity.CreditNoteNumber = creditNote.Sequence;
                    foreach (var d in entity.ReturnDetails)
                    {
                        d.Active        = true;
                        d.CustomerId    = entity.CustomerId;
                        d.Date          = DateTime.Now;
                        d.InvoiceNumber = entity.InvoiceNumber;
                        d.Reference     = creditNote.Sequence;
                        d.WarehouseId   = d.Defective ? warehouses.FirstOrDefault(x => x.Code.ToLower() == "def")?.Id : d.WarehouseId;
                        if (d.WarehouseId.HasValue && d.WarehouseId > 0)
                        {
                            var inventoryResult = Helpers.InventoryHelper.ReInsertInventoryToWarehouse(new InvoiceDetail()
                            {
                                Active            = true,
                                BeforeTaxesAmount = d.BeforeTaxesAmount,
                                Amount            = 0,
                                CreditNoteAmount  = d.TotalAmount,
                                TaxesAmount       = d.TaxesAmount,
                                TotalAmount       = d.TotalAmount,
                                BranchOfficeId    = invoice.BranchOfficeId,
                                Date        = d.Date,
                                Defective   = d.Defective,
                                InvoiceId   = entity.InvoiceId,
                                ProductId   = d.ProductId,
                                UnitId      = d.UnitId,
                                WarehouseId = d.WarehouseId,
                                Quantity    = d.Quantity
                            }, repositoryFactory, warehouses.FirstOrDefault(x => x.Id == d.WarehouseId.Value), d.Reference);
                            if (inventoryResult.Status < 0)
                            {
                                transaction.Rollback();
                                return(new Result <CustomerReturn>(inventoryResult.Id, inventoryResult.Status, inventoryResult.Message));
                            }
                        }
                    }

                    entity.ReturnDetails.ForEach(d => {
                        d.Product   = null;
                        d.Customer  = null;
                        d.Warehouse = null;
                    });

                    result = base.Add(entity);
                    transaction.Commit();
                }
                catch (Exception ex)
                {
                    transaction.Rollback();
                    result = new Result <CustomerReturn>(-1, -1, "error_msg", null, ex);
                }
            }
            return(result);
        }
Exemplo n.º 15
0
 public MenuController(IOptions <AppSettings> appSettings, IDataRepositoryFactory repositoryFactory, IMemoryCache cache) : base(appSettings, repositoryFactory, cache, repositoryFactory.GetCustomDataRepositories <IMenuRepository>())
 {
     menuRepository = this._repositoryFactory.GetCustomDataRepositories <IMenuRepository>();
 }
 public SupplierReturnController(IOptions <AppSettings> appSettings, IDataRepositoryFactory repositoryFactory, IMemoryCache cache) : base(appSettings, repositoryFactory, cache, repositoryFactory.GetCustomDataRepositories <ISupplierReturnRepository>())
 {
     this.repo = repositoryFactory.GetCustomDataRepositories <ISupplierReturnRepository>();
 }
Exemplo n.º 17
0
        public static bool UpdateProductBases(Product product, IDataRepositoryFactory dataRepositoryFactory)
        {
            var repo = dataRepositoryFactory.GetCustomDataRepositories <ICompositeProductRepository>();
            List <CompositeProduct> productBases = product.BaseCompositeProducts ?? new List <CompositeProduct>();
            var previousBases = repo.GetProductBases(product.Id).ToList() ?? new List <CompositeProduct>();

            if (!product.IsService)
            {
                productBases = new List <CompositeProduct>();
                var deletedBases = previousBases.Except(productBases).ToList();
                if (deletedBases != null)
                {
                    deletedBases.ForEach(e => { repo.Remove(e.Id); });
                }
            }


            if (product.IsService && product.IsCompositeProduct)
            {
                productBases.ForEach(u =>
                {
                    if (u.Id == 0)
                    {
                        u.Active      = true;
                        u.CreatedBy   = product.CreatedBy;
                        u.CreatedDate = product.CreatedDate;
                        repo.Add(u);
                    }
                    else
                    {
                        var previousEquivalenceBases = previousBases.Where(e => e.Id == u.Id).FirstOrDefault();
                        if (previousEquivalenceBases != null)
                        {
                            previousEquivalenceBases.Quantity          = u.Quantity;
                            previousEquivalenceBases.BaseProductId     = u.BaseProductId;
                            previousEquivalenceBases.ProductId         = u.ProductId;
                            previousEquivalenceBases.BaseProductUnitId = u.BaseProductUnitId ?? null;
                            previousEquivalenceBases.ModifiedBy        = product.ModifiedBy;
                            previousEquivalenceBases.ModifiedDate      = product.ModifiedDate;
                            repo.Update(previousEquivalenceBases);
                        }
                    }
                });

                var deletedUnits = previousBases.Except(productBases).ToList();
                if (deletedUnits != null)
                {
                    deletedUnits.ForEach(e =>
                    {
                        try
                        {
                            repo.Remove(e.Id);
                        }
                        catch (Exception ex)
                        {
                            throw new Exception("cannotRemoveBaseProduct_msg");
                        }
                    });
                }
            }
            else if ((product.IsService && !product.IsCompositeProduct) || !product.IsService)
            {
                previousBases.ForEach(e =>
                {
                    try
                    {
                        repo.Remove(e.Id);
                    }
                    catch (Exception ex)
                    {
                        throw new Exception("cannotRemoveBaseProduct_msg");
                    }
                });
            }
            return(true);
        }
Exemplo n.º 18
0
 public LanguageController(IOptions <AppSettings> appSettings, IDataRepositoryFactory repositoryFactory, IMemoryCache cache) : base(appSettings, repositoryFactory, cache)
 {
     this.languageKeyRepository = repositoryFactory.GetCustomDataRepositories <ILanguageKeyRepository>();
 }
 public WarehouseTransferController(IOptions <AppSettings> appSettings, IDataRepositoryFactory repositoryFactory, IMemoryCache cache, IWarehouseTransferRepository repo) : base(appSettings, repositoryFactory, cache, repo)
 {
     this.repo = repositoryFactory.GetCustomDataRepositories <IWarehouseTransferRepository>();
 }
Exemplo n.º 20
0
 public InventoryEntryController(IOptions <AppSettings> appSettings, IDataRepositoryFactory repositoryFactory, IMemoryCache cache, IInventoryEntryRepository repo) : base(appSettings, repositoryFactory, cache, repo)
 {
     this.repo = repositoryFactory.GetCustomDataRepositories <IInventoryEntryRepository>();
 }
Exemplo n.º 21
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
            }));
        }
Exemplo n.º 22
0
 public UserController(IOptions <AppSettings> appSettings, IDataRepositoryFactory repositoryFactory)
 {
     _appSettings       = appSettings;
     _repositoryFactory = repositoryFactory;
     this._baseRepo     = _repositoryFactory.GetCustomDataRepositories <IUserRepository>();
 }
Exemplo n.º 23
0
 public ProductController(IOptions <AppSettings> appSettings, IDataRepositoryFactory repositoryFactory, IMemoryCache cache) : base(appSettings, repositoryFactory, cache)
 {
     _customRepo = repositoryFactory.GetCustomDataRepositories <IProductRepository>();
 }
Exemplo n.º 24
0
 public SupplierReturnRepository(MainDataContext context, IDataRepositoryFactory repositoryFactory) : base(context)
 {
     this.sequenceRepo       = repositoryFactory.GetCustomDataRepositories <ISequenceManagerRepository>();
     this.warehouseMovements = repositoryFactory.GetCustomDataRepositories <IWarehouseMovementRepository>();
 }