public CartPreorder() { this.InitializeComponent(); Model.Sage.F_DOCENTETERepository F_DOCENTETERepository = new Model.Sage.F_DOCENTETERepository(); // Récupération des documents pour lesquels au moins un des articles possède la valeur saisie en paramètre dans l'information libre sélectionnée List <Model.Sage.DocPreorder> ListPreorder = F_DOCENTETERepository.ListDocumentArticlePrecommande(Core.Global.GetConfig().ModulePreorderInfolibreName, Core.Global.GetConfig().ModulePreorderInfolibreValue, (short)ABSTRACTION_SAGE.F_DOCENTETE.Obj._Enum_DO_Domaine.Vente, (short)ABSTRACTION_SAGE.F_DOCENTETE.Obj._Enum_DO_Type.Bon_Commande_Vente); List <int> ListSage = ListPreorder.Select(d => d.cbMarq).Distinct().ToList(); this.ListCount = ListSage.Count; Context = SynchronizationContext.Current; this.ParallelOptions.MaxDegreeOfParallelism = System.Environment.ProcessorCount; this.ReportProgress(0); Task.Factory.StartNew(() => { Parallel.ForEach(ListSage, this.ParallelOptions, Exec); }); }
public void Exec(int DocumentSend) { this.Semaphore.WaitOne(); try { Model.Sage.F_DOCENTETERepository F_DOCENTETERepository = new Model.Sage.F_DOCENTETERepository(); Model.Sage.F_DOCENTETE F_DOCENTETE = F_DOCENTETERepository.Read(DocumentSend); Model.Local.OrderRepository OrderRepository = new Model.Local.OrderRepository(); int PreID; // Contrôle de la provenance Web de la commande via une synchro Prestaconnect if (int.TryParse(F_DOCENTETE.DO_NoWeb, out PreID) && OrderRepository.ExistPrestashop(PreID)) { Model.Prestashop.PsOrdersRepository PsOrdersRepository = new Model.Prestashop.PsOrdersRepository(); if (PsOrdersRepository.ExistOrder(PreID)) { Model.Prestashop.PsCartPreOrderRepository PsCartPreOrderRepository = new Model.Prestashop.PsCartPreOrderRepository(); if (!PsCartPreOrderRepository.ExistOrder(PreID)) { Model.Prestashop.PsOrders PsOrder = PsOrdersRepository.ReadOrder(PreID); Model.Prestashop.PsCustomerRepository PsCustomerRepository = new Model.Prestashop.PsCustomerRepository(); if (PsCustomerRepository.ExistCustomer(PsOrder.IDCustomer)) { // récupération montant total des lignes decimal?total_document = new Model.Sage.F_DOCLIGNERepository().MontantDomaineTypePieceValorise(F_DOCENTETE.DO_Domaine.Value, F_DOCENTETE.DO_Type.Value, F_DOCENTETE.DO_Piece); // ajout frais de port pied de document decimal total_port = 0; if (F_DOCENTETE.DO_ValFrais != null) { if (F_DOCENTETE.DO_TypeLigneFrais == (short)ABSTRACTION_SAGE.F_DOCENTETE.Obj._Enum_DO_TypeLigne.TTC) { total_port = (decimal)F_DOCENTETE.DO_ValFrais; } else { total_port = (decimal)F_DOCENTETE.DO_ValFrais * (1 + (F_DOCENTETE.DO_Taxe1.Value / 100)); } } // calcul des acomptes et règlements decimal?total_reglements = new Model.Sage.F_DOCREGLRepository().MontantDomaineTypePiece(F_DOCENTETE.DO_Domaine.Value, F_DOCENTETE.DO_Type.Value, F_DOCENTETE.DO_Piece); if (total_document != null && total_reglements != null) { decimal solde = (decimal)((total_document + total_port) - total_reglements); if (solde > 0) { #region création nouveau panier Model.Prestashop.PsCartRepository PsCartRepository = new Model.Prestashop.PsCartRepository(); Model.Prestashop.PsCart PsCart = new Model.Prestashop.PsCart() { DateAdd = DateTime.Now, DateUpd = DateTime.Now, DeliveryOption = string.Empty, Gift = 0, GiftMessage = string.Empty, IDAddressDelivery = PsOrder.IDAddressDelivery, IDAddressInvoice = PsOrder.IDAddressInvoice, IDCarrier = 0, IDCurrency = PsOrder.IDCurrency, IDCustomer = PsOrder.IDCustomer, IDGuest = 0, IDLang = PsOrder.IDLang, IDShop = PsOrder.IDShop, IDShopGroup = PsOrder.IDShopGroup, Recyclable = PsOrder.Recyclable, SecureKey = PsOrder.SecureKey, }; PsCartRepository.Add(PsCart); #endregion #region attribution du solde en tant que prix spécifique pour le produit Model.Prestashop.PsSpecificPriceRepository PsSpecificPriceRepository = new Model.Prestashop.PsSpecificPriceRepository(); Model.Prestashop.PsSpecificPrice PsSpecificPrice = new Model.Prestashop.PsSpecificPrice() { IDProduct = (uint)Core.Global.GetConfig().ModulePreorderPrestashopProduct, FromQuantity = 1, IDCart = PsCart.IDCart, IDCustomer = PsCart.IDCustomer, Price = solde, ReductionType = Model.Prestashop.PsSpecificPrice._ReductionType_Amount, From = new DateTime(), To = new DateTime(), }; PsSpecificPriceRepository.Add(PsSpecificPrice); PsSpecificPriceRepository.SaveReductionTypeFromDateToDate(PsSpecificPrice); #endregion #region attribution de l'article au panier Model.Prestashop.PsCartProductRepository PsCartProductRepository = new Model.Prestashop.PsCartProductRepository(); Model.Prestashop.PsCartProduct PsCartProduct = new Model.Prestashop.PsCartProduct() { DateAdd = DateTime.Now, IDAddressDelivery = PsCart.IDAddressDelivery, IDCart = PsCart.IDCart, IDProduct = (uint)Core.Global.GetConfig().ModulePreorderPrestashopProduct, IDProductAttribute = 0, IDShop = PsCart.IDShop, Quantity = 1, }; PsCartProductRepository.Add(PsCartProduct); #endregion #region ajout de l'identification du panier en tant que solde de précommande Model.Prestashop.PsCartPreOrder PsCartPreorder = new Model.Prestashop.PsCartPreOrder() { IDCart = PsCart.IDCart, IDPreOrder = PsOrder.IDOrder, }; PsCartPreOrderRepository.Add(PsCartPreorder); #endregion // génération URL directe panier PsOrder.Cart_URL = Core.Global.URL_Prestashop + "/commande?step=1&recover_cart=" + PsCart.IDCart + "&token_cart=" + Core.RandomString.HashMD5(Core.Global.GetConfig().TransfertPrestashopCookieKey + "recover_cart_" + PsCart.IDCart.ToString()); Core.Sync.SynchronisationCommande.SendMail(33, PsOrder); } } } } } } } catch (Exception ex) { Core.Error.SendMailError(ex.ToString()); } lock (this) { this.CurrentCount += 1; } this.ReportProgress(this.CurrentCount * 100 / this.ListCount); this.Semaphore.Release(); }
public void Exec(Model.Local.Customer CustomerSend) { this.Semaphore.WaitOne(); int invoice_count_transfert = 0; bool send_mail_notif = false; Model.Prestashop.PsOrders MailDatas = new Model.Prestashop.PsOrders(); try { Model.Prestashop.PsCustomerRepository PsCustomerRepository = new Model.Prestashop.PsCustomerRepository(); uint IDCustomer = (uint)CustomerSend.Pre_Id; if (PsCustomerRepository.ExistCustomer(IDCustomer)) { MailDatas.IDCustomer = IDCustomer; Model.Sage.F_COMPTETRepository F_COMPTETRepository = new Model.Sage.F_COMPTETRepository(); Model.Sage.F_COMPTET F_COMPTET = F_COMPTETRepository.Read(CustomerSend.Sag_Id); if (F_COMPTET != null) { // <JG> 03/08/2017 gestion rafraichissement progression Model.Local.Customer_Progress datas_progress = new Model.Local.Customer_Progress() { CT_Num = F_COMPTET.CT_Num, CT_Intitule = F_COMPTET.CT_Intitule, Comment = string.Empty, }; ReportInfosSynchro(datas_progress, Core.Temp._action_information_synchro.debut); Model.Sage.F_DOCENTETERepository F_DOCENTETERepository = new Model.Sage.F_DOCENTETERepository(); // <JG> 22/01/2016 send_mail_notif = (!string.IsNullOrWhiteSpace(Core.Global.GetConfig().ModuleAECInvoiceHistoryInfoLibreClientSendMail) && F_COMPTETRepository.ExistArticleInformationLibreText(Core.Global.GetConfig().ModuleAECInvoiceHistoryInfoLibreClientSendMail, F_COMPTET.CT_Num) && F_COMPTETRepository.ReadArticleInformationLibreText(Core.Global.GetConfig().ModuleAECInvoiceHistoryInfoLibreClientSendMail, F_COMPTET.CT_Num) == Core.Global.GetConfig().ModuleAECInvoiceHistoryInfoLibreClientSendMailValue); Model.Prestashop.PsAECInvoiceHistoryRepository PsAECInvoiceHistoryRepository = new Model.Prestashop.PsAECInvoiceHistoryRepository(); // <JG> 04/03/2015 ajout gestion envoi des bons de commandes Sage dans PrestaShop string order_path = System.IO.Path.Combine(Core.Global.GetConfig().Folders.RootReport, "AEC_Order.rpt"); if (System.IO.File.Exists(order_path)) { uint TypeDocOrder = (uint)ABSTRACTION_SAGE.F_DOCENTETE.Obj._Enum_DO_Type.Bon_Commande_Vente; datas_progress.Comment = GetComment(TypeDocOrder); ReportInfosSynchro(datas_progress, Core.Temp._action_information_synchro.refresh); ClearData(PsAECInvoiceHistoryRepository, IDCustomer, TypeDocOrder); if (!_ClearMode) { datas_progress.Comment = GetComment(TypeDocOrder); ReportInfosSynchro(datas_progress, Core.Temp._action_information_synchro.refresh); List <Model.Sage.Piece> ListBC = F_DOCENTETERepository.ListPieceTiers(F_COMPTET.CT_Num, ABSTRACTION_SAGE.F_DOCENTETE.Obj._Enum_DO_Domaine.Vente, ABSTRACTION_SAGE.F_DOCENTETE.Obj._Enum_DO_Type.Bon_Commande_Vente, this._PeriodeDebut, this._PeriodeFin); foreach (Model.Sage.Piece Piece in ListBC) { TransfertPiece(order_path, PsAECInvoiceHistoryRepository, Piece, IDCustomer, TypeDocOrder, F_COMPTET.CT_Num); datas_progress.Comment = Piece.DO_Piece + " " + ListBC.IndexOf(Piece) + "/" + ListBC.Count; ReportInfosSynchro(datas_progress, Core.Temp._action_information_synchro.refresh); } } } string invoice_path = System.IO.Path.Combine(Core.Global.GetConfig().Folders.RootReport, "AEC_Invoice.rpt"); if (System.IO.File.Exists(invoice_path)) { uint TypeDocInvoice = (uint)ABSTRACTION_SAGE.F_DOCENTETE.Obj._Enum_DO_Type.Facture_Comptabilisee_Vente; if (!_ClearMode) { datas_progress.Comment = GetComment(TypeDocInvoice); ReportInfosSynchro(datas_progress, Core.Temp._action_information_synchro.refresh); List <Model.Sage.Piece> ListFacturesCompta = F_DOCENTETERepository.ListPieceTiers(F_COMPTET.CT_Num, ABSTRACTION_SAGE.F_DOCENTETE.Obj._Enum_DO_Domaine.Vente, ABSTRACTION_SAGE.F_DOCENTETE.Obj._Enum_DO_Type.Facture_Comptabilisee_Vente, this._PeriodeDebut, this._PeriodeFin); List <Model.Prestashop.PsAEcInvoiceHistory_Light> ListTransfert = PsAECInvoiceHistoryRepository.ListLight(IDCustomer, TypeDocInvoice); ListFacturesCompta = ListFacturesCompta.Where(d => ListTransfert.Count(i => i.invoice_number == d.DO_Piece) == 0).ToList(); foreach (Model.Sage.Piece Piece in ListFacturesCompta) { if (TransfertPiece(invoice_path, PsAECInvoiceHistoryRepository, Piece, IDCustomer, TypeDocInvoice, F_COMPTET.CT_Num)) { invoice_count_transfert++; if (string.IsNullOrEmpty(MailDatas.Mail_Invoice_numbers)) { MailDatas.Mail_Invoice_numbers = Piece.DO_Piece; } else { MailDatas.Mail_Invoice_numbers += ", " + Piece.DO_Piece; } } datas_progress.Comment = Piece.DO_Piece + " " + ListFacturesCompta.IndexOf(Piece) + "/" + ListFacturesCompta.Count; ReportInfosSynchro(datas_progress, Core.Temp._action_information_synchro.refresh); } } else { datas_progress.Comment = GetComment(TypeDocInvoice); ReportInfosSynchro(datas_progress, Core.Temp._action_information_synchro.refresh); ClearData(PsAECInvoiceHistoryRepository, IDCustomer, TypeDocInvoice); } } ReportInfosSynchro(datas_progress, Core.Temp._action_information_synchro.fin); } } } catch (Exception ex) { Core.Error.SendMailError(ex.ToString()); } // <JG> 22/01/2016 ajout mail notification try { if (send_mail_notif && invoice_count_transfert > 0) { Core.Sync.SynchronisationCommande.SendMail(40, MailDatas); } } catch (Exception ex) { Core.Error.SendMailError(ex.ToString()); } lock (this) { this.CurrentCount += 1; } this.ReportProgress(this.CurrentCount * 100 / this.ListCount); this.Semaphore.Release(); }
public SynchronisationPaiement() { this.InitializeComponent(); this.LabelInformation.Content = "Recherche des paiements à copier ..."; this.worker.WorkerReportsProgress = true; this.worker.DoWork += delegate(object s, DoWorkEventArgs args) { if (Core.Global.GetConfig().SyncReglementActif) { this.worker.ReportProgress(-42); Connexion = Core.Global.GetODBC(); if (Connexion != null) { Model.Prestashop.PsOrdersRepository PsOrdersRepository = new Model.Prestashop.PsOrdersRepository(); Model.Prestashop.PsOrderPaymentRepository PsOrderPaymentRepository = new Model.Prestashop.PsOrderPaymentRepository(); Model.Local.OrderRepository OrderRepository = new Model.Local.OrderRepository(); Model.Local.OrderPaymentRepository OrderPaymentRepository = new Model.Local.OrderPaymentRepository(); Model.Sage.F_DOCENTETERepository F_DOCENTETERepository = new Model.Sage.F_DOCENTETERepository(); List <Model.Prestashop.order_payment> list_order = PsOrdersRepository.ListIDPayment(Core.Global.CurrentShop.IDShop); foreach (Model.Prestashop.order_payment order in list_order) { try { // comparaison nombre de paiements PrestaShop avec ceux déjà transférés if (OrderRepository.ExistPrestashop((int)order.id_order) && F_DOCENTETERepository.ExistWeb(order.id_order.ToString()) && PsOrderPaymentRepository.CountOrderReference(order.reference) > OrderPaymentRepository.CountOrder((int)order.id_order)) // pour ne pas prendre en compte les articles non suivi en stock { // récupération du dernier document Sage Model.Sage.F_DOCENTETE F_DOCENTETE = F_DOCENTETERepository.ListWeb(order.id_order.ToString()).FirstOrDefault(); ABSTRACTION_SAGE.F_DOCENTETE.Obj ObjF_DOCENTETE = new ABSTRACTION_SAGE.F_DOCENTETE.Obj() { DO_Domaine = (ABSTRACTION_SAGE.F_DOCENTETE.Obj._Enum_DO_Domaine)F_DOCENTETE.DO_Domaine, DO_Type = (ABSTRACTION_SAGE.F_DOCENTETE.Obj._Enum_DO_Type)F_DOCENTETE.DO_Type, DO_Piece = F_DOCENTETE.DO_Piece }; ObjF_DOCENTETE.ReadDO_Domaine_DO_Type_DO_Piece(Connexion, false); if (ObjF_DOCENTETE != null) { Model.Prestashop.PsOrders PsOrders = PsOrdersRepository.ReadOrder((int)order.id_order); Core.Sync.SynchronisationCommande form = new Core.Sync.SynchronisationCommande(); bool exist_payment; form.ExecReglement(PsOrders, Connexion, ObjF_DOCENTETE, out exist_payment); } } } catch (Exception ex) { Core.Error.SendMailError("[SYNCHRONISATION REGLEMENTS]" + ex.ToString()); } lock (this) { this.CurrentCount += 1; } this.worker.ReportProgress((this.CurrentCount * 100 / list_order.Count)); } } } }; this.worker.ProgressChanged += delegate(object s, ProgressChangedEventArgs args) { if (args.ProgressPercentage >= 0) { this.ProgressBar.Value = args.ProgressPercentage; this.LabelInformation.Content = "Informations : " + args.ProgressPercentage + " %"; } else if (args.ProgressPercentage == -42) { this.LabelInformation.Content = "Ouverture connexion ODBC Sage..."; } }; this.worker.RunWorkerCompleted += delegate(object s, RunWorkerCompletedEventArgs args) { if (Connexion != null) { Connexion.Close_Connexion(); } this.Close(); }; // Insérez le code requis pour la création d’objet sous ce point. this.worker.RunWorkerAsync(); }