コード例 #1
0
        public async Task <IActionResult> PostJournaliser()//(DtoTGC002InpDC20JournalForCreate dto)
        {
            var dto = new DtoTGC002InpDC20JournalForCreate()
            {
                DateCompta = DateTime.Now
            };
            var noUser   = int.Parse(User.FindFirstValue(ClaimTypes.NameIdentifier));
            var noClient = await _authRepo.NoClient(noUser);

            if (!await _repo.SwJournalisation(noClient, noUser))
            {
                return(BadRequest("Impossible de journaliser un journal vide"));
            }
            var items = await _repo.Journalisation(dto, noClient, noUser);

            var itemsDto = _mapper.Map <DtoTGC002OutDC20JournalForRead>(items);

            return(Ok(itemsDto));
        }
コード例 #2
0
        /// <summary>
        /// Lancer la journalisation
        /// </summary>
        /// <param name="dto">Dto avec la date de création du journal</param>
        /// <returns></returns>
        public async Task <DC20Journal> Journalisation(DtoTGC002InpDC20JournalForCreate dto, int noClient, int noUtilisateur)
        {
            var recordDC20 = new DC20Journal()
            {
                NoClient           = noClient,
                DateJournalisation = dto.DateCompta
            };
            // Increment - manuel pour clé composite
            var lastDC20 = _context.DC20Journal
                           .Where(x => x.NoClient == noClient)
                           .OrderByDescending(x => x.NoJournal)
                           .ToList();
            var nextDC20 = 0;

            foreach (var i in lastDC20)
            {
                nextDC20 = i.NoJournal;
                break;
            }
            nextDC20++;
            recordDC20.NoJournal = nextDC20;
            Add <DC20Journal>(recordDC20);
            if (!await SaveAll())
            {
                return(null);
            }

            // Lecture de toutes les écritures collective (même si c'est une écriture simple, elle est indexée dans les écritures collective)
            List <DC31EcritureCollectiveJournal> itemsDC31 = await _context.DC31EcritureCollectiveJournal
                                                             .Where(x => (x.NoClient == noClient) && (x.NoUtilisateur == noUtilisateur))
                                                             .OrderBy(x => x.NoEcritureCollectiveJournal)
                                                             .ToListAsync();

            // Pour rollback
            var copyItemsDC31 = itemsDC31;

            foreach (var itemDC31 in itemsDC31)
            {
                var recordDC22 = new DC22EcritureCollective()
                {
                    NoClient     = noClient,
                    NoJournal    = recordDC20.NoJournal,
                    DateEcriture = itemDC31.DateEcriture
                };
                // Increment - manuel pour clé composite
                var lastDC22 = _context.DC22EcritureCollective
                               .Where(x => x.NoClient == noClient)
                               .OrderByDescending(x => x.NoEcritureCollective)
                               .ToList();
                var nextDC22 = 0;
                foreach (var i in lastDC22)
                {
                    nextDC22 = i.NoEcritureCollective;
                    break;
                }
                nextDC22++;
                recordDC22.NoEcritureCollective = nextDC22;
                Add <DC22EcritureCollective>(recordDC22);
                if (!await SaveAll())
                {
                    return(await RollBackJournalisation(noClient, noUtilisateur, recordDC20.NoJournal, copyItemsDC31));
                }
                // Lecture de toutes les écritures dans l'écriture collective
                foreach (var item in itemDC31.EcritureJournal)
                {
                    ///
                    /// Dans le cas d'une écriture simple, le compte débit et crédit est toujours
                    /// allimenté
                    ///
                    /// Mais dans le cas d'une écriture collective on peut avoir
                    /// [Debit] - [Rien  ] -> Donc pas de contre partie, la contre partie est collective
                    /// [Rien ] - [Credit]
                    /// [Rien ] - [Credit]

                    /// Première écriture
                    /// Le if est une sécurité pour être sur que la FK NoCompte est allimenté
                    if (item.Montant >= 0 ? item.NoCompteDebit != null : item.NoCompteCredit != null)
                    {
                        var noCompteEcriture1 = item.Montant >= 0 ? (int)item.NoCompteDebit : (int)item.NoCompteCredit;
                        // Increment - manuel pour clé composite
                        var lastDC21 = _context.DC21Ecriture
                                       .Where(x => (x.NoClient == noClient) && (x.NoEcritureCollective == recordDC22.NoEcritureCollective))
                                       .OrderByDescending(x => x.NoEcriture)
                                       .ToList();
                        var nextDC21 = 0;
                        foreach (var i in lastDC21)
                        {
                            nextDC21 = i.NoEcriture;
                            break;
                        }
                        nextDC21++;
                        var recordDC21 = new DC21Ecriture()
                        {
                            NoClient             = noClient,
                            NoEcritureCollective = recordDC22.NoEcritureCollective,
                            NoEcriture           = nextDC21,
                            NoCompte             = noCompteEcriture1,
                            ContrePartie         = item.Montant >= 0
                                ? item.NoCompteCredit
                                : item.NoCompteDebit,
                            NoPiece      = item.NoPiece,
                            MontantDebit = item.Montant >= 0
                                ? item.Montant : 0,
                            MontantCredit = item.Montant >= 0
                                ? 0
                                : (item.Montant * -1),
                            Libelle1             = item.Libelle1,
                            Libelle2             = item.Libelle2,
                            SwImpressionExtourne = true,
                            NoJournal            = recordDC20.NoJournal,
                        };
                        Add <DC21Ecriture>(recordDC21);
                        if (!await SaveAll())
                        {
                            return(await RollBackJournalisation(noClient, noUtilisateur, recordDC20.NoJournal, copyItemsDC31));
                        }
                    }
                    /// Deuxième écriture
                    /// Le if est une sécurité pour être sur que la FK NoCompte est allimenté
                    if (item.Montant >= 0 ? item.NoCompteCredit != null : item.NoCompteDebit != null)
                    {
                        var noCompteEcriture2 = item.Montant >= 0 ? (int)item.NoCompteCredit : (int)item.NoCompteDebit;
                        // Increment - manuel pour clé composite
                        var lastDC21 = _context.DC21Ecriture
                                       .Where(x => (x.NoClient == noClient) && (x.NoEcritureCollective == recordDC22.NoEcritureCollective))
                                       .OrderByDescending(x => x.NoEcriture)
                                       .ToList();
                        var nextDC21 = 0;
                        foreach (var i in lastDC21)
                        {
                            nextDC21 = i.NoEcriture;
                            break;
                        }
                        nextDC21++;
                        var recordDC21 = new DC21Ecriture()
                        {
                            NoClient             = noClient,
                            NoEcritureCollective = recordDC22.NoEcritureCollective,
                            NoEcriture           = nextDC21,
                            NoCompte             = noCompteEcriture2,
                            ContrePartie         = item.Montant >= 0
                                ? item.NoCompteDebit
                                : item.NoCompteCredit,
                            NoPiece      = item.NoPiece,
                            MontantDebit = item.Montant >= 0
                                ? 0
                                : (item.Montant * -1),
                            MontantCredit = item.Montant >= 0
                                ? item.Montant
                                : 0,
                            Libelle1             = item.Libelle1,
                            Libelle2             = item.Libelle2,
                            SwImpressionExtourne = true,
                            NoJournal            = recordDC20.NoJournal,
                        };
                        Add <DC21Ecriture>(recordDC21);
                        if (!await SaveAll())
                        {
                            return(await RollBackJournalisation(noClient, noUtilisateur, recordDC20.NoJournal, copyItemsDC31));
                        }
                    }
                }
                // Suppression des écritures à journaliser
                foreach (var item in itemDC31.EcritureJournal)
                {
                    // Suppression de l'écriture à journaliser
                    Delete <DC30EcritureJournal>(item);
                }
                // Suppression de l'écriture collective à journaliser
                Delete <DC31EcritureCollectiveJournal>(itemDC31);
                // Sauvegarde
                if (!await SaveAll())
                {
                    return(await RollBackJournalisation(noClient, noUtilisateur, recordDC20.NoJournal, copyItemsDC31));
                }
            }
            return(await _context.DC20Journal
                   .Include(x => x.Ecriture)
                   .ThenInclude(x => x.Compte)
                   .Include(x => x.Ecriture)
                   .ThenInclude(x => x.CompteContrePartie)
                   .FirstOrDefaultAsync(x => (x.NoClient == noClient) && (x.NoJournal == recordDC20.NoJournal)));
        }