/// <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); }
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); }
/// <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); }