private void bbBuscar_Click(object sender, EventArgs e) { if (bsDespesas.Current != null) { if (panelDados2.validarCampoObrigatorio()) { if (tp_pagamento.SelectedIndex.Equals(0) && string.IsNullOrWhiteSpace(cd_fornecedor.Text)) { MessageBox.Show("Obrigatório informar fornecedor para tipo de pagamento selecionado.", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information); cd_fornecedor.Focus(); return; } else if (tp_pagamento.SelectedIndex.Equals(1) && string.IsNullOrWhiteSpace(cd_funcionario.Text)) { MessageBox.Show("Obrigatório informar funcionário para tipo de pagamento selecionado.", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information); cd_funcionario.Focus(); return; } (bsDespesas.Current as CamadaDados.Empreendimento.TRegistro_ExecDespesas).Cd_empresa = vCd_Empresa; (bsDespesas.Current as CamadaDados.Empreendimento.TRegistro_ExecDespesas).Id_orcamentostr = vId_Orcamento; (bsDespesas.Current as CamadaDados.Empreendimento.TRegistro_ExecDespesas).Nr_versaostr = vNr_Versao; //Buscar config abast CamadaDados.Empreendimento.Cadastro.TList_CadCFGEmpreendimento lCfg = CamadaNegocio.Empreendimento.Cadastro.TCN_CadCFGEmpreendimento.Busca((bsDespesas.Current as CamadaDados.Empreendimento.TRegistro_ExecDespesas).Cd_empresa, string.Empty, null); if (lCfg.Count > 0) { if (string.IsNullOrEmpty(lCfg[0].tp_dup)) { MessageBox.Show("Não existe Tp.duplicata na CFG.empreendimento cadastrada!", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } } else { MessageBox.Show("Não existe CFG.empreendimento cadastrado para a empresa informada!", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } //Despesa de funcionário com abatimento de adiantamento if (tp_pagamento.SelectedIndex.Equals(1)) { //Buscar conf. adiantamento CamadaDados.Financeiro.Cadastros.TList_ConfigAdto lCnfAdto = CamadaNegocio.Financeiro.Cadastros.TCN_CadConfigAdto.Buscar(vCd_Empresa, string.Empty, string.Empty, string.Empty, string.Empty, 0, string.Empty, null); if (lCnfAdto.Count.Equals(0)) { MessageBox.Show("Não existe CFG.adiantamento cadastrado para a empresa informada!", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } CamadaDados.Financeiro.Duplicata.TRegistro_LanDuplicata rDup = new CamadaDados.Financeiro.Duplicata.TRegistro_LanDuplicata(); rDup.Cd_empresa = vCd_Empresa; rDup.Cd_clifor = cd_funcionario.Text; object lEndClifor = new CamadaDados.Financeiro.Cadastros.TCD_CadEndereco().BuscarEscalar(new Utils.TpBusca[] { new Utils.TpBusca() { vNM_Campo = "a.cd_clifor", vOperador = "=", vVL_Busca = "'" + rDup.Cd_clifor.Trim() + "'" } }, "a.cd_endereco"); if (!lEndClifor.Equals(null)) { rDup.Cd_endereco = lEndClifor.ToString().Trim(); } rDup.Tp_docto = 2; //Duplicata rDup.Tp_duplicata = "01"; rDup.Tp_mov = lCnfAdto[0].Tp_mov_ADTO_C; rDup.Cd_historico = rDup.Cd_historico_Dup = vCd_Historico = lCnfAdto[0].Cd_historico_ADTO_C; rDup.Cd_portador = lCnfAdto[0].CD_Portador; rDup.Dt_emissao = (bsDespesas.Current as CamadaDados.Empreendimento.TRegistro_ExecDespesas).Dt_execucao; rDup.Vl_documento = (bsDespesas.Current as CamadaDados.Empreendimento.TRegistro_ExecDespesas).vl_executado; rDup.Nr_docto = (bsDespesas.Current as CamadaDados.Empreendimento.TRegistro_ExecDespesas).Nr_docto; DataTable rCond = new CamadaDados.Financeiro.Cadastros.TCD_CadCondPgto().Buscar(null, 1); rDup.Cd_condpgto = rCond.Rows[0].ItemArray[0].ToString(); rDup.Cd_moeda = rCond.Rows[0].ItemArray[5].ToString(); rDup.Cd_juro = rCond.Rows[0].ItemArray[9].ToString(); rDup.Qt_parcelas = 0; DataTable cd_contager = new CamadaDados.Financeiro.Cadastros.TCD_CadContaGer().Buscar(null, 1); if (cd_contager != null) { rDup.Cd_contager = cd_contager.Rows[0].ItemArray[0].ToString(); } rDup.Parcelas.Add(new CamadaDados.Financeiro.Duplicata.TRegistro_LanParcela() { Vl_parcela = rDup.Vl_documento, Dt_vencto = rDup.Dt_emissao, Cd_parcela = 1 }); rDup.lCred.AddRange(CamadaNegocio.Financeiro.Adiantamento.TCN_LanAdiantamento.Buscar(string.Empty, rDup.Cd_empresa, rDup.Cd_clifor, string.Empty, "'C'", string.Empty, decimal.Zero, string.Empty, string.Empty, decimal.Zero, decimal.Zero, false, false, true, string.Empty, false, false, string.Empty, string.Empty, 0, string.Empty, null)); if (rDup.lCred.Count.Equals(0)) { MessageBox.Show("Funcionário não possui adiantamento quitado para efetuar o débito de saldo.", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } //Validar saldo a devolver do funcionário rDup.lCred.ForEach(p => { if (rDup.Vl_documento <= p.Vl_total_devolver) { rDup.cVl_adiantamento = rDup.Vl_documento; } }); if (rDup.cVl_adiantamento.Equals(0)) { MessageBox.Show("Crédito do funcionário é menor do que o valor da despesa."); return; } (bsDespesas.Current as CamadaDados.Empreendimento.TRegistro_ExecDespesas).rDuplicata = rDup; } else { //Procedimento para despesa da empresa using (Financeiro.TFLanDuplicata fDup = new Financeiro.TFLanDuplicata()) { fDup.vCd_empresa = vCd_Empresa; fDup.vNm_empresa = vNm_empresa; fDup.vCd_clifor = tp_pagamento.SelectedIndex.Equals(1) ? cd_funcionario.Text : cd_fornecedor.Text; fDup.vNm_clifor = tp_pagamento.SelectedIndex.Equals(1) ? nm_funcionario.Text : nm_fornecedor.Text; //Buscar endereco CamadaDados.Financeiro.Cadastros.TList_CadEndereco lEnd = CamadaNegocio.Financeiro.Cadastros.TCN_CadEndereco.Buscar(fDup.vCd_clifor, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, 1, null); if (lEnd.Count > 0) { fDup.vCd_endereco = lEnd[0].Cd_endereco; fDup.vDs_endereco = lEnd[0].Ds_endereco; } if (lCfg.Count > 0) { if (string.IsNullOrEmpty(lCfg[0].tp_dup)) { MessageBox.Show("Não existe Tp.duplicata na CFG.empreendimento cadastrada!", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } fDup.vTp_docto = lCfg[0].tp_docto; fDup.vDs_tpdocto = lCfg[0].ds_docto; fDup.vTp_duplicata = string.Empty; fDup.vDs_tpduplicata = string.Empty; fDup.vTp_mov = "P"; fDup.vDt_emissao = (bsDespesas.Current as CamadaDados.Empreendimento.TRegistro_ExecDespesas).Dt_execucaostr; fDup.vVl_documento = (bsDespesas.Current as CamadaDados.Empreendimento.TRegistro_ExecDespesas).vl_executado; fDup.vNr_docto = (bsDespesas.Current as CamadaDados.Empreendimento.TRegistro_ExecDespesas).Nr_docto; fDup.St_bloquearccusto = true; if (fDup.ShowDialog() == DialogResult.OK) { if (fDup.dsDuplicata.Count > 0) { (bsDespesas.Current as CamadaDados.Empreendimento.TRegistro_ExecDespesas).rDuplicata = fDup.dsDuplicata.Current as CamadaDados.Financeiro.Duplicata.TRegistro_LanDuplicata; } vCd_Historico = fDup.vCd_historico; } } else { MessageBox.Show("Não existe configuração frota para lançar duplicata!", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } } } if (CamadaNegocio.ConfigGer.TCN_CadParamGer.BuscaVL_Bool("CRESULTADO_EMPRESA", vCd_Empresa, null).Trim().ToUpper().Equals("S")) { //Verificar se historico possui centro resultado cadastrado object obj = new CamadaDados.Financeiro.Cadastros.TCD_CadHistorico().BuscarEscalar( new Utils.TpBusca[] { new Utils.TpBusca() { vNM_Campo = "a.cd_historico", vOperador = "=", vVL_Busca = "'" + vCd_Historico.Trim() + "'" } }, "a.cd_centroresult"); if (obj == null ? false : !string.IsNullOrEmpty(obj.ToString())) { (bsDespesas.Current as CamadaDados.Empreendimento.TRegistro_ExecDespesas).lCCusto.Add( new CamadaDados.Financeiro.CCustoLan.TRegistro_LanCCustoLancto() { Cd_empresa = vCd_Empresa, Cd_centroresult = obj.ToString(), Vl_lancto = (bsDespesas.Current as CamadaDados.Empreendimento.TRegistro_ExecDespesas).vl_executado, Dt_lancto = (bsDespesas.Current as CamadaDados.Empreendimento.TRegistro_ExecDespesas).Dt_execucao, Tp_registro = "A" }); } else { using (Financeiro.TFRateioCResultado fRateio = new Financeiro.TFRateioCResultado()) { fRateio.vVl_Documento = (bsDespesas.Current as CamadaDados.Empreendimento.TRegistro_ExecDespesas).vl_executado; fRateio.Tp_mov = "P"; fRateio.Dt_movimento = (bsDespesas.Current as CamadaDados.Empreendimento.TRegistro_ExecDespesas).Dt_execucao; if (fRateio.ShowDialog() == DialogResult.OK) { (bsDespesas.Current as CamadaDados.Empreendimento.TRegistro_ExecDespesas).lCCusto = fRateio.lCResultado; } else { return; } } } } try { CamadaNegocio.Empreendimento.TCN_ExecDespesas.Gravar(bsDespesas.Current as CamadaDados.Empreendimento.TRegistro_ExecDespesas, null); MessageBox.Show("Despesa gravada com sucesso.", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information); this.DialogResult = DialogResult.OK; } catch (Exception ex) { MessageBox.Show(ex.Message.Trim(), "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } }
public static string Gravar(TRegistro_Devolucao val, CamadaDados.Financeiro.Duplicata.TList_RegLanParcela lParc, BancoDados.TObjetoBanco banco) { bool st_transacao = false; TCD_Devolucao qtb_dev = new TCD_Devolucao(); try { if (banco == null) { st_transacao = qtb_dev.CriarBanco_Dados(true); } else { qtb_dev.Banco_Dados = banco; } decimal tot_devolver = Math.Round(val.lItens.Sum(p => p.Qtd_devolver * (p.Vl_subtotalliquido / p.Quantidade)), 2); TList_DevolucaoFIN lDevFin = new TList_DevolucaoFIN(); if (lParc?.Count > 0) { foreach (CamadaDados.Financeiro.Duplicata.TRegistro_LanParcela p in lParc) { if (tot_devolver > decimal.Zero) { lDevFin.Add(new TRegistro_DevolucaoFIN() { Nr_lancto = p.Nr_lancto, Cd_parcela = p.Cd_parcela, Vl_devolvido = tot_devolver < p.cVl_atual ? tot_devolver : p.cVl_atual }); tot_devolver -= tot_devolver < p.cVl_atual ? tot_devolver : p.cVl_atual; } else { break; } } } if (tot_devolver > decimal.Zero) { //Buscar Config Adto CamadaDados.Financeiro.Cadastros.TList_ConfigAdto lCfgAdto = CamadaNegocio.Financeiro.Cadastros.TCN_CadConfigAdto.Buscar(val.Cd_empresa, string.Empty, string.Empty, string.Empty, string.Empty, 1, string.Empty, qtb_dev.Banco_Dados); if (lCfgAdto.Count.Equals(0)) { throw new Exception("Não existe configuração adiantamento para gerar credito."); } //Gerar Credito do valor devolvido CamadaDados.Financeiro.Adiantamento.TRegistro_LanAdiantamento rAdto = new CamadaDados.Financeiro.Adiantamento.TRegistro_LanAdiantamento(); rAdto.Cd_clifor = val.Cd_clifor; rAdto.Cd_empresa = val.Cd_empresa; //Buscar endereco object obj = new CamadaDados.Financeiro.Cadastros.TCD_CadEndereco().BuscarEscalar( new Utils.TpBusca[] { new Utils.TpBusca() { vNM_Campo = "a.cd_clifor", vOperador = "=", vVL_Busca = "'" + val.Cd_clifor.Trim() + "'" } }, "a.cd_endereco"); rAdto.CD_Endereco = obj == null ? string.Empty : obj.ToString(); rAdto.Ds_adto = "CREDITO RECEBIDO DEVOLUÇÃO VENDA"; rAdto.Tp_movimento = "R"; rAdto.Dt_lancto = val.Dt_devolucao; rAdto.Vl_adto = tot_devolver; rAdto.ST_ADTO = "A"; rAdto.TP_Lancto = "T";//Frente Caixa CamadaNegocio.Financeiro.Adiantamento.TCN_LanAdiantamento.Gravar(rAdto, qtb_dev.Banco_Dados); //Quitar adiantamento rAdto.List_Caixa.Add(new CamadaDados.Financeiro.Caixa.TRegistro_LanCaixa() { Cd_ContaGer = lCfgAdto[0].Cd_contagerDEV_CV, Cd_Empresa = val.Cd_empresa, Cd_Historico = lCfgAdto[0].Cd_historico_ADTO_R, Cd_LanctoCaixa = decimal.Zero, ComplHistorico = "CREDITO RECEBIDO DEVOLUÇÃO VENDA", Dt_lancto = val.Dt_devolucao, Login = Utils.Parametros.pubLogin, Nr_Docto = "DEVPDV", St_Estorno = "N", St_Titulo = "N", Vl_PAGAR = decimal.Zero, Vl_RECEBER = rAdto.Vl_adto, NM_Clifor = val.Nm_clifor }); CamadaNegocio.Financeiro.Adiantamento.TCN_LanAdiantamentoXCaixa.Quitar_Adiantamento(rAdto, qtb_dev.Banco_Dados); val.Id_adto = rAdto.Id_adto; //Dar saida do valor do credito para não duplicar o valor string ret = CamadaNegocio.Financeiro.Caixa.TCN_LanCaixa.GravaLanCaixa( new CamadaDados.Financeiro.Caixa.TRegistro_LanCaixa() { Cd_ContaGer = lCfgAdto[0].Cd_contagerDEV_CV, Cd_Empresa = val.Cd_empresa, Cd_Historico = lCfgAdto[0].Cd_historicoDEV_Venda, Cd_LanctoCaixa = decimal.Zero, ComplHistorico = "DEVOLUÇÃO VENDA", Dt_lancto = val.Dt_devolucao, Login = Utils.Parametros.pubLogin, Nr_Docto = "DEVPDV", St_Estorno = "N", St_Titulo = "N", Vl_PAGAR = rAdto.Vl_adto, Vl_RECEBER = decimal.Zero, NM_Clifor = val.Nm_clifor }, qtb_dev.Banco_Dados); val.Cd_contager = lCfgAdto[0].Cd_contagerDEV_CV; val.Cd_lanctocaixastr = CamadaDados.TDataQuery.getPubVariavel(ret, "@P_CD_LANCTOCAIXA"); } //Gravar devolucao val.Id_devolucaostr = CamadaDados.TDataQuery.getPubVariavel(qtb_dev.Gravar(val), "@P_ID_DEVOLUCAO"); lDevFin.ForEach(p => { p.Cd_empresa = val.Cd_empresa; p.Id_devolucao = val.Id_devolucao; TCN_DevolucaoFIN.Gravar(p, qtb_dev.Banco_Dados); }); //Gravar Itens Devolvidos val.lItens.ForEach(p => { decimal vl_unit = decimal.Zero; //Buscar Vl.Unitario object objVl_unit = new TCD_LanEstoque(qtb_dev.Banco_Dados).BuscarEscalar( new Utils.TpBusca[] { new Utils.TpBusca() { vNM_Campo = string.Empty, vOperador = "exists", vVL_Busca = "(select 1 from TB_PDV_CupomFiscal_Item_X_Estoque x " + "where a.Id_LanctoEstoque = x.Id_LanctoEstoque " + "and a.cd_empresa = x.cd_empresa " + "and a.cd_produto = x.cd_produto " + "and x.id_lancto = " + p.Id_lanctovenda.ToString() + " " + "and x.id_cupom = " + p.Id_vendarapida.ToString() + " " + "and x.cd_empresa = '" + p.Cd_empresa.Trim() + "' " + "and x.cd_produto = '" + p.Cd_produto.Trim() + "')" } }, "a.vl_unitario"); if (objVl_unit == null || string.IsNullOrEmpty(objVl_unit.ToString())) { vl_unit = TCN_LanEstoque.BuscarVlEstoqueUltimaCompra(val.Cd_empresa, p.Cd_produto, qtb_dev.Banco_Dados); } else { vl_unit = decimal.Parse(objVl_unit.ToString()); } //dar entrada novamente no estoque string id_lanctoestoque = CamadaDados.TDataQuery.getPubVariavel( TCN_LanEstoque.GravarEstoque( new TRegistro_LanEstoque() { Cd_empresa = val.Cd_empresa, Cd_produto = p.Cd_produto, Cd_local = p.Cd_local, Dt_lancto = val.Dt_devolucao, Tp_movimento = "E", Qtd_entrada = p.Qtd_devolver, Qtd_saida = decimal.Zero, Vl_unitario = vl_unit, Vl_subtotal = vl_unit, Tp_lancto = "L", St_registro = "A", Ds_observacao = "DEVOLUCAO VENDA FRENTE CAIXA Nº" + p.Id_vendarapida.Value.ToString() }, qtb_dev.Banco_Dados), "@@P_ID_LANCTOESTOQUE"); //gravar itens devolvidos TCN_ItensDevolvidos.Gravar(new TRegistro_ItensDevolvidos() { Cd_empresa = val.Cd_empresa, Id_devolucao = val.Id_devolucao, Id_lancto = p.Id_lanctovenda, Id_cupom = p.Id_vendarapida, Cd_produto = p.Cd_produto, Id_lanctoestoquestr = id_lanctoestoque }, qtb_dev.Banco_Dados); //Grade Produto p.lGrade.ForEach(v => { if (v.Vl_mov > decimal.Zero) { TCN_GradeEstoque.Gravar( new TRegistro_GradeEstoque { Cd_empresa = p.Cd_empresa, Cd_produto = p.Cd_produto, Id_lanctoestoque = decimal.Parse(id_lanctoestoque), Id_caracteristica = v.Id_caracteristica, Id_item = v.Id_item, quantidade = v.Vl_mov }, qtb_dev.Banco_Dados); } }); }); //Reprocessar Comissão new TCD_VendaRapida_Item(qtb_dev.Banco_Dados).Select( new Utils.TpBusca[] { new Utils.TpBusca() { vNM_Campo = "a.id_vendarapida", vOperador = "=", vVL_Busca = val.lItens[0].Id_vendarapida.ToString() }, new Utils.TpBusca() { vNM_Campo = "a.cd_empresa", vOperador = "=", vVL_Busca = "'" + val.Cd_empresa.Trim() + "'" } }, 0, string.Empty, string.Empty).ForEach(p => PDV.TCN_VendaRapida_Item.ProcessarComissao(p, qtb_dev.Banco_Dados)); if (val.lItens.Count > 0) { //Recalcular Pontos Fidelidade new CamadaDados.Faturamento.Fidelizacao.TCD_PontosFidelidade(qtb_dev.Banco_Dados).Select( new Utils.TpBusca[] { new Utils.TpBusca() { vNM_Campo = "a.cd_empresa", vOperador = "=", vVL_Busca = "'" + val.Cd_empresa.Trim() + "'" }, new Utils.TpBusca() { vNM_Campo = "a.id_cupom", vOperador = "=", vVL_Busca = val.lItens[0].Id_vendarapida.ToString() } }, 0, string.Empty, string.Empty).ForEach(x => { System.Collections.Hashtable hs = new System.Collections.Hashtable(3); hs.Add("@P_CD_EMPRESA", x.Cd_empresa); hs.Add("@P_ID_CUPOM", x.Id_cupomstr); hs.Add("@P_QTD_DEVOLVER", val.lItens.Sum(p => p.Qtd_devolver * (x.Qt_pontos / p.Quantidade))); qtb_dev.executarSql("update TB_FAT_PontosFidelidade set QT_Pontos = QT_Pontos - @P_QTD_DEVOLVER" + " where cd_empresa = @P_CD_EMPRESA" + " and id_cupom = @P_ID_CUPOM", hs); }); //Recalcular Resgate new CamadaDados.Faturamento.Fidelizacao.TCD_ResgatePontos(qtb_dev.Banco_Dados).Select( new Utils.TpBusca[] { new Utils.TpBusca() { vNM_Campo = "a.cd_empresa", vOperador = "=", vVL_Busca = "'" + val.Cd_empresa.Trim() + "'" }, new Utils.TpBusca() { vNM_Campo = "a.id_cupom", vOperador = "=", vVL_Busca = val.lItens[0].Id_vendarapida.ToString() } }, 0, string.Empty).ForEach(x => { System.Collections.Hashtable hs = new System.Collections.Hashtable(4); hs.Add("@P_CD_EMPRESA", x.Cd_empresa); hs.Add("@P_ID_CUPOM", x.Id_cupomstr); hs.Add("@P_ID_PONTO", x.Id_pontostr); hs.Add("@P_QTD_DEVOLVER", val.lItens.Sum(p => p.Qtd_devolver * (x.Qt_pontos / p.Quantidade))); qtb_dev.executarSql("update TB_FAT_ResgatePontos set QT_Pontos = QT_Pontos - @P_QTD_DEVOLVER" + " where cd_empresa = @P_CD_EMPRESA" + " and id_cupom = @P_ID_CUPOM" + " and id_ponto = @P_ID_PONTO", hs); }); } if (st_transacao) { qtb_dev.Banco_Dados.Commit_Tran(); } return(val.Id_devolucaostr); } catch (Exception ex) { if (st_transacao) { qtb_dev.Banco_Dados.RollBack_Tran(); } throw new Exception("Erro gravar devolução:" + ex.Message.Trim()); } finally { if (st_transacao) { qtb_dev.deletarBanco_Dados(); } } }