public static SaleInventory MakeInventory(RegisterSaleRequest request)
        {
            try
            {
                var config        = request.TotalValueCalculationConfig;
                var saleInventory = new SaleInventory()
                {
                    ProductId        = request.ProductId,
                    QuantitySold     = request.QuantitySold,
                    Taxes            = request.IncludedTaxes,
                    IncludedServices = request.IncludedServices
                };

                if (config.OverrideUnitaryPrice)
                {
                    saleInventory.UnitaryPrice = request.TotalValueCalculationConfig.UnitaryPrice;
                }
                SetSaleInventoryStates(request, saleInventory);

                return(saleInventory);
            }
            catch (Exception e)
            {
                throw e;
            }
        }
 public Sale Execute(RegisterSaleRequest request)
 {
     try
     {
         return(SaleFactory.Make(request));
     }
     catch (Exception e)
     {
         throw e;
     }
 }
 private static SaleInventory BuildInventory(RegisterSaleRequest request)
 {
     try
     {
         return(SaleInventoryFactory.MakeInventory(request));
     }
     catch (Exception e)
     {
         throw e;
     }
 }
        public static Sale Make(RegisterSaleRequest request)
        {
            var sale = new Sale()
            {
                Plataform      = request.Plataform,
                PlatformSaleId = request.PlatformSaleId,
                Status         = SaleStatus.Pending,
                Inventory      = SaleInventoryFactory.MakeInventory(request)
            };

            return(sale);
        }
 private static void SetSaleInventoryStates(RegisterSaleRequest request, SaleInventory inventory)
 {
     try
     {
         if (request.TotalValueCalculationConfig.OverrideUnitaryPrice)
         {
             inventory.States.UnitaryPriceWasOverridden = true;
         }
     }
     catch (Exception e)
     {
         throw e;
     }
 }
        public static async Task <string> RegisterNewSaleAsync(RegisterSaleRequest request)
        {
            try
            {
                var sale = SaleUseCases.CreateNewSale.Execute(request);
                await SaleEntity.ValidateNewSale(sale);

                await SaleUseCases.RegisterSale.Execute(sale);

                return(sale.Id.ToString());
            }
            catch (Exception)
            {
                throw;
            }
        }
        public static Sale BuildSale(RegisterSaleRequest request)
        {
            try
            {
                var config = request.TotalValueCalculationConfig;
                var sale   = new Sale()
                {
                    Status    = request.Status,
                    Plataform = request.Plataform,
                    Inventory = BuildInventory(request)
                };

                return(sale);
            }
            catch (Exception e)
            {
                throw e;
            }
        }
        public RegisterSaleRequest Adapt(GrpcRegisteSaleRequest grpcRequest)
        {
            try
            {
                var request = new RegisterSaleRequest()
                {
                    ProductId      = grpcRequest.ProductId,
                    QuantitySold   = grpcRequest.QuantitySold,
                    Plataform      = grpcRequest.Plataform,
                    PlatformSaleId = grpcRequest.PlatformSaleId,
                    Status         = DetermineStatus(grpcRequest.Status)
                };

                return(request);
            }
            catch (Exception)
            {
                throw;
            }
        }