public void PagarComissao(int idVendedor, List <int> contratos, int filtroPag, DateTime inicio, DateTime fim) { var vendedor = new VendedorRepositorio(this._context, this._transaction).Get(idVendedor); if (filtroPag == 1) { foreach (var cont in contratos) { var parcelas = new ContratoParcelaRepositorio(this._context, this._transaction).GetByContrato(cont); foreach (var parc in parcelas) { parc.comissao = parc.valorParcela * (vendedor.percComis / 100); new ContratoParcelaRepositorio(this._context, this._transaction).Update(parc); } } } else if (filtroPag == 2) { foreach (var cont in contratos) { var parcelas = new ContratoParcelaRepositorio(this._context, this._transaction).GetByContrato(cont); parcelas = parcelas.Where(p => p.situacao == 3); foreach (var parc in parcelas) { var pagamentos = new ContratoParcelaPagamentoRepositorio(this._context, this._transaction).GetByContratoParcela(parc.Id); pagamentos = pagamentos.Where(e => e.comissao == 0 && e.valorPagamento > 0 && e.dataPagamento >= inicio && e.dataPagamento <= fim).ToList(); foreach (var pgto in pagamentos) { pgto.comissao = pgto.valorPagamento * (vendedor.percComis / 100); new ContratoParcelaPagamentoRepositorio(this._context, this._transaction).Update(pgto); } } } } else { throw new AppError("Filtro inválido"); } }
public void GerarParcelas(Contrato Contrato, int diaVencimentoDemais, bool isPrimeiraVigencia) { var parcelasContrato = new ContratoParcelaRepositorio(this._context, this._transaction).GetByContrato(Contrato.Id).ToList(); if (parcelasContrato.Count > 0) { foreach (var parc in parcelasContrato) { new ContratoParcelaRepositorio(this._context, this._transaction).Remove(parc.Id); } } var servicos = (List <ContratoServico>) new ContratoServicoRepositorio(this._context, this._transaction).GetByContrato(Contrato.Id); if (servicos == null || servicos.Count == 0) { return; } else if (Contrato.numParcelas == 0) { throw new AppError("É necessário informar o número de parcelas"); } DateTime dataPrimeira = DateTime.Today; DateTime dataSegunda = DateTime.Today; decimal valorParc = servicos.Sum(s => s.valorTotal) / Contrato.numParcelas; if (valorParc == 0) { throw new AppError("Os serviços prestados a esse contrato não possuem valor"); } valorParc = Math.Round(valorParc, 2); if (diaVencimentoDemais == 0) { dataPrimeira = Contrato.dataInicio; } else { if (isPrimeiraVigencia) { dataPrimeira = Contrato.dataInicio; if (diaVencimentoDemais != 0) { if (diaVencimentoDemais < Contrato.dataInicio.Day) { //Mês seguinte var dataFinal = Contrato.dataInicio.AddMonths(1); dataSegunda = Convert.ToDateTime($"{diaVencimentoDemais}/{dataFinal.Month}/{dataFinal.Year}"); } else { dataSegunda = Convert.ToDateTime($"{diaVencimentoDemais}/{Contrato.dataInicio.Month}/{Contrato.dataInicio.Year}"); } } } else { if (diaVencimentoDemais < Contrato.dataInicio.Day) { //Mês seguinte var dataFinal = Contrato.dataInicio.AddMonths(1); dataPrimeira = Convert.ToDateTime($"{diaVencimentoDemais}/{dataFinal.Month}/{dataFinal.Year}"); dataSegunda = dataPrimeira; } else { dataPrimeira = Convert.ToDateTime($"{diaVencimentoDemais}/{Contrato.dataInicio.Month}/{Contrato.dataInicio.Year}"); dataSegunda = dataPrimeira; } } } List <ContratoParcela> parcelas = new List <ContratoParcela>(); for (int i = 0; i < Contrato.numParcelas; i++) { ContratoParcela parc = new ContratoParcela(); parc.idContrato = Contrato.Id; parc.numParcela = i + 1; parc.valorParcela = valorParc; parc.dataVencimento = (i == 0) ? dataPrimeira : (diaVencimentoDemais == 0) ? dataPrimeira.AddMonths(i) : dataSegunda.AddMonths(i); parc.situacao = 1; //parc.comissao = valorParc * (Contrato.vendedor.percComis / 100); parc.comissao = 0; parcelas.Add(parc); } var soma = parcelas.Sum(p => p.valorParcela); decimal dif = 0; dif = servicos.Sum(s => s.valorTotal) - soma; if (dif > 0) { parcelas.Last().valorParcela = parcelas.Last().valorParcela + dif; } foreach (var parc in parcelas) { new ContratoParcelaRepositorio(this._context, this._transaction).Create(parc); } }