Facebook
From fifa, 1 Month ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 136
  1. using BapPress.BapService.ServiceMessages;
  2. using BapFramework.Data.Generic;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Data;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Security.Permissions;
  9. using System.Web.Services.Protocols;
  10. using System.Web.Services.Configuration;
  11. using System.Reflection;
  12. using System.IO;
  13. using System.Net;
  14.  
  15. namespace BapPress.BapService.Services.SPL
  16. {
  17.     [GroupItem("Książki nadawcze", "Wysyłanie książki nadawczej Poczty Polskiej")]
  18.     class Post //: GroupElement\
  19.     {
  20.         private ConnectionBase conn;
  21.         private string PostPassword_1;
  22.         private string PostPassword_8;
  23.         private string PostPassword_11;
  24.         private string PostPassword_13;
  25.         private int STAGE;
  26.  
  27.         public Post(ConnectionBase conn)
  28.         //: base(conn)
  29.         {
  30.             this.conn = conn;
  31.  
  32.             STAGE = int.Parse(conn.GetScalar<string>(string.Format("SELECT DBA.ConfigRead('{0}','STAGE');", this.GetType().ToString())));
  33.  
  34.             ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
  35.         }
  36.  
  37.         public event Action<MessageType, string, string, bool> Message;
  38.  
  39.         private void SendMessage(MessageType type, string message, bool log)
  40.         {
  41.             Message?.Invoke(type, "Post", message, log);
  42.         }
  43.  
  44.         public bool Execute()
  45.         {
  46.             bool ret = true;
  47.  
  48.             string sql = "select ID,CompanyID from DBA.IC_SendBooks with(nolock) WHERE EndDate > '2012-08-01' and ExportID is null and icsendkindid in (100,101,103)";
  49.             //SMYKOUT
  50.             if (STAGE > 3)
  51.                 sql += " AND CompanyID <> 8";
  52.             sql += ";";
  53.  
  54.             DataTable dt = conn.GetTable(sql);
  55.  
  56.             PostPassword_1 = null;
  57.             PostPassword_8 = null;
  58.             PostPassword_11 = null;
  59.             PostPassword_13 = null;
  60.  
  61.             if (Properties.Settings.Default.Post_LogMessages.Value == "T")
  62.                 RegisterSoapExtension(typeof(TraceExtension), 1, PriorityGroup.Low);
  63.  
  64.             try
  65.             {
  66.                 if (dt.Rows.Count > 0)
  67.                 {
  68.                     System.Net.ServicePointManager.ServerCertificateValidationCallback = ((sender, certificate, chain, sslPolicyErrors) => true);
  69.                     foreach (int CompanyID in dt.Rows.Cast<DataRow>().Select(r => (int)r["CompanyID"]).Distinct())
  70.                     {
  71.                         switch (CompanyID)
  72.                         {
  73.                             case 1:
  74.                                 PostPassword_1 = CheckLogin(CompanyID);
  75.                                 break;
  76.                             case 8:
  77.                                 PostPassword_8 = CheckLogin(CompanyID);
  78.                                 break;
  79.                             case 11:
  80.                                 PostPassword_11 = CheckLogin(CompanyID);
  81.                                 break;
  82.                             case 13:
  83.                                 PostPassword_13 = CheckLogin(CompanyID);
  84.                                 break;
  85.                         }
  86.                     }
  87.                 }
  88.             }
  89.             catch (Exception ex)
  90.             {
  91.                 SendMessage(MessageType.Error, ex.Message, false);
  92.                 return false;
  93.             }
  94.  
  95.             foreach (DataRow row in dt.Rows)
  96.             {
  97.                 //wołaj webservice
  98.                 int id = (int)row["ID"];
  99.                 SendMessage(MessageType.Info, "Wysyłanie manifestu pocztowego ID = " + id.ToString(), false);
  100.                 string ans = SendPostDocs(id);
  101.                 SendMessage(MessageType.Info, ans, false);
  102.  
  103.                 if (Properties.Settings.Default.Post_LogMessages.Value == "T")
  104.                 {
  105.                     FileInfo fi = new FileInfo(Properties.Settings.Default.ManifestoSender_FilePath + "PostManifestoLog.log");
  106.                     if (fi.Exists)
  107.                         fi.MoveTo(Properties.Settings.Default.ManifestoSender_FilePath + $"PostManifestoLog - {id}.log");
  108.                 }
  109.             }
  110.             dt.Dispose();
  111.  
  112.             return ret;
  113.         }
  114.  
  115.         private string SendPostDocs(int SendBookID)
  116.         {
  117.             string response = "";
  118.             int export = -1;
  119.  
  120.             SendMessage(MessageType.Info, "Eksport książki nadawczej ID = " + SendBookID.ToString(), true);
  121.             try
  122.             {
  123.                 DataTable packets;// = new DataTable();
  124.  
  125.                 try
  126.                 {
  127.                     packets = conn.GetTable("CALL DBA.SPL_GetPostData(" + SendBookID.ToString() + ")");
  128.  
  129.                     response = SendPostManifesto(packets, out export);
  130.  
  131.                     if (export > 0)
  132.                     {
  133.                         //update IC_SendBook
  134.                         //conn.Execute("UPDATE DBA.IC_SendBooks SET ExportID = " + export.ToString() + ",ExportDate = now() WHERE ID = " + SendBookID.ToString() + ";");
  135.                         conn.Execute(string.Format("CALL DBA.IC_SetSendBookExport({0}, '{1}');", SendBookID, export));
  136.                         SendMessage(MessageType.Info, "Koniec eksportu EnvelopeID = " + export.ToString(), true);
  137.                     }
  138.                     else
  139.                         SendMessage(MessageType.Warning, "Koniec eksportu Error: " + response, true);
  140.                 }
  141.                 catch (Exception ex)
  142.                 {
  143.                     response = "Exception trying to make database connection\n";
  144.                     response += ex.Message;
  145.                     SendMessage(MessageType.Error, ex.Message, true);
  146.                 }
  147.             }
  148.             catch (Exception e)
  149.             {
  150.                 response = "Exception\n";
  151.                 response += e.Message;
  152.                 SendMessage(MessageType.Error, e.Message, true);
  153.             }
  154.  
  155.             return response;
  156.         }
  157.  
  158.         private string SendPostManifesto(DataTable packets, out int exportID)
  159.         {
  160.             string response = "";
  161.             exportID = -1;
  162.             //string passwd = CheckLogin();
  163.             int STAGE = int.Parse(Properties.Settings.Default.STAGE.Value);
  164.  
  165.             System.Net.NetworkCredential c = new System.Net.NetworkCredential();
  166.             //SMYKOUT
  167.             if (STAGE == 2)
  168.             {
  169.                 switch ((int)packets.Rows[0]["CompanyID"])
  170.                 {
  171.                     case 1:
  172.                         c.UserName = Properties.Settings.Default.Post_userId_1.Value;
  173.                         c.Password = PostPassword_1;
  174.                         break;
  175.                     case 8:
  176.                         c.UserName = Properties.Settings.Default.Post_userId_8.Value;
  177.                         c.Password = PostPassword_8;
  178.                         break;
  179.                 }
  180.             }
  181.             else if (STAGE > 2 && (int)packets.Rows[0]["CompanyID"] == 8)
  182.             {
  183.                 return "Nie wysyłamy manifestów smykowych!";
  184.             }
  185.             else
  186.             {
  187.                 switch ((int)packets.Rows[0]["CompanyID"])
  188.                 {
  189.                     case 1:
  190.                         c.UserName = Properties.Settings.Default.Post_userId_1.Value;
  191.                         c.Password = PostPassword_1;
  192.                         break;
  193.                     case 11:
  194.                         c.UserName = Properties.Settings.Default.Post_userId_11.Value;
  195.                         c.Password = PostPassword_11;
  196.                         break;
  197.                     case 13:
  198.                         c.UserName = Properties.Settings.Default.Post_userId_13.Value;
  199.                         c.Password = PostPassword_13;
  200.                         break;
  201.                 }
  202.             }
  203.  
  204.             System.Net.CredentialCache cc = new System.Net.CredentialCache();
  205.             cc.Add(new Uri(Properties.Settings.Default.Post_url.Value), "Basic", c);
  206.  
  207.             Poczta.ElektronicznyNadawca nadawca = new Poczta.ElektronicznyNadawca();
  208.             nadawca.Credentials = cc;
  209.             nadawca.Url = Properties.Settings.Default.Post_url.Value.Replace("en.wsdl", "en.php");
  210.             nadawca.Timeout = int.Parse(Properties.Settings.Default.Post_Timeout.Value);
  211.  
  212.             Poczta.errorType[] errors;
  213.             bool retval;//, retvalSpecified;
  214.  
  215.             //string test = nadawca.hello("test");
  216.  
  217.             //SMYKOUT - Stage 1
  218.             if (STAGE == 1)
  219.             {
  220.                 switch ((int)packets.Rows[0]["CompanyID"])
  221.                 {
  222.                     case 1:
  223.                         errors = nadawca.setAktywnaKarta(264298);
  224.                         break;
  225.                     case 8:
  226.                         errors = nadawca.setAktywnaKarta(451948);
  227.                         break;
  228.                 }
  229.             }
  230.             else if (STAGE == 2)
  231.             {
  232.                 switch ((int)packets.Rows[0]["CompanyID"])
  233.                 {
  234.                     case 1:
  235.                         errors = nadawca.setAktywnaKarta(461223);
  236.                         break;
  237.                     case 8:
  238.                         errors = nadawca.setAktywnaKarta(466756);
  239.                         break;
  240.                 }
  241.             }
  242.             /*Poczta.kartaType[] karty = nadawca.getKarty();
  243.             foreach (Poczta.kartaType k in karty)
  244.                 SendMessage(MessageType.Info, string.Format("Karta ID:{0}, state:{1}", k.idKarta, k.aktywna), false);*/
  245.  
  246.             retval = nadawca.clearEnvelope(0, false, out errors);
  247.  
  248.             if (!retval) //(errors != null)
  249.                 return "Nie udało się zainicjalizować.";
  250.  
  251.             List<Poczta.przesylkaType> przesylki = new List<Poczta.przesylkaType>();
  252.             Poczta.addShipmentResponseItemType[] ShipResp = null;
  253.  
  254.             StringBuilder errorlog = new StringBuilder();
  255.  
  256.             foreach (DataRow row in packets.Rows)
  257.             {
  258.                 Poczta.adresType adres = new Poczta.adresType();
  259.                 adres.nazwa = row["RecName"].ToString();
  260.                 //adres.nazwa2 = row["Rec"].ToString();                
  261.                 adres.ulica = row["RecStreet"].ToString();
  262.                 adres.numerDomu = row["RecStreetNumber"].ToString();
  263.                 adres.numerLokalu = row["RecFlatNumber"].ToString();
  264.                 adres.miejscowosc = row["RecTown"].ToString();
  265.                 adres.kodPocztowy = row["RecZIP"].ToString();
  266.                 adres.kraj = row["RecCountry"].ToString();
  267.                 //adres.telefon = row["RecPhoneNumber"].ToString();
  268.                 adres.mobile = row["RecPhoneNumber"].ToString();
  269.                 adres.email = row["RecEmail"].ToString();                
  270.                 if ((int)row["ICSendKindID"] == 105 || (int)row["ICSendKindID"] == 106)
  271.                     adres.mobile = row["RecPhoneNumber"].ToString();
  272.                
  273.                 //adres.nip
  274.                 //adres.osobaKontaktowa
  275.  
  276.                 Poczta.pobranieType pobranie;
  277.                 if ((decimal)row["Kwota"] > 0)
  278.                 {
  279.                     pobranie = new Poczta.pobranieType();
  280.                     pobranie.sposobPobrania = Poczta.sposobPobraniaType.RACHUNEK_BANKOWY;
  281.                     pobranie.sposobPobraniaSpecified = true;
  282.                     pobranie.kwotaPobrania = (int)((decimal)row["Kwota"] * 100);
  283.                     pobranie.kwotaPobraniaSpecified = true;
  284.                     pobranie.nrb = row["AccountNumber"].ToString();
  285.                     pobranie.tytulem = row["WayBill"].ToString();
  286.                     pobranie.sprawdzenieZawartosciPrzesylkiPrzezOdbiorce = false;
  287.                     pobranie.sprawdzenieZawartosciPrzesylkiPrzezOdbiorceSpecified = false;
  288.                 }
  289.                 else
  290.                     pobranie = null;
  291.  
  292.                 switch ((int)row["ICSendKindID"])
  293.                 {
  294.                     case 100:
  295.                         //Poczta - kraj bez pobrania
  296.                         Poczta.paczkaPocztowaType paczka = new Poczta.paczkaPocztowaType();
  297.                         paczka.guid = Guid.NewGuid().ToString();//row["PacketID"].ToString();
  298.                         paczka.opakowanieGuid = null;
  299.                         paczka.opis = null;
  300.                         paczka.pakietGuid = null;
  301.  
  302.                         paczka.numerNadania = row["WayBill"].ToString();
  303.                         paczka.adres = adres;
  304.  
  305.                         paczka.posteRestante = false;
  306.                         paczka.iloscPotwierdzenOdbioru = 0;
  307.                         paczka.kategoria = Poczta.kategoriaType.PRIORYTETOWA;
  308.                         paczka.gabaryt = Poczta.gabarytType.GABARYT_A;
  309.                         paczka.wartosc = 0;
  310.                         paczka.wartoscSpecified = (paczka.wartosc != 0);
  311.                         paczka.masa = (int)(((decimal)row["Weight"]) * 1000);
  312.                         paczka.masaSpecified = true;
  313.                         paczka.zwrotDoslanie = false;
  314.                         paczka.zwrotDoslanieSpecified = false;
  315.                         paczka.egzemplarzBiblioteczny = false;
  316.                         paczka.dlaOciemnialych = false;
  317.  
  318.                         przesylki.Add(paczka);
  319.                         break;
  320.                     case 101:
  321.                         //Poczta - kraj pobranie
  322.                         Poczta.przesylkaPobraniowaType paczka1 = new Poczta.przesylkaPobraniowaType();
  323.                         paczka1.guid = Guid.NewGuid().ToString();//row["PacketID"].ToString();
  324.                         paczka1.opakowanieGuid = null;
  325.                         paczka1.opis = null;
  326.                         paczka1.pakietGuid = null;
  327.  
  328.                         paczka1.numerNadania = row["WayBill"].ToString();
  329.                         paczka1.adres = adres;
  330.                         paczka1.pobranie = pobranie;
  331.  
  332.                         paczka1.posteRestante = false;
  333.                         paczka1.iloscPotwierdzenOdbioru = 0;
  334.                         paczka1.kategoria = Poczta.kategoriaType.PRIORYTETOWA;
  335.                         paczka1.gabaryt = Poczta.gabarytType.GABARYT_A;
  336.                         paczka1.ostroznie = false;
  337.                         paczka1.wartosc = 0;
  338.                         paczka1.masa = (int)(((decimal)row["Weight"]) * 1000);
  339.  
  340.                         przesylki.Add(paczka1);
  341.                         break;
  342.                     case 102:
  343.                         //Poczta zagranica
  344.                         Poczta.przesylkaPoleconaZagranicznaType paczka2 = new Poczta.przesylkaPoleconaZagranicznaType();
  345.                         paczka2.guid = Guid.NewGuid().ToString();//row["PacketID"].ToString();
  346.                         paczka2.opakowanieGuid = null;
  347.                         paczka2.opis = null;
  348.                         paczka2.pakietGuid = null;
  349.  
  350.                         paczka2.numerNadania = row["WayBill"].ToString();
  351.                         paczka2.adres = adres;
  352.  
  353.                         paczka2.posteRestante = false;
  354.                         paczka2.iloscPotwierdzenOdbioru = 0;
  355.                         paczka2.iloscPotwierdzenOdbioruSpecified = true;
  356.                         //paczka2.kategoria = Poczta.kategoriaType.PRIORYTETOWA;
  357.                         //paczka2.kategoriaSpecified = true;
  358.                         paczka2.masa = (int)(((decimal)row["Weight"]) * 1000);
  359.                         paczka2.masaSpecified = true;
  360.                         //paczka2.ekspres = false;
  361.                         //paczka2.ekspresSpecified = true;
  362.  
  363.                         przesylki.Add(paczka2);
  364.                         break;
  365.                     case 103:
  366.                     case 105:
  367.                     case 106:
  368.                     case 108:
  369.                         Poczta.przesylkaBiznesowaType paczka3 = new Poczta.przesylkaBiznesowaType();
  370.                         paczka3.guid = Guid.NewGuid().ToString();
  371.                         paczka3.opakowanieGuid = null;
  372.                         paczka3.opis = null;
  373.                         paczka3.pakietGuid = null;
  374.  
  375.                         paczka3.numerNadania = row["WayBill"].ToString();
  376.                         paczka3.adres = adres;
  377.                         paczka3.pobranie = pobranie;
  378.  
  379.                         paczka3.gabaryt = (Poczta.gabarytBiznesowaType)Enum.Parse(typeof(Poczta.gabarytBiznesowaType), row["Gabaryt"].ToString());
  380.                         paczka3.gabarytSpecified = true;
  381.                         paczka3.Items = null;
  382.                         paczka3.masa = (int)(((decimal)row["Weight"]) * 1000);
  383.                         paczka3.masaSpecified = true;
  384.                         paczka3.ostroznie = false;
  385.                         paczka3.ostroznieSpecified = false;
  386.                         paczka3.wartosc = 0;
  387.                         paczka3.wartoscSpecified = false;
  388.  
  389.                         //paczka3.epo
  390.                         //paczka3.ubezpieczenie
  391.                         //paczka3.zasadySpecjalne
  392.                         //paczka3.zasadySpecjalneSpecified
  393.                         //paczka3.terminSprawy
  394.                         //paczka3.sygnatura
  395.                         //paczka3.rodzaj
  396.                         //paczka3.opis
  397.                         //paczka3.numerTransakcjiOdbioru
  398.                         //paczka3.nadawca    
  399.  
  400.                         if (!row.IsNull("PickupPoint"))
  401.                         {
  402.                             if (!row.IsNull("WayBill2"))
  403.                                 paczka3.numerTransakcjiOdbioru = row["WayBill2"].ToString();
  404.                             paczka3.Items = new object[] { new Poczta.urzadWydaniaEPrzesylkiType() { id = (int)row["PickupPoint"] } };
  405.                         }
  406.                         przesylki.Add(paczka3);
  407.                         break;
  408.                 }
  409.  
  410.                 if (przesylki.Count >= 500)
  411.                 {
  412.                     ShipResp = nadawca.addShipment(przesylki.ToArray(), 0, false);
  413.                     PostLogSendPackets(ShipResp);
  414.  
  415.                     foreach (Poczta.addShipmentResponseItemType resp in ShipResp.Where(r => r.error?.Length > 0))
  416.                     {
  417.                         string guid = (new Guid(resp.guid)).ToString();
  418.                         Poczta.przesylkaRejestrowanaType przesylka = przesylki.FirstOrDefault(p => p.guid == guid) as Poczta.przesylkaRejestrowanaType;
  419.                         if (przesylka != null)
  420.                         {
  421.                             string msg = string.Join("\n", resp.error.Select(e => $"{e.errorNumber}: {e.errorDesc}"));
  422.                             errorlog.Append($"{przesylka.numerNadania}\n{msg}\n\n");
  423.                         }
  424.  
  425.                     }
  426.                     przesylki.Clear();
  427.                 }
  428.             }
  429.  
  430.             if (przesylki.Count > 0)
  431.             {
  432.                 ShipResp = nadawca.addShipment(przesylki.ToArray(), 0, false);
  433.                 PostLogSendPackets(ShipResp);
  434.                 foreach (Poczta.addShipmentResponseItemType resp in ShipResp.Where(r => r.error?.Length > 0))
  435.                 {
  436.                     string guid = (new Guid(resp.guid)).ToString();
  437.                     Poczta.przesylkaRejestrowanaType przesylka = przesylki.FirstOrDefault(p => p.guid == guid) as Poczta.przesylkaRejestrowanaType;
  438.                     if (przesylka != null)
  439.                     {
  440.                         string msg = string.Join("\n", resp.error.Select(e => $"{e.errorNumber}: {e.errorDesc}"));
  441.                         errorlog.Append($"{przesylka.numerNadania}\n{msg}\n\n");
  442.                     }
  443.                 }
  444.             }
  445.  
  446.             if (errorlog.Length != 0)
  447.             {
  448.                 //wyślij raport z błędami
  449.                 errorlog.Insert(0, "\nBłędy w eksporcie paczek do Poczty Polskiej:\n\n");
  450.                 conn.Execute(string.Format("CALL DBA.APP_Sender_SetEmailActions('PostError-{0:yyyyMMdd_HH}','{1}','{2}','','','Post Manifesto Errors','',0,30,1,'EmpikMail');", DateTime.Now, errorlog, Properties.Settings.Default.ManifestoErrorsEmail.Value));
  451.             }
  452.  
  453.             Poczta.urzadNadaniaFullType[] uNadania = nadawca.getUrzedyNadania();
  454.             Poczta.urzadNadaniaFullType urzad = uNadania.FirstOrDefault(u => u.urzadNadaniaSpecified && u.urzadNadania == (int)packets.Rows[0]["PostOffice"]);
  455.  
  456.             if (urzad != null)
  457.             {
  458.                 int idEnvelope;
  459.                 bool idEnvelopeSpec;
  460.                 Poczta.envelopeStatusType envelopeStatus;
  461.                 bool envelopeStatusSpec;
  462.                 string envelopeFilename;
  463.  
  464.                 Poczta.pakietType[] pakiety = new Poczta.pakietType[0];
  465.  
  466.                 Poczta.profilType profil = null;
  467.  
  468.                 nadawca.sendEnvelope(uNadania[0].urzadNadania, true, pakiety, 0, false, profil, out idEnvelope, out idEnvelopeSpec, out envelopeStatus, out envelopeStatusSpec, out errors, out envelopeFilename);
  469.  
  470.                 if (errors != null && errors.Length > 0)
  471.                 {
  472.                     StringBuilder sb = new StringBuilder();
  473.                     foreach (Poczta.errorType err in errors)
  474.                     {
  475.                         sb.Append(err.errorNumber);
  476.                         sb.Append(" - ");
  477.                         sb.AppendLine(err.errorDesc);
  478.                     }
  479.                     response = sb.ToString();
  480.                 }
  481.  
  482.                 if (envelopeStatusSpec)
  483.                     response += "\n" + envelopeStatus.ToString();
  484.  
  485.                 if (idEnvelopeSpec)
  486.                 {
  487.                     exportID = idEnvelope;
  488.                     if (string.IsNullOrEmpty(response))
  489.                         response = string.Format("Książka nadawcza '{0}' wysłana.", envelopeFilename);
  490.                 }
  491.             }
  492.             else
  493.             {
  494.                 response = "Nie znaleziono urzędu: " + packets.Rows[0]["PostOffice"].ToString();
  495.             }
  496.  
  497.             nadawca.Dispose();
  498.  
  499.             return response;
  500.         }
  501.  
  502.         private string CheckLogin(int CompanyID)
  503.         {
  504.             string passwd = null;
  505.             string newpasswd = null;
  506.  
  507.             try
  508.             {
  509.                 object obj = conn.GetScalar(string.Format("Select DBA.ConfigRead('Global','PostPassword_{0}');", CompanyID));
  510.                 if (obj != DBNull.Value)
  511.                     passwd = (string)obj;
  512.             }
  513.             catch (Exception ex)
  514.             {
  515.                 passwd = null;
  516.                 SendMessage(MessageType.Error, ex.Message, true);
  517.             }
  518.  
  519.             if (passwd != null)
  520.             {
  521.                 Poczta.ElektronicznyNadawca nadawca = new Poczta.ElektronicznyNadawca();
  522.                 System.Net.NetworkCredential c = new System.Net.NetworkCredential();
  523.  
  524.                 //SMYKOUT
  525.                 switch (CompanyID)
  526.                 {
  527.                     case 1:
  528.                         c.UserName = Properties.Settings.Default.Post_userId_1.Value;
  529.                         break;
  530.                     case 8:
  531.                         c.UserName = Properties.Settings.Default.Post_userId_8.Value;
  532.                         break;
  533.                     case 11:
  534.                         c.UserName = Properties.Settings.Default.Post_userId_11.Value;
  535.                         break;
  536.                     case 13:
  537.                         c.UserName = Properties.Settings.Default.Post_userId_13.Value;
  538.                         break;
  539.                 }
  540.                 c.Password = passwd;
  541.                 //c.UserName = Properties.Settings.Default.Post_userId_1.Value;
  542.                 //c.Password = passwd;
  543.                 System.Net.CredentialCache cc = new System.Net.CredentialCache();
  544.                 cc.Add(new Uri(Properties.Settings.Default.Post_url.Value), "Basic", c);
  545.                 nadawca.Credentials = cc;
  546.                 nadawca.Url = Properties.Settings.Default.Post_url.Value.Replace("en.wsdl", "en.php");
  547.  
  548.                 DateTime date = nadawca.getPasswordExpiredDate();
  549.                 if (date < DateTime.Today.AddDays(5))
  550.                 {
  551.                     SendMessage(MessageType.Info, $"Hasło traci ważność w dniu {date.ToString("yyyy-MM-dd")}. Zmieniamy na nowe.", true);
  552.                     try
  553.                     {
  554.                         newpasswd = (string)conn.GetScalar(string.Format("CALL DBA.SPL_GetNewPostPassword({0});", CompanyID));
  555.                     }
  556.                     catch (Exception ex)
  557.                     {
  558.                         passwd = null;
  559.                         SendMessage(MessageType.Error, ex.Message, true);
  560.                     }
  561.                     SendMessage(MessageType.Info, $"Nowe hasło '{newpasswd}'", true);
  562.                     Poczta.errorType[] errors = null;
  563.                     if (newpasswd != null)
  564.                         errors = nadawca.changePassword(newpasswd);
  565.  
  566.                     if (errors != null && errors.Length > 0)
  567.                     {
  568.                         string err = "";
  569.                         foreach (Poczta.errorType e in errors)
  570.                             err += "(" + e.errorNumber + ") - " + e.errorDesc + "\n";
  571.                         SendMessage(MessageType.Error, err, true);
  572.                         throw new Exception(err);
  573.                     }
  574.  
  575.                     passwd = newpasswd;
  576.                 }
  577.  
  578.                 nadawca.Dispose();
  579.             }
  580.  
  581.             return passwd;
  582.         }
  583.  
  584.         private void PostLogSendPackets(Poczta.addShipmentResponseItemType[] ShipResp)
  585.         {
  586.             for (int i = 0; i < ShipResp.Length; i++)
  587.             {
  588.                 StringBuilder err = new StringBuilder();
  589.                 if (ShipResp[i].error != null)
  590.                 {
  591.                     foreach (Poczta.errorType e in ShipResp[i].error)
  592.                         err.AppendFormat("({0}) - {1}; ", e.errorNumber, e.errorDesc);
  593.                     SendMessage(MessageType.Warning, $"{ShipResp[i].guid} - {ShipResp[i].numerNadania} err: {err}", false);
  594.                 }
  595.  
  596.                 SendMessage(MessageType.Warning, $"{ShipResp[i].guid} - {ShipResp[i].numerNadania} err: {err}", true);
  597.             }
  598.         }
  599.  
  600.         //public string[] GetPostOffice()
  601.         //{
  602.         //    string passwd = null;
  603.         //    try
  604.         //    {
  605.         //        object obj = conn.GetScalar("Select DBA.ConfigRead('Global','PostPassword');");
  606.         //        if (obj != DBNull.Value)
  607.         //            passwd = (string)obj;
  608.         //    }
  609.         //    catch (Exception ex)
  610.         //    {
  611.         //        passwd = null;
  612.         //        SendMessage(MessageType.Error, ex.Message, true);
  613.         //    }
  614.  
  615.         //    List<string> sl = new List<string>();
  616.  
  617.         //    if (passwd != null)
  618.         //    {
  619.         //        Poczta.ElektronicznyNadawca nadawca = new Poczta.ElektronicznyNadawca();
  620.         //        System.Net.NetworkCredential c = new System.Net.NetworkCredential();
  621.         //        c.UserName = Properties.Settings.Default.Post_userId.Value;
  622.         //        c.Password = passwd;
  623.         //        System.Net.CredentialCache cc = new System.Net.CredentialCache();
  624.         //        cc.Add(new Uri(Properties.Settings.Default.Post_url.Value), "Basic", c);
  625.         //        nadawca.Credentials = cc;
  626.  
  627.         //        try
  628.         //        {
  629.         //            Poczta.urzadNadaniaFullType[] uNadania = nadawca.getUrzedyNadania();
  630.  
  631.         //            foreach (Poczta.urzadNadaniaFullType un in uNadania)
  632.         //                sl.Add(string.Format("{0};{1};{2}", un.urzadNadania, un.nazwaWydruk, un.opis));
  633.         //        }
  634.         //        catch (Exception ex)
  635.         //        {
  636.         //            return new string[] { ex.Message };
  637.         //        }
  638.         //        finally
  639.         //        {
  640.         //            nadawca.Dispose();
  641.         //        }
  642.         //    }
  643.  
  644.         //    return sl.ToArray();
  645.         //}
  646.  
  647.         /// <summary>  
  648.         /// Programatically registers a <see cref="SoapExtension"/> at runtime with the specified  
  649.         /// <see cref="SoapExtensionTypeElement.Priority"/> and <see cref="SoapExtensionTypeElement.Group"/> settings.  
  650.         /// </summary>  
  651.         /// <param name="type">The <see cref="Type"/> of the <see cref="SoapExtension"/> to register.</param>  
  652.         /// <param name="priority">  
  653.         /// A value that indicates the relative order in which this SOAP extension runs when multiple SOAP extensions are  
  654.         /// specified. Within each group the priority attribute distinguishes the overall relative priority of the SOAP  
  655.         /// extension. A lower priority number indicates a higher priority for the SOAP extension. The lowest possible  
  656.         /// value for the priority attribute is 1.  
  657.         /// </param>  
  658.         /// <param name="group">  
  659.         /// The relative priority group (e.g. Low or High) in which this SOAP extension runs when multiple SOAP extensions  
  660.         /// are configured to run.  
  661.         /// </param>  
  662.         [ReflectionPermission(SecurityAction.Demand, Unrestricted = true)]
  663.         public static void RegisterSoapExtension(Type type, int priority, PriorityGroup group)
  664.         {
  665.             if (!type.IsSubclassOf(typeof(SoapExtension)))
  666.             {
  667.                 throw new ArgumentException("Type must be derived from SoapException.", "type");
  668.             }
  669.  
  670.             if (priority < 1)
  671.             {
  672.                 throw new ArgumentOutOfRangeException("priority", priority, "Priority must be greater or equal to 1.");
  673.             }
  674.  
  675.             // get the current web services settings...  
  676.             WebServicesSection wss = WebServicesSection.Current;
  677.  
  678.             // set SoapExtensionTypes collection to read/write...  
  679.              FieldInfo read BindingFlags.NonPublic | BindingFlags.Instance);
  680.             readOnlyField.SetValue(wss.SoapExtensionTypes, false);
  681.  
  682.             // inject SoapExtension...  
  683.             wss.SoapExtensionTypes.Add(new SoapExtensionTypeElement(type, priority, group));
  684.  
  685.             // set SoapExtensionTypes collection back to readonly and clear modified flags...  
  686.             MethodInfo resetModifiedMethod = typeof(System.Configuration.ConfigurationElement).GetMethod("ResetModified", BindingFlags.NonPublic | BindingFlags.Instance);
  687.             resetModifiedMethod.Invoke(wss.SoapExtensionTypes, null);
  688.              MethodInfo setRead BindingFlags.NonPublic | BindingFlags.Instance);
  689.             setReadOnlyMethod.Invoke(wss.SoapExtensionTypes, null);
  690.         }
  691.  
  692.  
  693.     }
  694. }
  695.