예제 #1
0
        private TMOV ObterMovimento(Movimento notaFiscal, TMOV movimento, Parametros parametros, bool faturamento)
        {
            GFILIAL filial        = FilialApp.BuscarPorCNPJ(notaFiscal.CnpjFilial) ?? throw new Exception($"Filial com CNPJ {notaFiscal.CnpjFilial} não encontrado no RM.");
            bool    issRetido     = notaFiscal.TipoISS == ETipoISS.Retido;
            TTMV    tipoMovimento = TipoMovimentoApp.BuscarPorCodigo(ObterCodigoMovimento(issRetido, parametros, faturamento));
            FCFO    fornecedorRM  = faturamento ? FornecedorApp.ObterCliente(notaFiscal.Cliente, parametros, issRetido) : FornecedorApp.ObterFornecedor(notaFiscal.Fornecedor, parametros, issRetido);

            movimento.SERIE         = tipoMovimento.TTMVSERIE.FirstOrDefault().SERIE;
            movimento.CODTMV        = tipoMovimento.CODTMV;
            movimento.DATAEMISSAO   = notaFiscal.DataEmissao;
            movimento.DATAEXTRA1    = notaFiscal.DataEmissao;
            movimento.DATAMOVIMENTO = notaFiscal.DataAuxiliar;
            movimento.CODCOLCFOAUX  = movimento.CODCOLCFO = fornecedorRM.CODCOLIGADA;
            movimento.CODCFOAUX     = movimento.CODCFO = fornecedorRM.CODCFO;
            movimento.CODMUNSERVICO = filial.CODMUNICIPIO;
            movimento.CODETDMUNSERV = filial.ESTADO;
            movimento.CODFILIAL     = filial.CODFILIAL;
            movimento.VALOROUTROS   = movimento.VALORBRUTO = notaFiscal.ValorBruto;
            movimento.VALORLIQUIDO  = notaFiscal.ValorLiquido;

            if (faturamento)
            {
                movimento.IDNAT = ObterIdNat(parametros, faturamento, notaFiscal.Cliente.Estado);
            }
            else
            {
                movimento.IDNAT = ObterIdNat(parametros, faturamento, notaFiscal.Fornecedor.Estado);
            }

            movimento.TMOVHISTORICO = new TMOVHISTORICO()
            {
                CODCOLIGADA    = movimento.CODCOLIGADA,
                IDMOV          = movimento.IDMOV,
                HISTORICOCURTO = notaFiscal.Historico
            };

            var tipo = faturamento ? ETipoImportacao.Prestado : ETipoImportacao.Tomado;

            foreach (var item in notaFiscal.Itens)
            {
                movimento.TITMMOV.Add(ItemMovimentoApp.ObterItemMovimento(ref movimento, item, 1, parametros, tipo));
            }
            return(movimento);
        }
        private TMOV ObterMovimento(Respostas pedido, int idMovimento, string numeroMovimento, Fornecedor fornecedor, Parametros parametros)
        {
            ValidarFornecedor(fornecedor);

            TMOV   movimento      = new TMOV();
            short  codColigada    = parametros.CodigoColigada;
            string codCentroCusto = pedido.Cabecalho.Campo_Extra.FirstOrDefault(c => c.Nome == "CENTROCUSTO").Valor;
            short  codFilial      = FormartarCodFilial(codCentroCusto);
            string codLoc         = pedido.Cabecalho.Campo_Extra.FirstOrDefault(c => c.Nome == "LOCALESTOQUE").Valor;
            //codLoc = FormartarCodLocalEstoque(codCentroCusto, codLoc);

            var deparaLocalEstoque = _deParaLocalEstoqueApp.Buscar(codColigada, codFilial, codCentroCusto, codLoc);

            if (deparaLocalEstoque == null)
            {
                throw new Exception($"De- para de Local de estoque {codLoc} não encontrado.");
            }
            TLOC localEstoque  = _localEstoqueApp.BuscarPorCodigo(codColigada, codFilial, deparaLocalEstoque.CodigoRM);
            FCFO fornecedorRM  = BuscarFornecedor(fornecedor, parametros);
            TTMV tipoMovimento = _tipoMovimentoApp.BuscarPorCodigo(parametros.CodigoMovimento);

            if (localEstoque == null)
            {
                throw new Exception($"Local de estoque {codLoc} na coligada {codColigada} e filial {codFilial} não encontrato.");
            }
            if (fornecedorRM == null)
            {
                throw new Exception($"Fornecedor com CNPJ {fornecedor.CNPJ} não encontrado.");
            }

            movimento.CODCOLIGADA      = parametros.CodigoColigada;
            movimento.IDMOV            = idMovimento;
            movimento.NUMEROMOV        = numeroMovimento;
            movimento.SEGUNDONUMERO    = numeroMovimento;
            movimento.SERIE            = tipoMovimento.TTMVSERIE.FirstOrDefault().SERIE;
            movimento.CODTMV           = tipoMovimento.CODTMV;
            movimento.NORDEM           = pedido.Cabecalho.Requisicao;
            movimento.DATAEMISSAO      = Convert.ToDateTime(pedido.Cabecalho.Data_Vencimento);
            movimento.DATAMOVIMENTO    = Convert.ToDateTime(pedido.Cabecalho.Data_Vencimento);
            movimento.CODCOLCFO        = fornecedorRM.CODCOLIGADA;
            movimento.CODCFO           = fornecedorRM.CODCFO;
            movimento.CODCCUSTO        = FormartarCodCentroCusto(codCentroCusto);
            movimento.CODLOC           = localEstoque.CODLOC;
            movimento.CODFILIAL        = localEstoque.CODFILIAL;
            movimento.STATUS           = "A";
            movimento.TIPO             = "P";
            movimento.INTEGRAAPLICACAO = "0";
            movimento.CODCOLCFOAUX     = 0;
            movimento.CODCFOAUX        = "0";
            movimento.CODCPG           = fornecedor.Id_Forma_Pagamento;
            movimento.FRETECIFOUFOB    = ObterFrete(fornecedor.Frete);
            movimento.PRAZOENTREGA     = fornecedor.Prazo_Entrega;
            movimento.DATAENTREGA      = Convert.ToDateTime(pedido.Cabecalho.Data_Vencimento).AddDays(fornecedor.Prazo_Entrega);
            movimento.CODVEN1          = "9999";

            int           sequencial        = 1;
            List <string> codigoCompradores = new List <string>();

            foreach (var item in pedido.Itens.Item.Where(i => i.Resposta.CNPJ == fornecedor.CNPJ))
            {
                movimento.TITMMOV.Add(ObterItemMovimento(movimento, item, ++sequencial, parametros));
                codigoCompradores.Add(item.Campo_Extra.FirstOrDefault(c => c.Nome == "CdComprador").Valor);
            }

            var comprador = _compradorApp.ObterPorCodigo(codigoCompradores);

            if (comprador != null)
            {
                movimento.CAMPOLIVRE1 = string.Join(", ", comprador.Select(x => x.Nome));
            }


            movimento.VALORLIQUIDO = movimento.VALOROUTROS = movimento.VALORBRUTO = movimento.TITMMOV.Sum(i => i.VALORTOTALITEM);
            return(movimento);
        }