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); }