/// <summary> /// Charge les données on load pour éviter /// l'appel du repos dans visual studio /// </summary> /// <param name="sender"></param> /// <param name="e"></param> internal void OnWindowLoaded(object sender, RoutedEventArgs e) { try { if (System.ComponentModel.LicenseManager.UsageMode == System.ComponentModel.LicenseUsageMode.Designtime) { // Design time logic return; } cmRepos = new ContremarqueRepository(); cmRepos.openBaseCial(); cmRepos.Log += Log; FournList = cmRepos.FournList; string message = cmRepos.DocumentIsValid(_doPiece); if (!string.Equals(message, string.Empty)) { Log($"ERREUR::{message}"); Log("Vous pouvez fermer cette fenêtre"); MainGridEnabled = false; return; } CmLignes = new ObservableCollection <Contremarque>(cmRepos.getAll(_doPiece)); if (CmLignes.Any(c => c.Type == 0) == true) { DisableIntermagEnabled = false; DisableIntermag = true; Message = "Attention! Vous êtes sur un devis, cela va donc générer un APC de demande de prix"; } foreach (Contremarque contremarque in CmLignes) { contremarque.PropertyChanged += Contremarque_PropertyChanged; } } catch (Exception ex) { MessageBox.Show(ex.Message); } }
/// <summary> /// Crée une commande Retro /// TODO utiliser le programme Contremarque pour générer l'APC? eg crée le document de vente en premier puis ajoute une contremarque sur toute les lignes /// </summary> /// <param name="dt"></param> /// <returns></returns> public string createCommandeRetro(DataTable dt, string targetDb) { BSCIALApplication100c bsc = GetInstance(); try { bsc.Open(); IBOClient3 client = getClient(bsc, dt.Rows[0]["DBCLIENT"].ToString() + " RETRO"); string doRef = dt.Rows[0]["DO_Piece"].ToString(); CheckCommandeClientExiste(client.CT_Num, doRef, targetDb); // Crée le bon de commande client IPMDocument procDocV = bsc.CreateProcess_Document(DocumentType.DocumentTypeVenteCommande); IBODocumentVente3 docVEntete = (IBODocumentVente3)procDocV.Document; // Affecte le numéro de pièce docVEntete.SetDefaultDO_Piece(); docVEntete.SetDefaultClient(client); docVEntete.CategorieTarif = bsc.FactoryCategorieTarif.ReadIntitule("Tarif Article N° 13"); IBODocumentVenteLigne3 docVLigne; foreach (DataRow row in dt.Rows) { string arRef = row["AR_Ref"].ToString(); string gamme1 = row["Gamme1"].ToString(); string gamme2 = row["Gamme2"].ToString(); double montantHT = double.Parse(row["DL_MontantHT"].ToString(), System.Globalization.CultureInfo.InvariantCulture); double qt = double.Parse(row["DL_Qte"].ToString(), System.Globalization.CultureInfo.InvariantCulture); double prixUNet = montantHT / qt; string refFourn = row["AF_RefFourniss"].ToString(); string design = row["DL_Design"].ToString(); string txtComplementaire = row["DT_Text"].ToString(); string unite = row["EU_Enumere"].ToString(); docVLigne = null; if (arRef != "") { docVLigne = (IBODocumentVenteLigne3)addArticleToLigne(procDocV, arRef, gamme1, gamme2, qt, unite); docVLigne.DL_PrixUnitaire = prixUNet; docVLigne.DL_Design = design; docVLigne.TxtComplementaire = txtComplementaire; docVLigne.Write(); } else { // Sinon c'est une ligne de commentaire docVLigne = (IBODocumentVenteLigne3)docVEntete.FactoryDocumentLigne.Create(); docVLigne.DL_Design = design; docVLigne.Write(); } } if (procDocV.CanProcess) { procDocV.Process(); // Cherche les divers pour forcer la maj du texte complémentaire // Ne peut pas être effectué pendant le process car les info libres n'existent pas encore foreach (IBODocumentVenteLigne3 ligne in GetDocument(docVEntete.DO_Piece).FactoryDocumentLigne.List) { if (ligne.Article != null && (ligne.Article.AR_Ref == "DIVERS" || ligne.Article.Famille.FA_CodeFamille == "UNIQUE")) { new DiversRepository().saveLigneVente(ligne); } } // Ajoute les lignes en contremarque ContremarqueRepository cmRepos = new ContremarqueRepository(); cmRepos.Log += Log; Collection <Contremarque> cms = cmRepos.getAll(docVEntete.DO_Piece); cms.Select(c => { c.RowChecked = true; c.SelectedFourn = "Principal"; // On force pour chaque ligne le fournisseur demandé // Cela permet de faire du retro sur un fournisseur secondaire c.FournPrinc = dt.Rows[0]["DO_Tiers"].ToString(); return(c); }).ToList(); cmRepos.saveAll(cms, docVEntete.DO_Piece, true); } else { throw new Exception(GetProcessError(procDocV)); } string subject = $"[INTERMAG] Commande Retro {client.CT_Classement} {docVEntete.DO_Piece}"; string body = $@"<p>Le magasin {client.CT_Classement} vous a passé une commande Retro n° <b>{docVEntete.DO_Piece}</b></p> <p>Collaborateur : {dt.Rows[0]["Collaborateur"].ToString()}</p> <p>Merci de vous référer à Sage pour en connaître le contenu.</p>"; sendMail(dt.Rows[0]["DBCLIENT"].ToString(), bsc.DatabaseInfo.DatabaseName, subject, body); EventLog.WriteEntry(log, subject, EventLogEntryType.Information, 100); return($"[OK];{docVEntete.DO_Piece};{bsc.DatabaseInfo.DatabaseName}: Commande client {docVEntete.DO_Piece} créée {Environment.NewLine}{cmLogMessage}"); } catch (Exception e) { EventLog.WriteEntry(log, e.ToString(), EventLogEntryType.Error, 100); throw new Exception(e.Message); } finally { if (bsc != null) { bsc.Close(); } } }