static void Main(string[] args)
        {
            EtiAppAuthentication authentication = new EtiAppAuthentication()
            {
                serviceAddress = IniFile.IniRead(Path.Combine(IniFile.GetBasePath(), "ERPV19.eInic.ini"), "Geral", "ServerUrl", ""),
                SQLServerName  = @"PT-ALFREDOA\ETICADATA",
                SQLUser        = "******",
                SQLPassword    = "******",
                SystemDatabase = "SIS_CUST19",
                Login          = "******",
                Password       = "******",
                Company        = "T19PT",
                FiscalYearCode = "EX 2021",
                SectionCode    = "1",
                Language       = "pt-PT"
            };

            try
            {
                //Obter o objeto EtiAplicacão. è necessário ter licença extended ou modulo de customziação
                EtiAplicacao etiApp = Functions.GetNewEtiAplicacao(authentication);
                //Tendo etiApp podemos utilziar a api do ERP

                //Chamar um webService, necessitando de inicilizar o etiAplicacao por webService
                //List<EntitiesCategory> entitiesCategory = Functions.GetEntitiesCategory(authentication);

                //Criar documento de venda
                MovVenda venda = etiApp.Movimentos.MovVendas.GetNew("FACT");

                venda.Cabecalho.CodEntidade = 1;
                venda.AlteraEntidade(ERP.EtiEnums.TpEntidade.Cliente, 1, true, true);

                int             linha = 1;
                string          codArtigo = "001";
                bool            blnAfectaOutrasLinhas = false, blnAssociacoesFixas = false, blnAssociacoesLivres = false, blnStockDisponivel = false, blnFamPararQtd = false, blnFamPararPreco = false;
                TpProcuraArtigo pProcuraArtigo = TpProcuraArtigo.Encontrou;
                venda.AddLin(ref linha);

                venda.Lines[linha].CodArtigo = codArtigo;
                venda.AlteraArtigo(linha, ref codArtigo, ref blnAfectaOutrasLinhas, ref blnAssociacoesFixas, ref blnAssociacoesLivres, ref pProcuraArtigo, false, ref blnStockDisponivel, ref blnFamPararQtd, ref blnFamPararPreco);

                venda.CalculaTotais();

                var validateVenda = venda.Validate(true);

                if (!validateVenda)
                {
                    Console.WriteLine(venda.EtiErrorDescription);
                }
                else
                {
                    bool blnSTKImpeditivo = false;
                    etiApp.Movimentos.MovVendas.Update(ref venda, ref blnSTKImpeditivo, true, TpLigacaoExtra.SemLigacao, string.Empty);
                    if (venda.EtiErrorCode != "")
                    {
                        Console.WriteLine(venda.EtiErrorDescription);
                    }
                    Helpers.Functions.PrintToPrinter(etiApp, venda.Cabecalho.CodExercicio, venda.Cabecalho.CodSeccao, venda.Cabecalho.AbrevTpDoc, venda.Cabecalho.Numero);
                }
            }
            catch (Exception ex)
            {
                Console.Write(ex.Message);
            }
        }
        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));
            }
        }
Exemple #3
0
        //api/Purchases/GeneratePurchaseDoc
        //data: {
        //"FiscalYear":"2018",
        //"SectionCode":"1",
        //"DocTypeAbbrev":"V/FAT",
        //"EntityCode":"502395028",
        //"Date":"2018/01/25",
        //"ExpirationDate":"2018/02/24",
        //"CurrencyCode":"EUR",
        //"Lines":[
        //	{
        //		"LineNumber": "1",
        //		"ItemCode": "AMORT",
        //		"ItemDescription": "AMORTECEDOR 001",
        //      "BatchCode" : "LOTE_1",
        //      "BatchDescription" : "Lote 0001".
        //      "EntryDate" : "2018-03-27"
        //      "ExpirationDate" : "2019-03-27"
        //		"Quantity": "2",
        //		"VATTax": "23",
        //		"UnitPriceExcludedVAT": "39.90",
        //		"Discount1": "5",
        //		"Discount2": "0",
        //		"Discount3": "0",
        //		"DiscountValue": "0"
        //  }
        //]}
        public IHttpActionResult GeneratePurchaseDoc([FromBody] Models.myPurchase document)
        {
            byte[] reportBytes;

            MovCompra       purch;
            MovCompraLin    purchLine;
            var             byRefFalse        = false;
            var             stockAvailable    = true;
            var             affectsOtherLines = true;
            var             fixedAssociation  = true;
            var             freeAssociation   = true;
            var             checkStock        = false;
            TpProcuraArtigo searchItem        = TpProcuraArtigo.NaoEncontrou;
            int             numberLine;
            string          itemCode;

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

                purch.Cabecalho().AplicacaoOrigem = "WS";

                purch.Cabecalho().Data           = document.Date.Date;
                purch.Cabecalho().DataVencimento = document.ExpirationDate;

                purch.Cabecalho().CodEntidade = document.EntityCode;
                purch.AlteraEntidade(TpEntidade.Fornecedor, purch.Cabecalho().CodEntidade, true, true);

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

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

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

                    purchLine.CodArtigo = itemCode;
                    purch.AlteraArtigo(numberLine, ref itemCode, ref affectsOtherLines, ref fixedAssociation, ref freeAssociation, ref searchItem, checkStock, ref stockAvailable);
                    purchLine.DescArtigo = line.ItemDescription;

                    //Cria lote caso não exista
                    var item = Eti.Aplicacao.Tabelas.Artigos.Find(itemCode);
                    if (item.Lotes)
                    {
                        var inactive = false;
                        var exists   = false;

                        exists = Eti.Aplicacao.Tabelas.Artigos.ExisteLote(itemCode, line.BatchCode, ref inactive);

                        if (!exists)
                        {
                            Eti.Aplicacao.Tabelas.Artigos.GravaLote(itemCode, line.BatchCode, line.BatchDescription, line.EntryDate, line.ExpirationDate, "", "", "", "", "");

                            purchLine.Lote = line.BatchCode;

                            checkStock     = true;
                            stockAvailable = false;

                            //exists : devolve se o lote existe ou não
                            //inactive: devolve se está inativo
                            //se checkStock = true devolve no stockAvailable se existe stock disponivel
                            purch.AlteraLote(numberLine, itemCode, line.BatchCode, ref exists, ref inactive, checkStock, ref stockAvailable);
                        }
                    }


                    purchLine.Quantidade = line.Quantity;
                    purch.AlteraQuantidade(numberLine, purchLine.Quantidade, ref affectsOtherLines, false, ref stockAvailable);

                    purchLine.PrecoUnitario = Convert.ToDouble(line.UnitPriceExcludedVAT);
                    purch.AlteraPrecoUnitario(numberLine, purchLine.PrecoUnitario);

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

                    purchLine.Desconto1 = line.Discount1;
                    purch.AlteraDesconto(1, numberLine, purchLine.Desconto1);

                    purchLine.Desconto2 = line.Discount2;
                    purch.AlteraDesconto(2, numberLine, purchLine.Desconto2);

                    purchLine.Desconto3 = line.Discount3;
                    purch.AlteraDesconto(3, numberLine, purchLine.Desconto3);

                    purchLine.DescontoValorLinha = line.DiscountValue;
                    purch.AlteraDesconto(4, numberLine, purchLine.DescontoValorLinha);
                }

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

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

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

                return(Ok(reportBytes));
            }
            catch (Exception ex)
            {
                return(BadRequest(ex.Message));
            }
        }
        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;
            TpProcuraArtigo searchItem        = TpProcuraArtigo.NaoEncontrou;
            int             numberLine;
            string          itemCode;

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

            try
            {
                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.Lines.Count + 1;
                    mySale.AddLin(ref numberLine);
                    saleLine           = mySale.Lines[numberLine];
                    saleLine.TipoLinha = 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);
                }


                //redefinir meios de pagamento
                var linePayMovType = 1;

                if (mySale.LinesPag.Count > 0)
                {
                    mySale.LinesPag.Clear();
                }

                foreach (SalePayment line in pSale.LinesPayment)
                {
                    var movType = line.PayMovTypeCodeTres;
                    mySale.LinesPag[linePayMovType].AbrevTpMovPagTes = movType;
                    mySale.AlteraPagamAbrevTpMov(linePayMovType, movType, ref byRefFalse, ref byRefFalse, ref byRefFalse, ref byRefFalse, ref byRefFalse, ref byRefFalse, ref byRefFalse, ref byRefFalse);
                    mySale.LinesPag[linePayMovType].Cambio = line.Exchange;
                    mySale.LinesPag[linePayMovType].Valor  = line.Value;
                    mySale.AlteraPagamValor(linePayMovType, mySale.LinesPag[linePayMovType].Valor);
                    mySale.LinesPag[linePayMovType].AbrevMoeda = line.CurrencyCode;

                    mySale.LinesPag[linePayMovType].ValorMoedaDoc = mySale.LinesPag[linePayMovType].Valor;

                    linePayMovType++;
                }

                //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));
        }
Exemple #5
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));
            }
        }
        public IHttpActionResult GenerateCustomerOrder([FromBody] myCustomerOrder pOrder)
        {
            MovEncomenda    myOrder;
            MovEncomendaLin myOrderLine;

            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        = 0;
            int             numberLine;
            string          itemCode;

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

            try
            {
                //pOrder = GetNewCustomerOrder();

                myOrder = Eti.Aplicacao.Movimentos.MovEncomendasCli.GetNew(pOrder.DocTypeAbbrev, pOrder.SectionCode);
                myOrder.Cabecalho.CodExercicio = pOrder.FiscalYear;

                myOrder.Cabecalho.AplicacaoOrigem = "WS";

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

                myOrder.Cabecalho.CodEntidade = pOrder.EntityCode;
                myOrder.AlteraEntidade((byte)TpEntidade.Cliente, myOrder.Cabecalho.CodEntidade, true);

                myOrder.Cabecalho.AbrevMoeda = pOrder.CurrencyCode;
                myOrder.AlteraMoeda(pOrder.CurrencyCode, ref byRefFalse, false);

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

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

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

                    myOrderLine.Quantidade = line.Quantity;
                    myOrder.AlteraQuantidade(numberLine, myOrderLine.Quantidade, ref affectsOtherLines, false, ref stockAvailable);

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

                    myOrderLine.PrecoUnitario = Convert.ToDouble(line.UnitPriceExcludedVAT);
                    myOrder.AlteraPrecoUnitario(numberLine, myOrderLine.PrecoUnitario, ref byRefFalse);

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

                    myOrderLine.Desconto1 = line.Discount1;
                    myOrder.AlteraDesconto(1, numberLine, myOrderLine.Desconto1);

                    myOrderLine.Desconto2 = line.Discount2;
                    myOrder.AlteraDesconto(2, numberLine, myOrderLine.Desconto2);

                    myOrderLine.Desconto3 = line.Discount3;
                    myOrder.AlteraDesconto(3, numberLine, myOrderLine.Desconto3);

                    myOrderLine.DescontoValorLinha = line.DiscountValue;
                    myOrder.AlteraDesconto(4, numberLine, myOrderLine.DescontoValorLinha);
                }

                var validate = myOrder.Validate(true);
                if (validate)
                {
                    Eti.Aplicacao.Movimentos.MovEncomendasCli.Update(ref myOrder);
                }

                if (myOrder.EtiErrorDescription == "")
                {
                    result = new DocumentResult()
                    {
                        ErrorDescription = myOrder.EtiErrorDescription,
                        DocumentKey      = new Helpers.DocumentKey()
                        {
                            SectionCode   = myOrder.Cabecalho.CodSeccao,
                            DocTypeAbbrev = myOrder.Cabecalho.AbrevTpDoc,
                            FiscalYear    = myOrder.Cabecalho.CodExercicio,
                            Number        = myOrder.Cabecalho.Numero
                        }
                    };

                    if (pOrder.GetReportBytes)
                    {
                        result.reportBytes = Functions.GetReportBytes(TpDocumentoAEmitir.Encomendas, result.DocumentKey);
                    }
                }
                else
                {
                    result.ErrorDescription = myOrder.EtiErrorDescription;
                }
            }
            catch (Exception ex)
            {
                errorDescription        = string.Format("{0}.{1}.{2}", MethodBase.GetCurrentMethod().DeclaringType.FullName, MethodBase.GetCurrentMethod().Name, ex.Message);
                result.ErrorDescription = errorDescription;
            }

            return(Ok(result));
        }
Exemple #7
0
        public IHttpActionResult GenerateOrdersSatisfaction([FromBody] MyOrderSatisfaction pOrder)
        {
            MovVenda        mySale;
            MovVendaLin     saleLine;
            MovEncomenda    myOrder;
            var             stockAvailable    = true;
            var             affectsOtherLines = true;
            var             fixedAssociation  = true;
            var             freeAssociation   = true;
            var             checkStock        = false;
            var             famForQty         = false;
            var             famForPrice       = false;
            var             byRefFalse        = false;
            TpProcuraArtigo searchItem        = TpProcuraArtigo.NaoEncontrou;
            int             numberLine;
            string          itemCode;

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

            try
            {
                //Encomenda a satisfazer
                myOrder = Eti.Aplicacao.Movimentos.MovEncomendasCli.Find(pOrder.KeyOrder.DocTypeAbbrev, pOrder.KeyOrder.FiscalYear, pOrder.KeyOrder.Number, pOrder.KeyOrder.SectionCode);

                //Nova venda
                mySale = Eti.Aplicacao.Movimentos.MovVendas.GetNew(pOrder.DocTypeAbbrevSale, pOrder.KeyOrder.SectionCode);
                mySale.Cabecalho.CodExercicio = pOrder.FiscalYearSale;

                mySale.Cabecalho.AplicacaoOrigem = "WS";

                mySale.Cabecalho.Data           = pOrder.DateSale.Date;
                mySale.Cabecalho.DataVencimento = pOrder.ExpirationDateSale;
                mySale.Cabecalho.Hora           = pOrder.DateSale.Date.Hour.ToString("00") + ":" + pOrder.DateSale.Date.Minute.ToString("00");

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

                //irá satisfazer toda a encomenda.
                foreach (MovEncomendaLin line in myOrder.Lines)
                {
                    itemCode = line.CodArtigo;

                    numberLine = mySale.Lines.Count + 1;
                    mySale.AddLin(ref numberLine);
                    saleLine           = mySale.Lines[numberLine];
                    saleLine.TipoLinha = 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.Quantidade = line.Quantidade;
                    mySale.AlteraQuantidade(numberLine, saleLine.Quantidade, ref affectsOtherLines, false, ref stockAvailable);

                    saleLine.CodArmazem = line.CodArmazem;
                    mySale.AlteraArmazem(numberLine, saleLine.CodArmazem, false, ref stockAvailable);

                    //Tratar a questão do IVA pois os tipos de documentos podem não ter o IVA incluido
                    saleLine.PrecoUnitario = Convert.ToDouble(line.PrecoUnitario);
                    mySale.AlteraPrecoUnitario(numberLine, saleLine.PrecoUnitario, ref byRefFalse);

                    //Ligar a linha da venda á encomenda, 1 linha de venda para 1 linha de encomenda
                    var countLinIntgr = 1;
                    mySale.SetCountLinEncomIntegr(ref numberLine, ref countLinIntgr);

                    var numberLineIntgr = 1;
                    saleLine.EncomIntegr(numberLineIntgr).EncomCodSeccao    = pOrder.KeyOrder.SectionCode;
                    saleLine.EncomIntegr(numberLineIntgr).EncomAbrevTpDoc   = pOrder.KeyOrder.DocTypeAbbrev;
                    saleLine.EncomIntegr(numberLineIntgr).EncomCodExercicio = pOrder.KeyOrder.FiscalYear;
                    saleLine.EncomIntegr(numberLineIntgr).EncomNumero       = pOrder.KeyOrder.Number;
                    saleLine.EncomIntegr(numberLineIntgr).EncomNumLinha     = line.NumLinha;
                    saleLine.EncomIntegr(numberLineIntgr).QtdSatisf         = line.QuantidadePend;
                    saleLine.EncomIntegr(numberLineIntgr).QtdPendente       = 0;

                    saleLine.DocAQueReporta = pOrder.KeyOrder.DocTypeAbbrev + ' ' + pOrder.KeyOrder.SectionCode + '/' + pOrder.KeyOrder.Number.ToString();
                }

                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
                        }
                    };
                }
            }
            catch (Exception ex)
            {
                errorDescription        = string.Format("{0}.{1}.{2}", MethodBase.GetCurrentMethod().DeclaringType.FullName, MethodBase.GetCurrentMethod().Name, ex.Message);
                result.ErrorDescription = errorDescription;
            }

            return(Ok(result));
        }