Example #1
0
        /// <summary>
        /// Create Journal Entries For the Invoice
        /// </summary>
        /// <param name="mode"></param>
        /// <returns></returns>
        private List <EcritureJournal> CreateEcritureJournal(CreateModes mode)
        {
            var ej_result = new List <EcritureJournal>();

            if (this.EnsureIsSavedSubmit())
            {
                if (this.IsReturn == false)
                {
                    EcritureJournal credit = new EcritureJournal();
                    credit.DateEcriture  = this.DateCreation;
                    credit.CompteJournal = this.CompteCredit.IsValide() ? this.CompteCredit : CompteSettings.getInstance().CompteVente;
                    credit.MontantCredit = this.MontantTotalHT;
                    credit.MontantDebit  = 0;
                    credit.ObjetEcriture = "Facture de vente";
                    credit.RefDate       = this.DateCreation;
                    credit.RefNumber     = this.Name;
                    credit.RefFacture    = this.Id;
                    credit.CompteContre  = this.NomTier;
                    credit.Tier          = this.Tier;
                    credit.Utilisateur   = DataHelpers.ConnectedUser?.Id;

                    EcritureJournal debit = new EcritureJournal();
                    debit.CompteJournal = this.CompteDebit.IsValide() ? this.CompteDebit : CompteSettings.getInstance().CompteTier;
                    debit.CompteContre  = this.NomTier;
                    debit.DateEcriture  = this.DateCreation;
                    debit.MontantCredit = 0;
                    debit.MontantDebit  = this.MontantGlobalTTC;
                    debit.ObjetEcriture = "Facture de vente";
                    debit.RefDate       = this.DateCreation;
                    debit.RefFacture    = this.Id;
                    debit.RefNumber     = this.Name;
                    debit.Tier          = this.Tier;
                    debit.Utilisateur   = DataHelpers.ConnectedUser?.Id;

                    ej_result.Add(debit);
                    ej_result.Add(credit);
                    // Enregsitrement TVA

                    var taxes = this.TaxeLigne;
                    if (taxes.Any())
                    {
                        foreach (var taxe in taxes)
                        {
                            EcritureJournal credit_tva = new EcritureJournal();
                            credit_tva.CompteJournal = CompteSettings.getInstance().CompteTVA;
                            credit_tva.DateEcriture  = this.DateCreation;
                            credit_tva.MontantCredit = taxe.MontantTaxe;
                            credit_tva.MontantDebit  = 0;
                            credit_tva.ObjetEcriture = "TVA Collectée";
                            credit_tva.RefDate       = this.DateCreation;
                            credit_tva.RefNumber     = this.Name;
                            credit_tva.RefFacture    = this.Id;
                            credit_tva.CompteContre  = this.NomTier;
                            credit_tva.Tier          = this.Tier;
                            credit_tva.Utilisateur   = DataHelpers.ConnectedUser?.Id;
                            ej_result.Add(credit_tva);
                        }
                    }
                }
                else
                {
                    // Enregistrement this

                    // Normalisé les qts positif

                    this.ArticleFacture.ForEach(a => a.Qts = System.Math.Abs(a.Qts));

                    EcritureJournal credit = new EcritureJournal();
                    credit.CompteJournal = this.CompteCredit.IsValide() ? this.CompteCredit : CompteSettings.getInstance().CompteVente;
                    //CompteSettings.getInstance().CompteVente;
                    credit.DateEcriture  = this.DateCreation;
                    credit.MontantDebit  = this.MontantTotalHT;
                    credit.MontantCredit = 0;
                    credit.ObjetEcriture = "Retour vente";
                    credit.RefDate       = this.DateCreation;
                    credit.RefNumber     = this.Name;
                    credit.RefFacture    = this.Id;
                    credit.CompteContre  = this.NomTier;
                    credit.Tier          = this.Tier;
                    credit.Utilisateur   = DataHelpers.ConnectedUser?.Id;

                    EcritureJournal debit = new EcritureJournal();
                    debit.CompteJournal = this.CompteDebit.IsValide() ? this.CompteDebit : CompteSettings.getInstance().CompteTier;
                    //CompteSettings.getInstance().CompteTier;
                    debit.DateEcriture  = this.DateCreation;
                    debit.CompteContre  = this.NomTier;
                    debit.MontantDebit  = 0;
                    debit.MontantCredit = this.MontantGlobalTTC;
                    debit.ObjetEcriture = "Retour vente";
                    debit.RefDate       = this.DateCreation;
                    debit.RefFacture    = this.Id;
                    debit.RefNumber     = this.Name;
                    debit.Tier          = this.Tier;
                    debit.Utilisateur   = DataHelpers.ConnectedUser?.Id;

                    ej_result.Add(debit);
                    ej_result.Add(credit);
                    // Enregsitrement TVA

                    var taxes = this.TaxeLigne;
                    if (taxes.Any())
                    {
                        foreach (var taxe in taxes)
                        {
                            EcritureJournal credit_tva = new EcritureJournal();
                            credit_tva.CompteJournal = CompteSettings.getInstance().CompteTVA;
                            credit_tva.MontantDebit  = taxe.MontantTaxe;
                            credit_tva.DateEcriture  = this.DateCreation;
                            credit_tva.MontantCredit = 0;
                            credit_tva.ObjetEcriture = "TVA Remboursée";
                            credit_tva.RefDate       = this.DateCreation;
                            credit_tva.RefNumber     = this.Name;
                            credit_tva.RefFacture    = this.Id;
                            credit_tva.CompteContre  = this.NomTier;
                            credit_tva.Tier          = this.Tier;
                            credit_tva.Utilisateur   = DataHelpers.ConnectedUser?.Id;
                            ej_result.Add(credit_tva);
                        }
                    }
                }
            }

            ej_result.ForEach(a => a = CreateModesHandler.Handle(a, mode) as EcritureJournal);
            return(ej_result);
        }
Example #2
0
        public override IEnumerable <ExtendedDocument> GetList()
        {
            var doc = DataHelpers.Shell.OpenScreenFind(typeof(Tier), $"{_("Selectioner tier")}...").Result;

            List <SoldeTier_report> result = new List <SoldeTier_report>();

            if (doc != null)
            {
                if (doc.Count() > 1)
                {
                    MessageBox.Show("Selectionner un seul Tier");
                    return(null);
                }
                SelectedTier = doc.FirstOrDefault() as Tier;



                var facture       = DS.db.GetAll <Facture>(a => a.Tier == SelectedTier.Id && a.DocStatus == 1);
                var facturesAchat = DS.db.GetAll <FactureAchat>(a => a.Tier == SelectedTier.Id && a.DocStatus == 1);

                var      firstdate      = facture.Min(a => a.DateCreation);
                var      firstdateAchat = facturesAchat.Min(a => a.DateCreation);
                DateTime?oldest         = null;
                DateTime?oldestPurchase = null;

                if (firstdate != null && firstdateAchat != null)
                {
                    oldest         = firstdate <= firstdateAchat ? firstdate : firstdateAchat;
                    oldestPurchase = oldest > DateTime.Now ? DateTime.Now : oldest;
                }
                else
                {
                    if (firstdate != null)
                    {
                        oldestPurchase = firstdate;
                    }
                }


                var dates = DataHelpers.GetDateRangeByMonth(oldestPurchase.GetValueOrDefault(new DateTime(DateTime.Today.Year, 01, 01)), DateTime.Now);

                var compteTier  = CompteSettings.getInstance().CompteTier;
                var compteFroun = CompteSettings.getInstance().CompteFournisseur;

                var ej = DS.db.GetAll <EcritureJournal>(a => a.DocStatus == 1 &&
                                                        (a.CompteJournal == compteFroun || a.CompteJournal == compteTier) && a.Tier == this.SelectedTier.Id);
                var MontantCreditT = ej?.Sum(d => d.MontantCredit);
                var MontantDebitT  = ej?.Sum(a => a.MontantDebit);
                var soldeDefT      = (MontantCreditT - MontantDebitT);

                result.Add(new SoldeTier_report()
                {
                    Name       = "Nom Tier",
                    SoldeDebit = $"{SelectedTier.NameSearch}",
                });

                result.Add(new SoldeTier_report()
                {
                    Name       = $"Type",
                    SoldeDebit = SelectedTier.IsClient ? "Client" : (SelectedTier.IsFournisseur ? "Fournisseur":"")
                });

                result.Add(new SoldeTier_report()
                {
                    Name = "    "
                });

                foreach (var item in dates)
                {
                    var ejperiod      = ej.Where(a => a.DateEcriture >= item && a.DateEcriture < item.AddMonths(1));
                    var MontantCredit = ejperiod?.Sum(d => d.MontantCredit);
                    var MontantDebit  = ejperiod?.Sum(a => a.MontantDebit);

                    var soldeDef = (MontantCredit - MontantDebit);

                    var factures           = facture.Where(a => a.DateCreation >= item && a.DateCreation < item.AddMonths(1));
                    var nombreFactureVente = factures?.Count();
                    var soldeFactureVente  = factures?.Sum(a => a.MontantGlobalTTC);

                    var achat = facturesAchat.Where(a => a.DateCreation >= item && a.DateCreation < item.AddMonths(1));
                    var nombreFactureAchat = achat?.Count();
                    var soldeFactureAchat  = achat?.Sum(a => a.MontantGlobalTTC);

                    var cmdVente           = DS.db.GetAll <CommandeVente>(a => a.DocStatus == 1 && a.Tier == this.SelectedTier.Id);
                    var cmdVenteNonPaye    = cmdVente?.Where(a => a.DateCommande >= item && a.DateCommande < item.AddMonths(1) && a.EstFacturer() == false);
                    var countCmdNonFacture = cmdVenteNonPaye?.Count();
                    var soldeCmdNonFacture = cmdVenteNonPaye?.Sum(a => a.MontantGlobalTTC);


                    var cmdAchat                = DS.db.GetAll <CommandeAchat>(a => a.DocStatus == 1 && a.Tier == this.SelectedTier.Id);
                    var cmdAchatNonPaye         = cmdAchat?.Where(a => a.DateCommande >= item && a.DateCommande < item.AddMonths(1) && a.EstFacturer() == false);
                    var countCmdNonFactureAchat = cmdAchatNonPaye?.Count();
                    var soldeCmdNonFactureAchat = cmdAchatNonPaye?.Sum(a => a.MontantGlobalTTC);


                    result.Add(new SoldeTier_report()
                    {
                        Name          = item.ToString("MMMM yyyy"),
                        Mois          = item.ToString("MMMM yyyy"),
                        SoldeDebit    = MontantDebit?.ToString("C"),
                        SoldeCredit   = MontantCredit?.ToString("C"),
                        Creance       = soldeDef?.ToString("C"),
                        FacturesVente = $@"{nombreFactureVente} Factures / {soldeFactureVente?.ToString("C")}
{countCmdNonFacture} Non facturée(s) / {soldeCmdNonFacture?.ToString("C")}",
                        FacturesAchat = $@"{nombreFactureAchat} Factures / {soldeFactureAchat?.ToString("C")}
{countCmdNonFactureAchat} Non facturée(s) / {soldeCmdNonFactureAchat?.ToString("C")}"
                    });
                }

                result.Add(new SoldeTier_report()
                {
                    Name          = "                  ",
                    Mois          = "                  ",
                    SoldeDebit    = "                  ",
                    SoldeCredit   = "                  ",
                    Creance       = "                  ",
                    FacturesVente = "                  ",
                    FacturesAchat = "                  ",
                });

                result.Add(new SoldeTier_report()
                {
                    Name        = "TOTAL",
                    Mois        = "TOTAL",
                    SoldeDebit  = MontantDebitT?.ToString("C"),
                    SoldeCredit = MontantCreditT?.ToString("C"),
                    Creance     = soldeDefT?.ToString("C"),
                });
                result.Add(new SoldeTier_report()
                {
                    Name = "                  ",
                });
                if (soldeDefT < 0)
                {
                    var notpaied = facture.Where(a => a.EstPaye() == false);

                    string names = "";
                    foreach (var item in notpaied)
                    {
                        names += $"\n{item.Name}";
                    }

                    result.Add(new SoldeTier_report()
                    {
                        Name          = "RETARD DE PAIEMENT",
                        SoldeDebit    = "----------------",
                        SoldeCredit   = "----------------",
                        Creance       = Math.Abs(soldeDefT.GetValueOrDefault(0)).ToString("C"),
                        FacturesVente = $@"{notpaied.Count()} Factures non payés {names }"
                    });
                }
                else
                {
                    result.Add(new SoldeTier_report()
                    {
                        Name        = "AVANCE DE PAIEMENT",
                        SoldeDebit  = "----------------",
                        SoldeCredit = "----------------",
                        Creance     = Math.Abs(soldeDefT.GetValueOrDefault(0)).ToString("C"),
                    });
                }
            }

            return(result);
        }
Example #3
0
        /// <summary>
        /// Create paiement Entry for the invoice
        /// </summary>
        /// <param name="mode">Creating Mode</param>
        /// <returns></returns>
        public EcriturePaiment CreatePaiement(CreateModes mode, decimal MontantPaye)
        {
            if (this.RefEcriturePaiment.IsValide())
            {
                var res = MessageBox.Show($"Facture déja fait référencer a un paiement #{this.RefEcriturePaiment.GetObject<EcriturePaiment>()?.Name}! voulez-vous continuer?", "Confirmation", MessageBoxButton.YesNo);
                if (res == MessageBoxResult.No)
                {
                    return(null);
                }
            }

            if (EnsureIsSavedSubmit())
            {
                // validate mode de paiment par default
                var modePaiementParDefault = CompteSettings.getInstance().DefaultModelPaiement;
                if (!modePaiementParDefault.HasValue || modePaiementParDefault == ObjectId.Empty)
                {
                    MessageBox.Show("Mode de paiement par default introuvable, éditer les paramétres comptabilité");
                    return(null);
                }

                var ecritureapiemenrt = new EcriturePaiment();
                if (this.IsReturn == false)
                {
                    ecritureapiemenrt               = DataHelpers.MapProperties(ecritureapiemenrt, this) as EcriturePaiment;
                    ecritureapiemenrt.Tier          = this.Tier;
                    ecritureapiemenrt.DateEcriture  = this.DateEcheance;
                    ecritureapiemenrt.ModeDePiement = modePaiementParDefault;
                    ecritureapiemenrt.MontantPaye   = MontantPaye;
                    ecritureapiemenrt.ObjetEcriture = "Recevoir";
                    ecritureapiemenrt.Factures      = new List <Facture>()
                    {
                        this
                    };
                    ecritureapiemenrt.ComtpeDebit  = modePaiementParDefault.GetObject <ModePaiement>()?.CompteCredit;
                    ecritureapiemenrt.ComtpeCredit = CompteSettings.getInstance().CompteTier;
                    ecritureapiemenrt.Remarques    = "Enregistrer depuis facture " + this.Name;

                    // return ecritureapiemenrt;
                }
                else
                {
                    ecritureapiemenrt               = DataHelpers.MapProperties(ecritureapiemenrt, this) as EcriturePaiment;
                    ecritureapiemenrt.Tier          = this.Tier;
                    ecritureapiemenrt.DateEcriture  = this.DateEcheance;
                    ecritureapiemenrt.ModeDePiement = modePaiementParDefault;
                    ecritureapiemenrt.MontantPaye   = Math.Abs(this.MontantReste);
                    ecritureapiemenrt.ComtpeCredit  = modePaiementParDefault.GetObject <ModePaiement>()?.CompteCredit;
                    ecritureapiemenrt.ComtpeDebit   = CompteSettings.getInstance().CompteTier;
                    ecritureapiemenrt.ObjetEcriture = "Payer";
                    ecritureapiemenrt.Factures      = new List <Facture>()
                    {
                        this
                    };
                    ecritureapiemenrt.Remarques = "Enregistrer depuis facture retour " + this.Name;

                    // return ecritureapiemenrt;
                }

                ecritureapiemenrt = this.MapRefsTo(ecritureapiemenrt) as EcriturePaiment;
                ecritureapiemenrt = CreateModesHandler.Handle(ecritureapiemenrt, mode) as EcriturePaiment;
                return(ecritureapiemenrt);
            }
            return(null);
        }