public IHttpActionResult GenerateSalesDoc([FromBody] Models.mySale pSale)
        {
            MovVenda    mySale;
            MovVendaLin saleLine;
            var         byRefFalse        = false;
            var         stockAvailable    = true;
            var         affectsOtherLines = true;
            var         fixedAssociation  = true;
            var         freeAssociation   = true;
            var         checkStock        = false;
            var         famForQty         = false;
            var         famForPrice       = false;
            short       searchItem        = 0;
            int         numberLine;
            string      itemCode;

            var errorDescription = "";
            var result           = new DocumentResult();

            try
            {
                //pSale = GetNewSale();

                mySale = Eti.Aplicacao.Movimentos.MovVendas.GetNew(pSale.DocTypeAbbrev, pSale.SectionCode);
                mySale.Cabecalho.CodExercicio = pSale.FiscalYear;

                mySale.Cabecalho.AplicacaoOrigem = "WS";

                mySale.Cabecalho.Data           = pSale.Date.Date;
                mySale.Cabecalho.DataVencimento = pSale.ExpirationDate;
                mySale.Cabecalho.Hora           = pSale.Date.Hour.ToString("00") + ":" + pSale.Date.Minute.ToString("00");

                mySale.Cabecalho.CodEntidade = pSale.EntityCode;
                mySale.AlteraEntidade(TpEntidade.Cliente, mySale.Cabecalho.CodEntidade, true, true);

                mySale.Cabecalho.AbrevMoeda = pSale.CurrencyCode;
                mySale.AlteraMoeda(pSale.CurrencyCode, ref byRefFalse, false);

                foreach (SalesLine line in pSale.Lines.OrderBy(p => p.LineNumber))
                {
                    itemCode = line.ItemCode;

                    numberLine = mySale.CountLin + 1;
                    mySale.AddLin(ref numberLine);
                    saleLine           = mySale.Lines[numberLine];
                    saleLine.TipoLinha = (byte)TpLinha.Artigo;

                    saleLine.CodArtigo = itemCode;
                    mySale.AlteraArtigo(numberLine, ref itemCode, ref affectsOtherLines, ref fixedAssociation, ref freeAssociation, ref searchItem, checkStock, ref stockAvailable, ref famForQty, ref famForPrice);
                    saleLine.DescArtigo = line.ItemDescription;

                    saleLine.Quantidade = line.Quantity;
                    mySale.AlteraQuantidade(numberLine, saleLine.Quantidade, ref affectsOtherLines, false, ref stockAvailable);

                    if (mySale.TDocIvaIncluido)
                    {
                        line.UnitPriceExcludedVAT = line.UnitPriceExcludedVAT * (1 + line.VATTax / 100.0);
                    }

                    saleLine.PrecoUnitario = Convert.ToDouble(line.UnitPriceExcludedVAT);
                    mySale.AlteraPrecoUnitario(numberLine, saleLine.PrecoUnitario, ref byRefFalse);

                    saleLine.TaxaIva    = Convert.ToDouble(line.VATTax);
                    saleLine.CodTaxaIva = Eti.Aplicacao.Tabelas.TaxasIvas.GetTaxaIva(Convert.ToDecimal(saleLine.TaxaIva));
                    mySale.AlteraTaxaIVA(numberLine, saleLine.CodTaxaIva);

                    saleLine.Desconto1 = line.Discount1;
                    mySale.AlteraDesconto(1, numberLine, saleLine.Desconto1);

                    saleLine.Desconto2 = line.Discount2;
                    mySale.AlteraDesconto(2, numberLine, saleLine.Desconto2);

                    saleLine.Desconto3 = line.Discount3;
                    mySale.AlteraDesconto(3, numberLine, saleLine.Desconto3);

                    saleLine.DescontoValorLinha = line.DiscountValue;
                    mySale.AlteraDesconto(4, numberLine, saleLine.DescontoValorLinha);
                }

                //documento externo certeficado
                //mySale.AlteraInfoCertificacao(certificationNumber, "1", hash, saftDocNo);

                var validate = mySale.Validate(true);
                if (validate)
                {
                    var blockingStock = false;
                    Eti.Aplicacao.Movimentos.MovVendas.Update(ref mySale, ref blockingStock, true, 0, "");
                }

                if (!string.IsNullOrEmpty(mySale.EtiErrorCode))
                {
                    result.ErrorDescription = mySale.EtiErrorDescription;
                }
                else
                {
                    result = new DocumentResult()
                    {
                        ErrorDescription = mySale.EtiErrorDescription,
                        DocumentKey      = new Helpers.DocumentKey()
                        {
                            SectionCode   = mySale.Cabecalho.CodSeccao,
                            DocTypeAbbrev = mySale.Cabecalho.AbrevTpDoc,
                            FiscalYear    = mySale.Cabecalho.CodExercicio,
                            Number        = mySale.Cabecalho.Numero
                        }
                    };

                    if (pSale.GetReportBytes)
                    {
                        result.reportBytes = Functions.GetReportBytes(TpDocumentoAEmitir.Vendas, result.DocumentKey);
                    }
                }

                return(Ok(result));
            }
            catch (Exception ex)
            {
                errorDescription        = string.Format("{0}.{1}.{2}", MethodBase.GetCurrentMethod().DeclaringType.FullName, MethodBase.GetCurrentMethod().Name, ex.Message);
                result.ErrorDescription = errorDescription;
            }

            return(Ok(result));
        }
        public IHttpActionResult SaveExternalInvoice([FromBody] Models.mySale document)
        {
            byte[] reportBytes;

            MovVenda        sale;
            MovVendaLin     saleLine;
            var             byRefFalse        = false;
            var             stockAvailable    = true;
            var             affectsOtherLines = true;
            var             fixedAssociation  = true;
            var             freeAssociation   = true;
            var             checkStock        = false;
            var             famForQty         = false;
            var             famForPrice       = false;
            TpProcuraArtigo searchItem        = TpProcuraArtigo.NaoEncontrou;
            int             numberLine;
            string          itemCode;

            try
            {
                sale = Eti.Aplicacao.Movimentos.MovVendas.GetNew(document.DocTypeAbbrev, document.SectionCode);
                sale.Cabecalho.CodExercicio = document.FiscalYear;

                sale.Cabecalho.Data           = document.Date.Date;
                sale.Cabecalho.DataVencimento = document.ExpirationDate;

                sale.Cabecalho.CodEntidade = document.EntityCode;
                sale.AlteraEntidade(TpEntidade.Cliente, sale.Cabecalho.CodEntidade, true, true);

                sale.Cabecalho.AbrevMoeda = document.CurrencyCode;
                sale.AlteraMoeda(document.CurrencyCode, ref byRefFalse, false);

                foreach (SalesLine line in document.Lines.OrderBy(p => p.LineNumber))
                {
                    itemCode = line.ItemCode;

                    numberLine = sale.Lines.Count + 1;
                    sale.AddLin(ref numberLine);
                    saleLine           = sale.Lines[numberLine];
                    saleLine.TipoLinha = TpLinha.Artigo;

                    saleLine.CodArtigo = itemCode;
                    sale.AlteraArtigo(numberLine, ref itemCode, ref affectsOtherLines, ref fixedAssociation, ref freeAssociation, ref searchItem, checkStock, ref stockAvailable, ref famForQty, ref famForPrice);
                    saleLine.DescArtigo = line.ItemDescription;

                    saleLine.Quantidade = line.Quantity;
                    sale.AlteraQuantidade(numberLine, saleLine.Quantidade, ref affectsOtherLines, false, ref stockAvailable);

                    saleLine.PrecoUnitario = Convert.ToDouble(line.UnitPriceExcludedVAT);
                    sale.AlteraPrecoUnitario(numberLine, saleLine.PrecoUnitario, ref byRefFalse);

                    saleLine.TaxaIva    = Convert.ToDouble(line.VATTax);
                    saleLine.CodTaxaIva = Eti.Aplicacao.Tabelas.TaxasIvas.GetTaxaIva(Convert.ToDecimal(saleLine.TaxaIva));
                    sale.AlteraTaxaIVA(numberLine, saleLine.CodTaxaIva);

                    saleLine.Desconto1 = line.Discount1;
                    sale.AlteraDesconto(1, numberLine, saleLine.Desconto1);

                    saleLine.Desconto2 = line.Discount2;
                    sale.AlteraDesconto(2, numberLine, saleLine.Desconto2);

                    saleLine.Desconto3 = line.Discount3;
                    sale.AlteraDesconto(3, numberLine, saleLine.Desconto3);

                    saleLine.DescontoValorLinha = line.DiscountValue;
                    sale.AlteraDesconto(4, numberLine, saleLine.DescontoValorLinha);
                }

                /// Marca como documento externo, para não recalcular informação de combustiveis
                sale.IsDocExterno = true;
                /// sale.AlteraInfoCertificacao("999", "1", "sdfhkdfFASDGFSfgsfgjsklgfsk394wrkd", "FT 1/598");

                /// INFORMAÇÃO COMBUSTÍVEIS
                foreach (dynamic customInfo in document.CustomInfo)
                {
                    sale.AddISPLines(new List <EC748.CombustiveisInfConsumidor.Models.ISPCombustivel>()
                    {
                        new EC748.CombustiveisInfConsumidor.Models.ISPCombustivel()
                        {
                            ISPCateg      = customInfo.ISPCateg,
                            ISPTaxa       = customInfo.ISPTaxa,
                            ISPUnid       = customInfo.ISPUnid,
                            Quantidade    = customInfo.Quantidade,
                            TaxaCalculada = customInfo.TaxaCalculada,
                            TipoComb      = customInfo.TipoComb,
                        }
                    });

                    sale.AddISPInfoLines(new List <EC748.CombustiveisInfConsumidor.Models.ISPCombustivelInfo>()
                    {
                        new EC748.CombustiveisInfConsumidor.Models.ISPCombustivelInfo()
                        {
                            EmissaoUnidade  = customInfo.EmissaoUnidade,
                            EmissaoCO2      = customInfo.EmissaoCO2,
                            FossilPerc      = customInfo.FossilPerc,
                            ISPCategoria    = customInfo.ISPCateg,
                            ISPNomenclatura = customInfo.ISPNomenclatura,
                            RenovavelPerc   = customInfo.RenovavelPerc,
                            SobreCusto      = customInfo.SobreCusto,
                            tpCombustivel   = customInfo.TipoComb
                        }
                    });
                }
                /// INFORMAÇÃO COMBUSTÍVEIS

                var validate = sale.Validate(true);
                if (validate)
                {
                    var blockingStock = false;
                    Eti.Aplicacao.Movimentos.MovVendas.Update(ref sale, ref blockingStock, true, 0, "");
                }

                if (!string.IsNullOrEmpty(sale.EtiErrorCode))
                {
                    throw new Exception($@"ErrorCode:{sale.EtiErrorCode}{Environment.NewLine}
                                            EtiErrorDescription:{sale.EtiErrorDescription}");
                }
                else
                {
                    DocumentKey docKey = new Helpers.DocumentKey()
                    {
                        SectionCode   = sale.Cabecalho.CodSeccao,
                        DocTypeAbbrev = sale.Cabecalho.AbrevTpDoc,
                        FiscalYear    = sale.Cabecalho.CodExercicio,
                        Number        = sale.Cabecalho.Numero
                    };

                    reportBytes = Functions.GetReportBytes(TpDocumentoAEmitir.Vendas, docKey);
                }

                return(Ok(reportBytes));
            }
            catch (Exception ex)
            {
                return(BadRequest(ex.Message));
            }
        }
Example #3
0
        //api/Invoices/GenerateSalesDoc
        //data: {
        //"FiscalYear":"2018",
        //"SectionCode":"1",
        //"DocTypeAbbrev":"FAT",
        //"EntityCode":"502395028",
        //"Date":"2018/01/25",
        //"ExpirationDate":"2018/02/24",
        //"CurrencyCode":"EUR",
        //"Lines":[
        //	{
        //		"LineNumber": "1",
        //		"ItemCode": "AMORT",
        //		"ItemDescription": "AMORTECEDOR 001",
        //		"Quantity": "2",
        //		"VATTax": "23",
        //		"UnitPriceExcludedVAT": "39.90",
        //		"Discount1": "5",
        //		"Discount2": "0",
        //		"Discount3": "0",
        //		"DiscountValue": "0"
        //  }
        //]}
        public IHttpActionResult GenerateSalesDoc([FromBody] Models.mySale document)
        {
            byte[] reportBytes;

            MovVenda        sale;
            MovVendaLin     saleLine;
            var             byRefFalse        = false;
            var             stockAvailable    = true;
            var             affectsOtherLines = true;
            var             fixedAssociation  = true;
            var             freeAssociation   = true;
            var             checkStock        = false;
            var             famForQty         = false;
            var             famForPrice       = false;
            TpProcuraArtigo searchItem        = TpProcuraArtigo.NaoEncontrou;
            int             numberLine;
            string          itemCode;

            try
            {
                sale = Eti.Aplicacao.Movimentos.MovVendas.GetNew(document.DocTypeAbbrev, document.SectionCode);
                sale.Cabecalho.CodExercicio = document.FiscalYear;

                sale.Cabecalho.AplicacaoOrigem = "WS";

                sale.Cabecalho.Data           = document.Date.Date;
                sale.Cabecalho.DataVencimento = document.ExpirationDate;

                sale.Cabecalho.CodEntidade = document.EntityCode;
                sale.AlteraEntidade(TpEntidade.Cliente, sale.Cabecalho.CodEntidade, true, true);

                sale.Cabecalho.AbrevMoeda = document.CurrencyCode;
                sale.AlteraMoeda(document.CurrencyCode, ref byRefFalse, false);

                foreach (SalesLine line in document.Lines.OrderBy(p => p.LineNumber))
                {
                    itemCode = line.ItemCode;

                    numberLine = sale.Lines.Count + 1;
                    sale.AddLin(ref numberLine);
                    saleLine           = sale.Lines[numberLine];
                    saleLine.TipoLinha = TpLinha.Artigo;

                    saleLine.CodArtigo = itemCode;
                    sale.AlteraArtigo(numberLine, ref itemCode, ref affectsOtherLines, ref fixedAssociation, ref freeAssociation, ref searchItem, checkStock, ref stockAvailable, ref famForQty, ref famForPrice);
                    saleLine.DescArtigo = line.ItemDescription;

                    saleLine.Quantidade = line.Quantity;
                    sale.AlteraQuantidade(numberLine, saleLine.Quantidade, ref affectsOtherLines, false, ref stockAvailable);

                    saleLine.PrecoUnitario = Convert.ToDouble(line.UnitPriceExcludedVAT);
                    sale.AlteraPrecoUnitario(numberLine, saleLine.PrecoUnitario, ref byRefFalse);

                    saleLine.TaxaIva    = Convert.ToDouble(line.VATTax);
                    saleLine.CodTaxaIva = Eti.Aplicacao.Tabelas.TaxasIvas.GetTaxaIva(Convert.ToDecimal(saleLine.TaxaIva));
                    sale.AlteraTaxaIVA(numberLine, saleLine.CodTaxaIva);

                    saleLine.Desconto1 = line.Discount1;
                    sale.AlteraDesconto(1, numberLine, saleLine.Desconto1);

                    saleLine.Desconto2 = line.Discount2;
                    sale.AlteraDesconto(2, numberLine, saleLine.Desconto2);

                    saleLine.Desconto3 = line.Discount3;
                    sale.AlteraDesconto(3, numberLine, saleLine.Desconto3);

                    saleLine.DescontoValorLinha = line.DiscountValue;
                    sale.AlteraDesconto(4, numberLine, saleLine.DescontoValorLinha);
                }

                var validate = sale.Validate(true);
                if (validate)
                {
                    var blockingStock = false;
                    Eti.Aplicacao.Movimentos.MovVendas.Update(ref sale, ref blockingStock, true, 0, "");
                }

                if (!string.IsNullOrEmpty(sale.EtiErrorCode))
                {
                    throw new Exception($@"ErrorCode:{sale.EtiErrorCode}{Environment.NewLine}
                                            EtiErrorDescription:{sale.EtiErrorDescription}");
                }
                else
                {
                    DocumentKey docKey = new Helpers.DocumentKey()
                    {
                        SectionCode   = sale.Cabecalho.CodSeccao,
                        DocTypeAbbrev = sale.Cabecalho.AbrevTpDoc,
                        FiscalYear    = sale.Cabecalho.CodExercicio,
                        Number        = sale.Cabecalho.Numero
                    };

                    reportBytes = Functions.GetReportBytes(TpDocumentoAEmitir.Vendas, docKey);
                }

                return(Ok(reportBytes));
            }
            catch (Exception ex)
            {
                return(BadRequest(ex.Message));
            }
        }