public async Task InsertAsync(EleveEnrollement eleveEnrollement)
        {
            await _context.EleveEnrollements.AddAsync(eleveEnrollement);

            Enrollement enrollement = await _context.Enrollements.Where(e => e.Id == eleveEnrollement.EnrollementId).FirstOrDefaultAsync();

            if (enrollement.Type == "Groupe")
            {
                EleveEnrollement currentEleveEnrollement = await _context.EleveEnrollements.Include(ee => ee.Enrollement).Where(ee => ee.Enrollement.Type == "Groupe" && ee.DateDeFin > eleveEnrollement.DateDeDebut && ee.EleveId == eleveEnrollement.EleveId).FirstOrDefaultAsync();

                if (currentEleveEnrollement != null)
                {
                    PayementEnrollement currentPayementEnrollement = new PayementEnrollement();
                    var paid = 0;
                    List <PayementEnrollement> currentPayementEnrollements = await _context.PayementEnrollements.Where(pe => pe.EleveEnrollementId == currentEleveEnrollement.Id && pe.DateDeFin == currentEleveEnrollement.DateDeFin).ToListAsync();

                    if (currentPayementEnrollements.Count > 0)
                    {
                        foreach (PayementEnrollement cpe in currentPayementEnrollements)
                        {
                            if (cpe.DateDeDebut >= eleveEnrollement.DateDeDebut)
                            {
                                paid = paid + cpe.Paid;
                                _context.PayementEnrollements.Remove(cpe);
                            }
                            else
                            {
                                currentPayementEnrollement = cpe;
                            }
                        }
                        PayementEnrollementViewModel payementEnrollement = new PayementEnrollementViewModel()
                        {
                            Section            = "Scolarité",
                            Paid               = 0,
                            EleveEnrollementId = eleveEnrollement.Id,
                            DateDeDebut        = eleveEnrollement.DateDeDebut,
                            DateDeFin          = currentEleveEnrollement.DateDeFin.Value,
                        };
                        currentEleveEnrollement.DateDeFin             = eleveEnrollement.DateDeDebut;
                        _context.Entry(currentEleveEnrollement).State = EntityState.Modified;
                        await _context.SaveChangesAsync();

                        currentPayementEnrollement.DateDeFin             = eleveEnrollement.DateDeDebut;
                        _context.Entry(currentPayementEnrollement).State = EntityState.Modified;
                        await _context.SaveChangesAsync();

                        var pe = _mapper.Map <PayementEnrollement>(payementEnrollement);
                        await _context.PayementEnrollements.AddAsync(pe);
                    }
                    else
                    {
                        currentEleveEnrollement.DateDeFin             = eleveEnrollement.DateDeDebut;
                        _context.Entry(currentEleveEnrollement).State = EntityState.Modified;
                        await _context.SaveChangesAsync();
                    }
                }
            }
        }
        public async Task <ActionResult <PayementEnrollement> > GetPayementEnrollement(int id)
        {
            PayementEnrollement payementenrollement = await _payementEnrollementRepository.GetByIdAsync(id);

            if (payementenrollement == null)
            {
                return(NotFound());
            }

            return(payementenrollement);
        }
        public async Task <PayementEnrollement> GetCurrentEleveEnrollement(DateTime Date, int EleveId)
        {
            PayementEnrollement pe = await _context.PayementEnrollements.Include(pe => pe.EleveEnrollement).Where(pe => pe.EleveEnrollement.EleveId == EleveId && pe.Section == "Groupe" && pe.DateDeDebut <= Date && pe.DateDeFin > Date).FirstOrDefaultAsync();

            return(pe);
        }
 public void Update(PayementEnrollement payementenrollement)
 {
     _context.Entry(payementenrollement).State = EntityState.Modified;
 }
        public async Task DeleteAsync(int payementenrollementId)
        {
            PayementEnrollement payementenrollement = await _context.PayementEnrollements.FindAsync(payementenrollementId);

            _context.PayementEnrollements.Remove(payementenrollement);
        }
 public async Task InsertAsync(PayementEnrollement payementenrollement)
 {
     await _context.PayementEnrollements.AddAsync(payementenrollement);
 }