예제 #1
0
        public Venda RealizarVendaBombaAutomatica(Venda requestVenda)
        {
            #region Validacoes
            if (requestVenda == null)
            {
                throw new ArgumentNullException("requestVenda");
            }

            #endregion

            using (var ctx = new SOSPostoDataContext())
            {
                var venda = Translator.Translate(requestVenda);

                if (clienteClient.BuscarPeloCartaoESenha("", "") == null)
                {
                    throw new ArgumentException("Não foi encontrado nenhum cliente com este nº de cartão e senha!.");
                }

                foreach (var item in requestVenda.items)
                {
                    var itemVenda = Translator.Translate(item);

                    //Verifica se algum combustivel da lista esta em falta nos tanques
                    if (tanqueClient.QtdeDisponivel((int)itemVenda.Bomba_ID, (int)itemVenda.quantidade) == false)
                    {
                        throw new ArgumentException(string.Format("Quantidade solicitada, do combustível {0}, excede a disponível no estoque.", itemVenda.produto.nome));
                    }

                    venda.itemvenda.Add(itemVenda);
                }

                foreach (var itemCombustivel in venda.itemvenda.Where(i => i.produto.tipo.Equals("combustivel")))
                {
                    //É liberado o abastecimento
                    bombaClient.LiberarAbastecimento((int)itemCombustivel.Bomba_ID, (int)itemCombustivel.quantidade, itemCombustivel.Produto_ID);
                }

                //ctx.venda.AddObject(venda);
                //ctx.SaveChanges();

                return Translator.Translate(venda);
            }
        }
예제 #2
0
        public Venda RealizarVendaCaixa(Venda requestVenda)
        {
            #region Validacoes
            if (requestVenda == null)
            {
                throw new ArgumentNullException("requestVenda");
            }

            if (requestVenda.items == null || requestVenda.items.Count() == 0)
            {
                throw new ArgumentNullException("requestItens");
            }
            #endregion

            using (var ctx = new SOSPostoDataContext())
            {
                var venda = Translator.Translate(requestVenda);

                //Verifica se o cliente relacionado à venda existe
                if (clienteClient.BuscarPeloCodigo(requestVenda.codigo_cliente) == null)
                {
                    throw new ArgumentException(string.Format("Código {0} do cliente, relacionado à venda, não existe.", venda.Cliente_ID));
                }

                foreach (var item in requestVenda.items)
                {
                    var itemVenda = Translator.Translate(item);

                    //Recupera o produto do item da Venda
                    var itemProduto = produtoClient.BuscarPeloCodigo(itemVenda.Produto_ID);

                    if (itemProduto.tipo.Equals("combustivel"))
                    {

                        //Verifica se algum combustivel da lista esta em falta nos tanques
                        if (tanqueClient.QtdeDisponivel((int)itemVenda.Bomba_ID, (int)itemVenda.quantidade) == false)
                        {
                            throw new ArgumentException(string.Format("Quantidade solicitada, do combustível {0}, excede a disponível no estoque.", itemVenda.produto.nome));
                        }
                    }
                    else
                    {
                        //Verifica se o produto referente esta em falta no estoque
                        if (produtoClient.QtdeDisponivel(itemProduto) == false)
                        {
                            throw new ArgumentException(string.Format("Quantidade solicitada, do produto {0}, excede a disponível no estoque.", itemVenda.produto.nome));
                        }
                    }

                    venda.itemvenda.Add(itemVenda);
                }

                ctx.venda.AddObject(venda);
                ctx.SaveChanges();

                //Se existir algum combustivel adicionado à venda, é liberado o abastecimento na bomba
                foreach (var itemCombustivel in venda.itemvenda.Where(i => i.produto.tipo.Equals("combustivel")))
                {
                    //Libera o abastecimento
                    bombaClient.LiberarAbastecimento((int)itemCombustivel.Bomba_ID, (int)itemCombustivel.quantidade, itemCombustivel.Produto_ID);
                }

                return Translator.Translate(venda);
            }
        }