public bool Remove(int id) { Tipos_movimentoController tmc = new Tipos_movimentoController(); int countTiposMov = tmc.CountByPlano_conta(id); if (countTiposMov > 0) { BStatus.Alert("Não é possível excluir este plano de contas. Existem um ou mais tipos de movimento relacionado a ele."); return(false); } db.Remove(Find(id)); db.Commit(); BStatus.Success("Plano de contas removido."); return(true); }
public void AbreMovimento(int cliente_fornecedor_id, int tipo_movimento) { Movimento = new Movimentos(); Tipos_movimento tipo = new Tipos_movimentoController().Find(tipo_movimento); if (tipo.Utiliza_fornecedor) { InformarFornecedor(cliente_fornecedor_id); } else { InformarCliente(cliente_fornecedor_id); } Movimento.Tipo_movimento_id = tipo_movimento; BStatus.Success("Movimento iniciado..."); }
private bool Valid(Produtos_fornecedores pf) { Produtos p = new ProdutosController().Find(pf.Produto_id); if (pf.Preco_custo > p.Valor_unit) { DialogResult dr = MessageBox.Show("O preço de custo é maior que o valor unitário do produto. \nDeseja salvar mesmo assim?", "Atenção", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (dr == DialogResult.No) { BStatus.Alert("Operação 'Salvar' abortado pelo usuário."); return(false); } } if (pf.Preco_custo == p.Valor_unit) { DialogResult dr = MessageBox.Show("O preço de custo é iguala ao valor unitário do produto. \nPortanto, o lucro sobre o produto é 0. \nDeseja salvar mesmo assim?", "Atenção", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (dr == DialogResult.No) { BStatus.Alert("Operação 'Salvar' abortado pelo usuário."); return(false); } } if (pf.Consignado) { if (pf.Movimento_devolucao == pf.Movimento_entrada) { BStatus.Alert("O Tipo de Movimento de entrada deve ser diferente do Tipo de Movimento de devolução."); return(false); } if (pf.Movimento_devolucao == 0) { BStatus.Alert("Informe o Tipo de Movimento para devoluções consignadas."); return(false); } if (pf.Movimento_entrada == 0) { BStatus.Alert("Informe o Tipo de Movimento para entradas consignadas."); return(false); } Tipos_movimentoController tmc = new Tipos_movimentoController(); Tipos_movimento tmEntrada = tmc.Find(pf.Movimento_entrada); Tipos_movimento tmDevol = tmc.Find(pf.Movimento_devolucao); if (tmEntrada.Movimentacao_itens != (int)Tipo_movimentacao.ENTRADA) { BStatus.Alert("O Tipo de Movimento para realizar a entrada consignada deve possuir 'Movimentação de Itens = ENTRADA'."); return(false); } if (tmEntrada.Movimentacao_valores != (int)Tipo_movimentacao.NENHUM) { BStatus.Alert("O Tipo de Movimento para realizar entrada consignada deve possuir 'Movimentação de Valores = NENHUM'."); return(false); } if (tmDevol.Movimentacao_itens != (int)Tipo_movimentacao.SAIDA) { BStatus.Alert("O Tipo de Movimento para realizar devolução consignada deve possuir 'Movimentação de Itens = SAIDA'."); return(false); } if (tmDevol.Movimentacao_valores != (int)Tipo_movimentacao.SAIDA) { BStatus.Alert("O Tipo de Movimento para realizar devolução consignada deve possuir 'Movimentação de Valores = SAIDA'."); return(false); } if (pf.Comissao == 0) { BStatus.Alert("A comissão deve ser superior a 0"); } } if (pf.Fornecedor_id == 0) { BStatus.Alert("Informe o fornecedor"); return(false); } if (pf.Produto_id == 0) { BStatus.Alert("Informe o produto"); return(false); } if (pf.Unidade_id == 0) { BStatus.Alert("Informe a unidade"); return(false); } if (pf.Fator_conversao == 0) { pf.Fator_conversao = 1; } return(true); }
public void CupomNaoFiscal() { DsCupomNaoFiscal dataSet = new DsCupomNaoFiscal(); DataTable dtMovimento = dataSet.Tables["Movimento"]; EstoqueController eController = new EstoqueController(); Grades_produtosController gController = new Grades_produtosController(); UnidadesController unController = new UnidadesController(); UsuariosController usuariosController = new UsuariosController(); ClientesController clientesController = new ClientesController(); Tipos_movimentoController tipoMovController = new Tipos_movimentoController(); Formas_pagamentoController fpgController = new Formas_pagamentoController(); if (Movimento.Usuarios == null) { Movimento.Usuarios = new UsuariosController().Find(Movimento.Usuario_id); } #region MOVIMENTO dtMovimento.Rows.Add( Movimento.Id, UsuariosController.LojaAtual.Nome_fantasia, Movimento.Usuarios.Vendedores.Count == 0 ? Movimento.Usuarios.Nome : Movimento.Usuarios.Vendedores.First().Nome, Movimento.Cliente_id == 0 ? "Não identificado" : clientesController.Find(Movimento.Cliente_id).Nome, GetTotalParcial(), GetTotalDesconto(), Movimento.Data, "", $"{UsuariosController.LojaAtual.Logradouro}, {UsuariosController.LojaAtual.Bairro} - {UsuariosController.LojaAtual.Municipio}", tipoMovController.Find(Movimento.Tipo_movimento_id).Descricao, UsuariosController.LojaAtual.Cnpj); #endregion #region ITENS_PAGAMENTO DataTable dtItens_pag = dataSet.Tables["Itens_pagamento"]; itens_pag.ForEach(e => dtItens_pag.Rows.Add( fpgController.Find(e.Forma_pagamento_id).Descricao, e.Valor )); #endregion #region ITENS_MOVIMENTO DataTable dtItens_mov = dataSet.Tables["Itens_movimento"]; foreach (Itens_movimento item in Itens_movimento) { string cod_prod = string.Empty; string descricaoProdo = item.Produtos.Descricao; string descricao_valor_unitario = string.Empty; if (!string.IsNullOrEmpty(item.Lote)) { cod_prod = item.Lote + "SL" + item.Sublote; } else if (item.Grade_id != null) { Grades_produtos grade = gController.Find(item.Grade_id); cod_prod = item.Grade_id; descricaoProdo += $" {grade.Cores.Descricao} {grade.Tamanhos.Descricao}"; } else { cod_prod = item.Produtos.Ean; } if (item.Unidades == null) { item.Unidades = unController.Find(item.Unidade_id); } descricao_valor_unitario = $"{item.Quant} {item.Unidades.Sigla} x R${item.Valor_unit}"; dtItens_mov.Rows.Add(item.Id, cod_prod, descricaoProdo, descricao_valor_unitario, item.Quant, item.Valor_final); } #endregion IControllerReport rController = ReportController.GetInstance(); rController.AddDataSource("Itens_movimento", dtItens_mov); rController.AddDataSource("Itens_pagamento", dtItens_pag); rController.AddDataSource("Movimento", dtMovimento); rController.ShowReport("MOVIMENTO", "MOV001"); }
/// <summary> /// /// </summary> /// <returns>Código do movimento caso seja efetuado com sucesso. Caso haja erros, retornará 0.</returns> public int FechaMovimento(decimal troco) { UnitOfWork unit = new UnitOfWork(true); try { unit.BeginTransaction(); db.Context = unit.Context; if (itens_mov == null) { itens_mov = Movimento.Itens_movimento.ToList(); } Movimento.Itens_movimento.Clear(); if (itens_pag == null) { itens_pag = Movimento.Itens_pagamento.ToList(); } Movimento.Itens_pagamento.Clear(); Movimentos_caixasController movimentos_caixaController = new Movimentos_caixasController(); movimentos_caixaController.SetContext(unit.Context); Formas_pagamentoController fpg_controller = new Formas_pagamentoController(); fpg_controller.SetContext(unit.Context); Tipos_movimentoController tmc = new Tipos_movimentoController(); tmc.SetContext(unit.Context); Tipos_movimento tipo_mov = tmc.Find(Movimento.Tipo_movimento_id); Movimento.Id = db.NextId(e => e.Id); Movimento.Data = DateTime.Now; Movimento.Usuario_id = UsuariosController.UsuarioAtual.Id; Movimento.Loja_id = UsuariosController.LojaAtual.Id; db.Save(Movimento); db.Commit(); if (troco > 0) { int tipo_pg_dinheiro = (int)Tipo_pagamento.DINHEIRO; Formas_pagamento fpgTroco = fpg_controller.Get(e => e.Tipo_pagamento == tipo_pg_dinheiro); Movimentos_caixas mcTroco = new Movimentos_caixas(); mcTroco.Descricao = $"Movimento {Movimento.Id} (TROCO)"; mcTroco.Caixa_id = movimentos_caixaController.Get_ID_CaixaAtualUsuario(); mcTroco.Data = Movimento.Data; mcTroco.Movimento_id = Movimento.Id; mcTroco.Usuario_id = Movimento.Usuario_id; mcTroco.Forma_pagamento_id = fpgTroco.Id; mcTroco.Loja_id = UsuariosController.LojaAtual.Id; mcTroco.Tipo_mov = (int)Tipo_movimentacao_caixa.TROCO; mcTroco.Valor = (troco * (-1)); if (!movimentos_caixaController.Save(mcTroco)) { unit.RollBack(); return(0); } } Itens_movimentoController imc = new Itens_movimentoController(); imc.SetContext(unit.Context); EstoqueController estoque_controller = new EstoqueController(); estoque_controller.SetContext(unit.Context); string lote = imc.GetLastLote(false); lote = estoque_controller.GeraProximoLote(lote); int sublote = 1; #region Itens do movimento foreach (Itens_movimento item in itens_mov) { item.Produtos = null; item.Unidades = null; item.Movimento_id = Movimento.Id; Estoque e = new Estoque(); e.Produto_id = item.Produto_id; e.Loja_id = UsuariosController.LojaAtual.Id; e.Quant = item.Quant; e.Lote = (string.IsNullOrEmpty(item.Lote) ? null : (item.Lote + "SL" + item.Sublote)); e.Grade_id = item.Grade_id; ProdutosController pc = new ProdutosController(); pc.SetContext(unit.Context); Produtos prod = pc.Find(item.Produto_id); Produtos_fornecedoresController pForn_c = new Produtos_fornecedoresController(); pForn_c.SetContext(unit.Context); switch (tipo_mov.Movimentacao_itens) { case (int)Tipo_movimentacao.ENTRADA: /* * O produto controla Lote, e a sua entrada é vinda de um Fornecedor. * Neste caso é gerado o seu Lote e inserido no estoque da * loja em questão */ #region tipo_mov.Utiliza_fornecedor && prod.Controla_lote if (tipo_mov.Utiliza_fornecedor && prod.Controla_lote) { e.Lote = lote; e.Sublote = sublote.ToString(); e.Data_entrada = DateTime.Now; Produtos_fornecedores pf = pForn_c.Find(item.Produto_id, Movimento.Fornecedor_id); if (pf != null) { item.Quant = (item.Quant * pf.Fator_conversao); } estoque_controller.Save(e); sublote++; break; } #endregion #region tipo_mov.Utiliza_fornecedor && !prod.Controla_lote if (tipo_mov.Utiliza_fornecedor && !prod.Controla_lote) { Produtos_fornecedores pf = pForn_c.Find(item.Produto_id, Movimento.Fornecedor_id); if (pf != null) { item.Quant = (item.Quant * pf.Fator_conversao); } if (!estoque_controller.InsereEstoque(item.Quant, item.Produto_id, Movimento.Loja_id, (item.Lote + "SL" + item.Sublote))) { unit.RollBack(); return(0); } break; } #endregion /* * O produto controla Lote, porém sua entrada NÃO é proveniennte de um fornecedor. * Pode ser uma devolução, troca ou entrada por transferencia de loja. * * Neste caso, é verificado se existe o lote em questão. * Caso não exista, será criado, * Caso exista, o Saldo em Estoque do mesmo será atualizado */ #region (!tipo_mov.Utiliza_fornecedor) && prod.Controla_lote if ((!tipo_mov.Utiliza_fornecedor) && prod.Controla_lote) { if (!estoque_controller.ExisteLote(item.Lote, item.Sublote)) { estoque_controller.CriaLote(item.Produto_id, Movimento.Loja_id, item.Lote, item.Sublote); } if (!estoque_controller.InsereEstoque(item.Quant, item.Produto_id, Movimento.Loja_id, (item.Lote + "SL" + item.Sublote))) { unit.RollBack(); return(0); } break; } #endregion #region prod.Controla_grade if (prod.Controla_grade) { if (!estoque_controller.InsereEstoque(item.Quant, item.Produto_id, Movimento.Loja_id, null, item.Grade_id)) { unit.RollBack(); return(0); } break; } #endregion /* * O produto NÃO controla lote, e sua entrada NÃO é proveniente de um fornecedor. * Neste caso, o estoque será inserido levando em consideração o produto pelo seu código. * * OBS.: Quando um produto NÃO possui lotes em estoque, a tabela de Estoque só pode * conter um unico registro referente ao produto em questão, considerando a Loja. * * Quando o produto POSSUI lotes em estoque, a tabela de estoque pode conter varios * registros referente ao produto em questão, levando em consideração o Lote, Sub-Lote * e respectiva Loja. */ #region !tipo_mov.Utiliza_fornecedor && !prod.Controla_lote if (!tipo_mov.Utiliza_fornecedor && !prod.Controla_lote) { if (!estoque_controller.InsereEstoque(item.Quant, item.Produto_id, Movimento.Loja_id)) { unit.RollBack(); return(0); } break; } #endregion break; case (int)Tipo_movimentacao.SAIDA: string loteEst = (string.IsNullOrEmpty(e.Lote) ? null : e.Lote); if (!estoque_controller.RetiraEstoque(e.Quant, e.Produto_id, e.Loja_id, loteEst, item.Grade_id)) { unit.RollBack(); return(0); } break; } if (e.Lote != null) { if (e.Lote.Contains("SL")) { item.Lote = e.Lote.Substring(0, e.Lote.IndexOf("SL")); item.Sublote = e.Lote.Substring(e.Lote.IndexOf("SL") + 2); } else { item.Lote = e.Lote; item.Sublote = e.Sublote; } } if (!imc.Save(item)) { unit.RollBack(); return(0); } } #endregion int numero_parcela = 1; #region Itens do Pagamento foreach (Itens_pagamento item_pg in itens_pag) { if (tipo_mov.Movimentacao_valores == (int)Tipo_movimentacao.NENHUM) { continue; } item_pg.Movimento_id = Movimento.Id; ContasController contas_controller = new ContasController(); contas_controller.SetContext(unit.Context); Itens_pagamentoController ipc = new Itens_pagamentoController(); ipc.SetContext(unit.Context); if (!ipc.Save(item_pg)) { unit.RollBack(); return(0); } Formas_pagamento forma_pagamento = fpg_controller.Find(item_pg.Forma_pagamento_id); Movimentos_caixas movimento_caixa = new Movimentos_caixas(); movimento_caixa.Descricao = $"Movimento {Movimento.Id} ({(tipo_mov.Movimentacao_valores == (int)Tipo_movimentacao.ENTRADA ? "ENTRADA" : "SAIDA")})"; movimento_caixa.Caixa_id = movimentos_caixaController.Get_ID_CaixaAtualUsuario(); movimento_caixa.Data = Movimento.Data; movimento_caixa.Movimento_id = Movimento.Id; movimento_caixa.Usuario_id = Movimento.Usuario_id; movimento_caixa.Forma_pagamento_id = item_pg.Forma_pagamento_id; movimento_caixa.Loja_id = UsuariosController.LojaAtual.Id; ParcelasController parcController = new ParcelasController(); parcController.SetContext(unit.Context); switch (forma_pagamento.Tipo_pagamento) { #region DINHEIRO case (int)Tipo_pagamento.DINHEIRO: switch (tipo_mov.Movimentacao_valores) { case (int)Tipo_movimentacao.ENTRADA: movimento_caixa.Tipo_mov = (int)Tipo_movimentacao_caixa.ENTRADA; movimento_caixa.Valor = item_pg.Valor; break; case (int)Tipo_movimentacao.SAIDA: movimento_caixa.Tipo_mov = (int)Tipo_movimentacao_caixa.SAIDA; movimento_caixa.Valor = (item_pg.Valor * (-1)); break; } break; #endregion #region CARTAO case (int)Tipo_pagamento.CARTAO: movimento_caixa.Valor = 0; Operadoras_cartaoController opController = new Operadoras_cartaoController(); opController.SetContext(unit.Context); Operadoras_cartao operadora = opController.Find(forma_pagamento.Operadora_cartao_id); Parcelas parcela_cartao = new Parcelas(); parcela_cartao.Item_pagamento_id = item_pg.Id; parcela_cartao.Valor = item_pg.Valor; parcela_cartao.Situacao = (int)Situacao_parcela.EM_ABERTO; parcela_cartao.Data_lancamento = Movimento.Data; parcela_cartao.Data_vencimento = (operadora.Tipo_recebimento == (int)Tipo_prazo_operadora.DIAS ? Movimento.Data.AddDays(operadora.Prazo_recebimento) : Movimento.Data.AddHours(operadora.Prazo_recebimento)); parcela_cartao.Portador = forma_pagamento.Conta_id; if (tipo_mov.Movimentacao_valores == (int)Tipo_movimentacao.ENTRADA) { parcela_cartao.Tipo_parcela = (int)Tipo_parcela.RECEBER; parcela_cartao.Cliente_id = Movimento.Cliente_id; movimento_caixa.Tipo_mov = (int)Tipo_movimentacao_caixa.ENTRADA; movimento_caixa.Valor = item_pg.Valor; } if (tipo_mov.Movimentacao_valores == (int)Tipo_movimentacao.SAIDA) { parcela_cartao.Tipo_parcela = (int)Tipo_parcela.PAGAR; parcela_cartao.Fornecedor_id = Movimento.Cliente_id; movimento_caixa.Tipo_mov = (int)Tipo_movimentacao_caixa.SAIDA; movimento_caixa.Valor = item_pg.Valor * (-1); } parcela_cartao.Num_documento = Movimento.Id.ToString().PadLeft(8 - Movimento.Id.ToString().Length, '0') + "-" + numero_parcela; parcela_cartao.Parcela_descricao = $"REFERENTE AO MOVIMENTO {Movimento.Id} ({tipo_mov.Descricao})"; parcela_cartao.Numero_cheque = string.Empty; parcela_cartao.Banco = string.Empty; parcela_cartao.Agencia = string.Empty; parcela_cartao.Dias_compensacao = 0; parcela_cartao.Conta = string.Empty; if (!parcController.Save(parcela_cartao)) { unit.RollBack(); return(0); } numero_parcela++; break; #endregion #region CHEQUE case (int)Tipo_pagamento.CHEQUE: movimento_caixa.Valor = 0; IRegistroCheques registroCheques; if (tipo_mov.Movimentacao_valores == (int)Tipo_movimentacao.ENTRADA) { registroCheques = new RecebimentoCheques(); movimento_caixa.Tipo_mov = (int)Tipo_movimentacao_caixa.ENTRADA; movimento_caixa.Valor = item_pg.Valor; } else { registroCheques = new LancamentoCheque(); registroCheques.SetConta(contas_controller.Find(forma_pagamento.Conta_id)); movimento_caixa.Tipo_mov = (int)Tipo_movimentacao_caixa.SAIDA; movimento_caixa.Valor = item_pg.Valor * (-1); } registroCheques.Exibir(item_pg.Valor); foreach (Cheque cheque in registroCheques.Cheques) { Parcelas parcela_cheque = new Parcelas(); parcela_cheque.Item_pagamento_id = item_pg.Id; parcela_cheque.Valor = cheque.Valor; parcela_cheque.Situacao = (int)Situacao_parcela.EM_ABERTO; parcela_cheque.Data_lancamento = Movimento.Data; parcela_cheque.Num_documento = Movimento.Id.ToString().PadLeft(8 - Movimento.Id.ToString().Length, '0') + "-" + numero_parcela; parcela_cheque.Parcela_descricao = $"REFERENTE AO MOVIMENTO {Movimento.Id} ({tipo_mov.Descricao})"; parcela_cheque.Data_vencimento = cheque.Data_deposito; if (tipo_mov.Movimentacao_valores == (int)Tipo_movimentacao.ENTRADA) { parcela_cheque.Tipo_parcela = (int)Tipo_parcela.RECEBER; parcela_cheque.Cliente_id = Movimento.Cliente_id; parcela_cheque.Numero_cheque = cheque.Numero_cheque; parcela_cheque.Banco = cheque.Banco; parcela_cheque.Agencia = cheque.Agencia; parcela_cheque.Dias_compensacao = cheque.Dias_compensacao; parcela_cheque.Conta = cheque.Conta; } if (tipo_mov.Movimentacao_valores == (int)Tipo_movimentacao.SAIDA) { parcela_cheque.Tipo_parcela = (int)Tipo_parcela.PAGAR; parcela_cheque.Fornecedor_id = Movimento.Fornecedor_id; parcela_cheque.Portador = forma_pagamento.Conta_id; parcela_cheque.Numero_cheque = cheque.Numero_cheque; parcela_cheque.Banco = string.Empty; parcela_cheque.Agencia = string.Empty; parcela_cheque.Dias_compensacao = 0; parcela_cheque.Conta = string.Empty; } if (!parcController.Save(parcela_cheque)) { unit.RollBack(); return(0); } numero_parcela++; } break; #endregion #region PRAZO case (int)Tipo_pagamento.PRAZO: DateTime data_base = (forma_pagamento.Tipo_intervalo == (int)Tipo_intervalo.DATA_BASE ? DateTime.Now.AddMonths(1) : DateTime.Now.AddDays(forma_pagamento.Intervalo)); //baseando a data para o mes sequente ao atual for (int i = 0; i < forma_pagamento.Parcelas; i++) { Parcelas parcela_prazo = new Parcelas(); parcela_prazo.Item_pagamento_id = item_pg.Id; parcela_prazo.Valor = (item_pg.Valor / forma_pagamento.Parcelas); parcela_prazo.Situacao = (int)Situacao_parcela.EM_ABERTO; parcela_prazo.Data_lancamento = Movimento.Data; parcela_prazo.Parcela_descricao = $"REFERENTE AO MOVIMENTO {Movimento.Id} ({tipo_mov.Descricao})"; parcela_prazo.Num_documento = Movimento.Id.ToString().PadLeft(8 - Movimento.Id.ToString().Length, '0') + "-" + numero_parcela; parcela_prazo.Numero_cheque = string.Empty; parcela_prazo.Banco = string.Empty; parcela_prazo.Agencia = string.Empty; parcela_prazo.Dias_compensacao = 0; parcela_prazo.Conta = string.Empty; if (forma_pagamento.Tipo_intervalo == (int)Tipo_intervalo.DATA_BASE) { data_base = new DateTime(data_base.Year, data_base.Month, forma_pagamento.Dia_base); parcela_prazo.Data_vencimento = data_base; data_base = data_base.AddMonths(1); } if (forma_pagamento.Tipo_intervalo == (int)Tipo_intervalo.INTERVALO) { parcela_prazo.Data_vencimento = data_base; data_base = data_base.AddDays(forma_pagamento.Intervalo); } if (tipo_mov.Movimentacao_valores == (int)Tipo_movimentacao.ENTRADA) { parcela_prazo.Tipo_parcela = (int)Tipo_parcela.RECEBER; parcela_prazo.Cliente_id = Movimento.Cliente_id; movimento_caixa.Tipo_mov = (int)Tipo_movimentacao_caixa.ENTRADA; movimento_caixa.Valor = item_pg.Valor; } if (tipo_mov.Movimentacao_valores == (int)Tipo_movimentacao.SAIDA) { parcela_prazo.Tipo_parcela = (int)Tipo_parcela.PAGAR; parcela_prazo.Fornecedor_id = Movimento.Fornecedor_id; movimento_caixa.Tipo_mov = (int)Tipo_movimentacao_caixa.SAIDA; movimento_caixa.Valor = item_pg.Valor * (-1); } if (!parcController.Save(parcela_prazo)) { unit.RollBack(); return(0); } numero_parcela++; } break; #endregion } if (!movimentos_caixaController.Save(movimento_caixa)) { unit.RollBack(); return(0); } } #endregion if (Pedido_venda != null) { Pedidos_vendaController pedidosController = new Pedidos_vendaController(); pedidosController.SetContext(unit.Context); pedidosController.RemovePedido(Pedido_venda.Id); } unit.Commit(); BStatus.Success("Movimento salvo"); return(Movimento.Id); } catch (Exception ex) { unit.RollBack(); return(0); } }