BarcodeEditorForm.cs 40 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Drawing;
  4. using System.Windows.Forms;
  5. using System.Reflection;
  6. using FastReport.Barcode.QRCode;
  7. using FastReport.Data;
  8. using FastReport.Code;
  9. using FastReport.Controls;
  10. using FastReport.Utils;
  11. using FastReport.Barcode;
  12. using System.Text.RegularExpressions;
  13. using System.Globalization;
  14. namespace FastReport.Forms
  15. {
  16. /// <summary>
  17. /// Form for barcode editor
  18. /// </summary>
  19. public partial class BarcodeEditorForm : BaseDialogForm
  20. {
  21. /// <summary>
  22. /// Generated text for barcode object
  23. /// </summary>
  24. public string result;
  25. private Report report;
  26. private static List<string> expandedNodes;
  27. private string brackets;
  28. private TextBox prevFocus;
  29. /// <summary>
  30. /// Initializes a new instance of the <see cref="BarcodeEditorForm"/> class.
  31. /// </summary>
  32. /// <param name="data">Text data for parsing</param>
  33. /// <param name="report">Report object for nodes</param>
  34. /// <param name="Brackets">Brackets symbols</param>
  35. /// <param name="isRichBarcode">Editor for rich barcode?</param>
  36. public BarcodeEditorForm(string data, Report report, string Brackets, bool isRichBarcode)
  37. {
  38. this.report = report;
  39. InitializeComponent();
  40. Localize();
  41. qrWifiEncryption.SelectedIndex = 0;
  42. qrSwissIbanType.SelectedIndex = 0;
  43. qrSwissRefType.SelectedIndex = 2;
  44. tvData.CreateNodes(report.Dictionary);
  45. brackets = Brackets;
  46. if (expandedNodes != null)
  47. tvData.ExpandedNodes = expandedNodes;
  48. foreach (Control control in GetAllControls(Controls))
  49. {
  50. if (control is TextBox tb)
  51. {
  52. tb.AllowDrop = true;
  53. tb.GotFocus += prevFocus_GotFocus;
  54. tb.DragOver += prevFocus_DragOver;
  55. tb.DragDrop += prevFocus_DragDrop;
  56. }
  57. }
  58. if (isRichBarcode)
  59. {
  60. parse(data);
  61. if (qrTabs.ActivePage != qrTypeSberbank && Res.Get("Forms,BarcodeEditor,SberbankQr,Enable") != "True")
  62. qrTypeSberbank.Dispose();
  63. }
  64. else
  65. {
  66. qrText.Text = data;
  67. qrTabs.ActivePage = qrTypeText;
  68. while (qrTabs.Pages.Count > 1)
  69. qrTabs.Pages[1].Dispose();
  70. }
  71. UIUtils.CheckRTL(this);
  72. UpdateDpiDependencies();
  73. }
  74. /// <inheritdoc/>
  75. public override void Localize()
  76. {
  77. base.Localize();
  78. MyRes res = new MyRes("Forms,BarcodeEditor");
  79. Text = res.Get("");
  80. qrTypeText.Text = res.Get("Text");
  81. qrTypeVcard.Text = res.Get("vCard");
  82. qrTypeURI.Text = res.Get("URI");
  83. qrTypeEmailAddress.Text = res.Get("EmailAddress");
  84. qrTypeEmailMessage.Text = res.Get("EmailMessage");
  85. qrTypeGeo.Text = res.Get("Geolocation");
  86. qrTypeSMS.Text = res.Get("SMS");
  87. qrTypeCall.Text = res.Get("Call");
  88. qrTypeEvent.Text = res.Get("Event");
  89. qrTypeWifi.Text = res.Get("Wifi");
  90. qrTypeSwiss.Text = res.Get("Swiss");
  91. qrTypeSberbank.Text = res.Get("SberbankQr");
  92. label16.Text = res.Get("FirstName");
  93. label17.Text = res.Get("LastName");
  94. label18.Text = res.Get("Title");
  95. label20.Text = res.Get("Company");
  96. label21.Text = res.Get("Website");
  97. label25.Text = res.Get("EmailPersonal");
  98. label26.Text = res.Get("EmailBusiness");
  99. label19.Text = res.Get("PhoneMobile");
  100. label27.Text = res.Get("PhonePersonal");
  101. label28.Text = res.Get("PhoneBusiness");
  102. label31.Text = res.Get("Street");
  103. label22.Text = res.Get("ZipCode");
  104. label23.Text = res.Get("City");
  105. label24.Text = res.Get("Country");
  106. label30.Text = res.Get("URI");
  107. label29.Text = res.Get("Email");
  108. label1.Text = res.Get("Email");
  109. label2.Text = res.Get("Subject");
  110. label3.Text = res.Get("Text");
  111. label5.Text = res.Get("Latitude");
  112. label4.Text = res.Get("Longitude");
  113. label6.Text = res.Get("Height");
  114. label7.Text = res.Get("PhoneNumber");
  115. label8.Text = res.Get("Text");
  116. label9.Text = res.Get("PhoneNumber");
  117. label10.Text = res.Get("Description");
  118. label11.Text = res.Get("From");
  119. label12.Text = res.Get("To");
  120. label13.Text = res.Get("Encryption");
  121. label14.Text = res.Get("NetworkName");
  122. label15.Text = res.Get("Password");
  123. qrWifiHidden.Text = res.Get("WifiHidden");
  124. res = new MyRes("Forms,BarcodeEditor,Swiss");
  125. lblSwissIban.Text = res.Get("Iban");
  126. lblSwissIbanType.Text = res.Get("IbanType");
  127. lblSwissAmount.Text = res.Get("Amount");
  128. lblSwissCurrency.Text = res.Get("Currency");
  129. gbSwissCreditor.Text = res.Get("Creditor");
  130. gbSwissDebitor.Text = res.Get("Debitor");
  131. lblSwissName1.Text = lblSwissName2.Text = res.Get("Name");
  132. lblSwissStreet1.Text = lblSwissStreet2.Text = res.Get("StreetNr");
  133. lblSwissZip1.Text = lblSwissZip2.Text = res.Get("ZipCityCountry");
  134. gbSwissAddInformation.Text = res.Get("AdditionalInformation");
  135. lblSwissRefText.Text = res.Get("Reference");
  136. lblSwissRefType.Text = res.Get("Type");
  137. lblSwissRefTextType.Text = res.Get("TextType");
  138. lblSwissAddMessage.Text = res.Get("Message");
  139. lblSwissAddBillInfo.Text = res.Get("BillInformation");
  140. lblSwissAddProcedure1.Text = res.Get("AlternativeProcedure") + " 1";
  141. lblSwissAddProcedure2.Text = res.Get("AlternativeProcedure") + " 2";
  142. res = new MyRes("Forms,BarcodeEditor,SberbankQr");
  143. sberQrName.Text = res.Get("Name");
  144. label41.Text = res.Get("PersonalAcc");
  145. label59.Text = res.Get("CorrespAcc");
  146. label52.Text = res.Get("BIC");
  147. label45.Text = res.Get("BankName");
  148. label66.Text = res.Get("KPP");
  149. label64.Text = res.Get("PayerINN");
  150. label69.Text = res.Get("TaxPeriod");
  151. label72.Text = res.Get("DocNo");
  152. label65.Text = res.Get("Purpose");
  153. label68.Text = res.Get("OKTMO");
  154. label63.Text = res.Get("PayeeINN");
  155. label62.Text = res.Get("Sum");
  156. label74.Text = res.Get("DocDate");
  157. label70.Text = res.Get("PayReason");
  158. label73.Text = res.Get("TaxPaytKind");
  159. label67.Text = res.Get("CBC");
  160. label71.Text = res.Get("DrawerStatus");
  161. label104.Text = res.Get("TechCode");
  162. label103.Text = res.Get("UIN");
  163. label102.Text = res.Get("RegType");
  164. label101.Text = res.Get("ExecId");
  165. label100.Text = res.Get("RuleId");
  166. label99.Text = res.Get("AddAmount");
  167. label98.Text = res.Get("SpecFio");
  168. label97.Text = res.Get("ClassNum");
  169. label96.Text = res.Get("InstNum");
  170. label95.Text = res.Get("QuittDate");
  171. label94.Text = res.Get("QuittId");
  172. label91.Text = res.Get("CounterVal");
  173. label92.Text = res.Get("ServiceName");
  174. label93.Text = res.Get("CounterId");
  175. label90.Text = res.Get("Category");
  176. label89.Text = res.Get("PaymTerm");
  177. label88.Text = res.Get("BirthDate");
  178. label87.Text = res.Get("ChildFio");
  179. label86.Text = res.Get("PayerIdType");
  180. label85.Text = res.Get("PayerIdNum");
  181. label83.Text = res.Get("Flat");
  182. label84.Text = res.Get("Phone");
  183. label81.Text = res.Get("PersAcc");
  184. label80.Text = res.Get("PensAcc");
  185. label79.Text = res.Get("DocIdx");
  186. label78.Text = res.Get("Contract");
  187. label77.Text = res.Get("PersonalAccount");
  188. label76.Text = res.Get("PayerAdress");
  189. label75.Text = res.Get("MiddleName");
  190. label61.Text = res.Get("FirstName");
  191. label60.Text = res.Get("LastName");
  192. tabPage2.Text = res.Get("ObligatoryProps");
  193. tabPage3.Text = res.Get("AdditionalProps");
  194. tabPage4.Text = res.Get("AnotherProps");
  195. QuittDateCheckBox.Text = res.Get("NotEnterDate");
  196. BirthDateCheckBox.Text = res.Get("NotEnterDate");
  197. PaymTermCheckBox.Text = res.Get("NotEnterDate");
  198. DocDateCheckBox.Text = res.Get("NotEnterDate");
  199. }
  200. /// <inheritdoc/>
  201. public override void UpdateDpiDependencies()
  202. {
  203. base.UpdateDpiDependencies();
  204. tvData.ImageList = GetImages();
  205. }
  206. private void QREdit_FormClosed(object sender, FormClosedEventArgs e)
  207. {
  208. expandedNodes = tvData.ExpandedNodes;
  209. }
  210. private void tvData_ItemDrag(object sender, ItemDragEventArgs e)
  211. {
  212. tvData.SelectedNode = e.Item as TreeNode;
  213. if (tvData.SelectedItem != "")
  214. tvData.DoDragDrop(e.Item, DragDropEffects.Move);
  215. else
  216. tvData.DoDragDrop(e.Item, DragDropEffects.None);
  217. }
  218. private void prevFocus_DragOver(object sender, DragEventArgs e)
  219. {
  220. TextBox tb = sender as TextBox;
  221. int index = tb.GetCharIndexFromPosition(tb.PointToClient(new Point(e.X, e.Y)));
  222. if (index == tb.Text.Length - 1)
  223. index++;
  224. tb.Focus();
  225. tb.Select(index, 0);
  226. e.Effect = e.AllowedEffect;
  227. }
  228. private void prevFocus_DragDrop(object sender, DragEventArgs e)
  229. {
  230. TextBox tb = sender as TextBox;
  231. tb.SelectedText = GetTextWithBrackets();
  232. tb.Focus();
  233. }
  234. List<Control> GetAllControls(Control.ControlCollection collection)
  235. {
  236. List<Control> result = new List<Control>();
  237. foreach (Control control in collection)
  238. {
  239. result.Add(control);
  240. result.AddRange(GetAllControls(control.Controls));
  241. }
  242. return result;
  243. }
  244. private void prevFocus_GotFocus(object sender, EventArgs e)
  245. {
  246. prevFocus = sender as TextBox;
  247. }
  248. private void tvData_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
  249. {
  250. if (tvData.SelectedItem != "" && prevFocus != null)
  251. {
  252. prevFocus.SelectedText = GetTextWithBrackets();
  253. prevFocus.Focus();
  254. }
  255. }
  256. private string GetTextWithBrackets()
  257. {
  258. string text = tvData.SelectedItem;
  259. string[] _brackets = brackets.Split(',');
  260. // this check is needed if Brackets property is not "[,]"
  261. if (InsideBrackets(prevFocus.SelectionStart))
  262. {
  263. if (tvData.SelectedItemType == DataTreeSelectedItemType.Function ||
  264. tvData.SelectedItemType == DataTreeSelectedItemType.CustomItem)
  265. return text;
  266. return "[" + text + "]";
  267. }
  268. return _brackets[0] + text + _brackets[1];
  269. }
  270. private bool InsideBrackets(int pos)
  271. {
  272. string[] _brackets = brackets.Split(',');
  273. FindTextArgs args = new FindTextArgs();
  274. args.Text = new FastString(prevFocus.Text);
  275. args.OpenBracket = _brackets[0];
  276. args.CloseBracket = _brackets[1];
  277. args.StartIndex = pos;
  278. return CodeUtils.IndexInsideBrackets(args);
  279. }
  280. private void parse(string data)
  281. {
  282. QRData qr = null;
  283. try
  284. {
  285. qr = QRData.Parse(data);
  286. }
  287. catch
  288. {
  289. try
  290. {
  291. qr = new QRText(data);
  292. }
  293. catch
  294. {
  295. MessageBox.Show("Can't parse", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
  296. Close();
  297. return;
  298. }
  299. }
  300. if (qr is QRText)
  301. {
  302. qrText.Text = qr.data;
  303. qrTabs.ActivePage = qrTypeText;
  304. }
  305. else if (qr is QRvCard)
  306. {
  307. QRvCard _qr = qr as QRvCard;
  308. qrVcFN.Text = _qr.firstName;
  309. qrVcLN.Text = _qr.lastName;
  310. qrVcTitle.Text = _qr.title;
  311. qrVcCompany.Text = _qr.org;
  312. qrVcWebsite.Text = _qr.url;
  313. qrVcEmailHome.Text = _qr.email_home_internet;
  314. qrVcEmailWork.Text = _qr.email_work_internet;
  315. qrVcPhone.Text = _qr.tel_cell;
  316. qrVcPhoneHome.Text = _qr.tel_home_voice;
  317. qrVcPhoneWork.Text = _qr.tel_work_voice;
  318. qrVcStreet.Text = _qr.street;
  319. qrVcZip.Text = _qr.zipCode;
  320. qrVcCity.Text = _qr.city;
  321. qrVcCountry.Text = _qr.country;
  322. qrTabs.ActivePage = qrTypeVcard;
  323. }
  324. else if (qr is QRURI)
  325. {
  326. qrURI.Text = qr.data;
  327. qrTabs.ActivePage = qrTypeURI;
  328. }
  329. else if (qr is QREmailAddress)
  330. {
  331. qrEmail.Text = qr.data;
  332. qrTabs.ActivePage = qrTypeEmailAddress;
  333. }
  334. else if (qr is QREmailMessage)
  335. {
  336. QREmailMessage _qr = qr as QREmailMessage;
  337. qrEmailTo.Text = _qr.msg_to;
  338. qrEmailSub.Text = _qr.msg_sub;
  339. qrEmailText.Text = _qr.msg_body;
  340. qrTabs.ActivePage = qrTypeEmailMessage;
  341. }
  342. else if (qr is QRGeo)
  343. {
  344. QRGeo _qr = qr as QRGeo;
  345. qrGeoLatitude.Text = _qr.latitude;
  346. qrGeoLongitude.Text = _qr.longitude;
  347. qrGeoMeters.Text = _qr.meters;
  348. qrTabs.ActivePage = qrTypeGeo;
  349. }
  350. else if (qr is QRSMS)
  351. {
  352. QRSMS _qr = qr as QRSMS;
  353. qrSMSTo.Text = _qr.sms_to;
  354. qrSMSText.Text = _qr.sms_text;
  355. qrTabs.ActivePage = qrTypeSMS;
  356. }
  357. else if (qr is QRCall)
  358. {
  359. QRCall _qr = qr as QRCall;
  360. qrCall.Text = _qr.tel;
  361. qrTabs.ActivePage = qrTypeCall;
  362. }
  363. else if (qr is QREvent)
  364. {
  365. QREvent _qr = qr as QREvent;
  366. qrEventDesc.Text = _qr.summary;
  367. qrEventFrom.Value = _qr.dtStart;
  368. qrEventTo.Value = _qr.dtEnd;
  369. qrTabs.ActivePage = qrTypeEvent;
  370. }
  371. else if (qr is QRWifi)
  372. {
  373. QRWifi _qr = qr as QRWifi;
  374. qrWifiEncryption.Text = _qr.encryption;
  375. qrWifiName.Text = _qr.networkName;
  376. qrWifiPass.Text = _qr.password;
  377. qrWifiHidden.Checked = _qr.hidden;
  378. qrTabs.ActivePage = qrTypeWifi;
  379. }
  380. else if (qr is QRSberBank)
  381. {
  382. QRSberBank _qr = qr as QRSberBank;
  383. NameTextBox.Text = _qr.Name;
  384. PersonalAccTextBox.Text = _qr.PersonalAcc;
  385. BankNameTextBox.Text = _qr.BankName;
  386. BICTextBox.Text = _qr.BIC;
  387. CorrespAccTextBox.Text = _qr.CorrespAcc;
  388. sumTextBox.Text = _qr.Sum;
  389. PaymentPurpose.Text = _qr.Purpose;
  390. PayerInnTextBox.Text = _qr.PayerINN;
  391. ReceiverIINTextBox.Text = _qr.PayeeINNB;
  392. DrawerStatusTextBox.Text = _qr.DrawerStatus;
  393. ReceiverKPPTextBox.Text = _qr.KPP;
  394. OKTMOTextBox.Text = _qr.OKTMO;
  395. PayReasonTextBox.Text = _qr.PaytReason;
  396. TaxPeriodTextBox.Text = _qr.TaxPeriod;
  397. DocumentNumberTextBox.Text = _qr.DocNo;
  398. CBCTextBox.Text = _qr.CBC;
  399. if (_qr.DocDate != DateTime.MinValue)
  400. {
  401. DocumentDatePicker.Value = _qr.DocDate;
  402. DocDateCheckBox.Checked = false;
  403. }
  404. else
  405. {
  406. DocumentDatePicker.Enabled = false;
  407. DocDateCheckBox.Checked = true;
  408. }
  409. TaxPayKindTextBox.Text = _qr.TaxPaytKind;
  410. LastNameTextBox.Text = _qr.LastName;
  411. FirstNameTextBox.Text = _qr.FirstName;
  412. MiddleNameTextBox.Text = _qr.MiddleName;
  413. PayerAdressTextBox.Text = _qr.PayerAddress;
  414. PersonalAccoutTextBox.Text = _qr.PersonalAccount;
  415. DocIdxTextBox.Text = _qr.DocIdx;
  416. PensAccTextBox.Text = _qr.PensAcc;
  417. ContractTextBox.Text = _qr.Contract;
  418. PersAccTextBox.Text = _qr.PersAccp;
  419. FlatTextBox.Text = _qr.Flat;
  420. PhoneTextBox.Text = _qr.Phone;
  421. PayerIdTypeTextBox.Text = _qr.PayerIdType;
  422. PayerIdNumTextBox.Text = _qr.PayerIdNum;
  423. ChildFioTextBox.Text = _qr.ChildFio;
  424. if (_qr.BirthDate != DateTime.MinValue)
  425. {
  426. BirthDatePicker.Value = _qr.BirthDate;
  427. BirthDateCheckBox.Checked = false;
  428. }
  429. else
  430. {
  431. BirthDateCheckBox.Checked = true;
  432. BirthDatePicker.Enabled = false;
  433. }
  434. if (_qr.PaymTerm != DateTime.MinValue)
  435. {
  436. PaymTermPicker.Value = _qr.PaymTerm;
  437. PaymTermCheckBox.Checked = false;
  438. }
  439. else
  440. {
  441. PaymTermPicker.Enabled = false;
  442. PaymTermCheckBox.Checked = true;
  443. }
  444. CategoryTextBox.Text = _qr.Category;
  445. ServiceNameTextBox.Text = _qr.ServiceName;
  446. CounterIdValTextBox.Text = _qr.CounterId;
  447. CounterValTextBox.Text = _qr.CounterVal;
  448. QuittIdTextBox.Text = _qr.QuittId;
  449. if (_qr.QuittDate != DateTime.MinValue)
  450. {
  451. QuittDateDatePicker.Value = _qr.QuittDate;
  452. QuittDateCheckBox.Checked = false;
  453. }
  454. else
  455. {
  456. QuittDateDatePicker.Enabled = false;
  457. QuittDateCheckBox.Checked = true;
  458. }
  459. InstNumTextBox.Text = _qr.InstNum;
  460. ClassNumTextBox.Text = _qr.ClassNum;
  461. SpecFioTextBox.Text = _qr.SpecFio;
  462. AddAmountTextBox.Text = _qr.AddAmount;
  463. RuleIdTextBox.Text = _qr.RuleId;
  464. ExecId.Text = _qr.ExecId;
  465. RegType.Text = _qr.RegType;
  466. UINTextBox.Text = _qr.UIN;
  467. TechCodeTextBox.Text = _qr.TechCode;
  468. qrTabs.ActivePage = qrTypeSberbank;
  469. }
  470. else if (qr is QRSwiss)
  471. {
  472. QRSwiss _qr = qr as QRSwiss;
  473. qrSwissIban.Text = _qr._Iban._Iban;
  474. if (_qr._Iban.TypeIban == Iban.IbanType.Iban)
  475. qrSwissIbanType.SelectedIndex = 0;
  476. else
  477. qrSwissIbanType.SelectedIndex = 1;
  478. qrSwissCreditorName.Text = _qr.Creditor.Name;
  479. qrSwissCreditorCity.Text = _qr.Creditor.City;
  480. qrSwissCreditorCountry.Text = _qr.Creditor.Country;
  481. qrSwissCreditorHNumber.Text = _qr.Creditor.HouseNumberOrAddressline;
  482. qrSwissCreditorStreet.Text = _qr.Creditor.StreetOrAddressline;
  483. qrSwissCreditorZipCode.Text = _qr.Creditor.ZipCode;
  484. qrSwissRefText.Text = _qr._Reference.ReferenceText;
  485. switch (_qr._Reference.RefType)
  486. {
  487. case Reference.ReferenceType.QRR:
  488. qrSwissRefType.SelectedIndex = 0;
  489. break;
  490. case Reference.ReferenceType.SCOR:
  491. qrSwissRefType.SelectedIndex = 1;
  492. break;
  493. case Reference.ReferenceType.NON:
  494. qrSwissRefType.SelectedIndex = 2;
  495. break;
  496. }
  497. switch (_qr._Reference._ReferenceTextType)
  498. {
  499. case Reference.ReferenceTextType.QrReference:
  500. qrSwissRefTextType.SelectedIndex = 0;
  501. break;
  502. case Reference.ReferenceTextType.CreditorReferenceIso11649:
  503. qrSwissRefTextType.SelectedIndex = 1;
  504. break;
  505. }
  506. if (_qr.Debitor != null)
  507. {
  508. qrSwissDebitorName.Text = _qr.Debitor.Name.ToString();
  509. qrSwissDebitorCity.Text = _qr.Debitor.City.ToString();
  510. qrSwissDebitorCountry.Text = _qr.Debitor.Country.ToString();
  511. qrSwissDebitorHNumber.Text = _qr.Debitor.HouseNumberOrAddressline.ToString();
  512. qrSwissDebitorStreet.Text = _qr.Debitor.StreetOrAddressline.ToString();
  513. qrSwissDebitorZipCode.Text = _qr.Debitor.ZipCode.ToString();
  514. }
  515. qrSwissUnstructMessage.Text = _qr._AdditionalInformation.UnstructureMessage != null ? _qr._AdditionalInformation.UnstructureMessage : "";
  516. qrSwissBillInfo.Text = _qr._AdditionalInformation.BillInformation != null ? _qr._AdditionalInformation.BillInformation : "";
  517. qrSwissAlt1.Text = _qr.AlternativeProcedure1 != null ? _qr.AlternativeProcedure1 : "";
  518. qrSwissAlt2.Text = _qr.AlternativeProcedure2 != null ? _qr.AlternativeProcedure2 : "";
  519. switch (_qr._Currency)
  520. {
  521. case nameof(Currency.EUR):
  522. tbQrSwissCurrency.Text = _qr._Currency.ToString();
  523. break;
  524. case nameof(Currency.CHF):
  525. tbQrSwissCurrency.Text = _qr._Currency.ToString();
  526. break;
  527. default:
  528. if (_qr._Currency.StartsWith("[") && _qr._Currency.EndsWith("]"))
  529. tbQrSwissCurrency.Text = _qr._Currency.ToString();
  530. else
  531. tbQrSwissCurrency.Text = Currency.EUR.ToString();
  532. break;
  533. }
  534. qrSwissAmount.Text = _qr.Amount?.ToString();
  535. qrTabs.ActivePage = qrTypeSwiss;
  536. }
  537. }
  538. private void btnOk_Click(object sender, EventArgs e)
  539. {
  540. try
  541. {
  542. if (qrTabs.ActivePage == qrTypeText)
  543. {
  544. QRText qr = new QRText();
  545. qr.data = qrText.Text;
  546. result = qr.Pack();
  547. }
  548. else if (qrTabs.ActivePage == qrTypeVcard)
  549. {
  550. QRvCard qr = new QRvCard();
  551. qr.firstName = qrVcFN.Text;
  552. qr.lastName = qrVcLN.Text;
  553. qr.title = qrVcTitle.Text;
  554. qr.org = qrVcCompany.Text;
  555. qr.url = qrVcWebsite.Text;
  556. qr.email_home_internet = qrVcEmailHome.Text;
  557. qr.email_work_internet = qrVcEmailWork.Text;
  558. qr.tel_cell = qrVcPhone.Text;
  559. qr.tel_home_voice = qrVcPhoneHome.Text;
  560. qr.tel_work_voice = qrVcPhoneWork.Text;
  561. qr.street = qrVcStreet.Text;
  562. qr.zipCode = qrVcZip.Text;
  563. qr.city = qrVcCity.Text;
  564. qr.country = qrVcCountry.Text;
  565. result = qr.Pack();
  566. }
  567. else if (qrTabs.ActivePage == qrTypeURI)
  568. {
  569. QRURI qr = new QRURI();
  570. qr.data = qrURI.Text;
  571. result = qr.Pack();
  572. }
  573. else if (qrTabs.ActivePage == qrTypeEmailAddress)
  574. {
  575. QREmailAddress qr = new QREmailAddress();
  576. qr.data = qrEmail.Text;
  577. result = qr.Pack();
  578. }
  579. else if (qrTabs.ActivePage == qrTypeEmailMessage)
  580. {
  581. QREmailMessage qr = new QREmailMessage();
  582. qr.msg_to = qrEmailTo.Text;
  583. qr.msg_sub = qrEmailSub.Text;
  584. qr.msg_body = qrEmailText.Text;
  585. result = qr.Pack();
  586. }
  587. else if (qrTabs.ActivePage == qrTypeGeo)
  588. {
  589. QRGeo qr = new QRGeo();
  590. qr.latitude = qrGeoLatitude.Text;
  591. qr.longitude = qrGeoLongitude.Text;
  592. qr.meters = qrGeoMeters.Text;
  593. result = qr.Pack();
  594. }
  595. else if (qrTabs.ActivePage == qrTypeSMS)
  596. {
  597. QRSMS qr = new QRSMS();
  598. qr.sms_to = qrSMSTo.Text;
  599. qr.sms_text = qrSMSText.Text;
  600. result = qr.Pack();
  601. }
  602. else if (qrTabs.ActivePage == qrTypeCall)
  603. {
  604. QRCall qr = new QRCall();
  605. qr.tel = qrCall.Text;
  606. result = qr.Pack();
  607. }
  608. else if (qrTabs.ActivePage == qrTypeEvent)
  609. {
  610. QREvent qr = new QREvent();
  611. qr.summary = qrEventDesc.Text;
  612. qr.dtStart = qrEventFrom.Value;
  613. qr.dtEnd = qrEventTo.Value;
  614. result = qr.Pack();
  615. }
  616. else if (qrTabs.ActivePage == qrTypeSberbank)
  617. {
  618. if (String.IsNullOrWhiteSpace(PersonalAccTextBox.Text) || String.IsNullOrWhiteSpace(BankNameTextBox.Text)
  619. || String.IsNullOrWhiteSpace(NameTextBox.Text) || String.IsNullOrWhiteSpace(BICTextBox.Text)
  620. || String.IsNullOrWhiteSpace(CorrespAccTextBox.Text))
  621. {
  622. throw new Exception(Res.Get("Forms,BarcodeEditor,SberbankQr,Error"));
  623. }
  624. else
  625. {
  626. string[] brackets = this.brackets.Split(',');
  627. string messege = Res.Get("Forms,BarcodeEditor,SberbankQr,Warning");
  628. bool error = true;
  629. if ((Regex.IsMatch(PersonalAccTextBox.Text, "[A-z ]") || PersonalAccTextBox.Text.Length != 20)
  630. && !(PersonalAccTextBox.Text.StartsWith(brackets[0]) && PersonalAccTextBox.Text.EndsWith(brackets[1])))
  631. {
  632. messege += " " + Res.Get("Forms,BarcodeEditor,SberbankQr,PersonalAcc");
  633. error = false;
  634. }
  635. if ((Regex.IsMatch(BICTextBox.Text, "[A-z ]") || BICTextBox.Text.Length != 9)
  636. && !(BICTextBox.Text.StartsWith(brackets[0]) && BICTextBox.Text.EndsWith(brackets[1])))
  637. {
  638. messege += " " + Res.Get("Forms,BarcodeEditor,SberbankQr,BIC");
  639. error = false;
  640. }
  641. if ((Regex.IsMatch(CorrespAccTextBox.Text, "[A-z ]"))
  642. && !(CorrespAccTextBox.Text.StartsWith(brackets[0]) && CorrespAccTextBox.Text.EndsWith(brackets[1])))
  643. {
  644. messege += " " + Res.Get("Forms,BarcodeEditor,SberbankQr,CorrespAcc");
  645. error = false;
  646. }
  647. if (!error)
  648. throw new Exception(messege + ".");
  649. }
  650. QRSberBank qe = new QRSberBank();
  651. qe.PersonalAcc = PersonalAccTextBox.Text;
  652. qe.BankName = BankNameTextBox.Text;
  653. qe.Name = NameTextBox.Text;
  654. qe.BIC = BICTextBox.Text;
  655. qe.CorrespAcc = CorrespAccTextBox.Text;
  656. qe.Sum = sumTextBox.Text;
  657. qe.PayeeINNB = ReceiverIINTextBox.Text;
  658. qe.PayerINN = PayerInnTextBox.Text;
  659. qe.CBC = CBCTextBox.Text;
  660. qe.Purpose = PaymentPurpose.Text;
  661. qe.DrawerStatus = DrawerStatusTextBox.Text;
  662. qe.KPP = ReceiverKPPTextBox.Text;
  663. qe.OKTMO = OKTMOTextBox.Text;
  664. qe.PaytReason = PayReasonTextBox.Text;
  665. qe.DocNo = DocumentNumberTextBox.Text;
  666. qe.TaxPaytKind = TaxPayKindTextBox.Text;
  667. qe.TaxPeriod = TaxPeriodTextBox.Text;
  668. qe.DocDate = DocDateCheckBox.Checked ? DateTime.MinValue : DocumentDatePicker.Value;
  669. qe.LastName = LastNameTextBox.Text;
  670. qe.FirstName = FirstNameTextBox.Text;
  671. qe.MiddleName = MiddleNameTextBox.Text;
  672. qe.PayerAddress = PayerAdressTextBox.Text;
  673. qe.PersonalAccount = PersonalAccoutTextBox.Text;
  674. qe.DocIdx = DocIdxTextBox.Text;
  675. qe.PensAcc = PensAccTextBox.Text;
  676. qe.Contract = ContractTextBox.Text;
  677. qe.PersAccp = PersAccTextBox.Text;
  678. qe.Flat = FlatTextBox.Text;
  679. qe.Phone = PhoneTextBox.Text;
  680. qe.PayerIdType = PayerIdTypeTextBox.Text;
  681. qe.PayerIdNum = PayerIdNumTextBox.Text;
  682. qe.ChildFio = ChildFioTextBox.Text;
  683. qe.BirthDate = BirthDateCheckBox.Checked ? DateTime.MinValue : BirthDatePicker.Value;
  684. qe.PaymTerm = PaymTermCheckBox.Checked ? DateTime.MinValue : PaymTermPicker.Value;
  685. /*
  686. * payment period
  687. */
  688. qe.Category = CategoryTextBox.Text;
  689. qe.ServiceName = ServiceNameTextBox.Text;
  690. qe.CounterId = CounterIdValTextBox.Text;
  691. qe.CounterVal = CounterValTextBox.Text;
  692. qe.QuittId = QuittIdTextBox.Text;
  693. qe.QuittDate = QuittDateCheckBox.Checked ? DateTime.MinValue : QuittDateDatePicker.Value;
  694. qe.InstNum = InstNumTextBox.Text;
  695. qe.ClassNum = ClassNumTextBox.Text;
  696. qe.SpecFio = SpecFioTextBox.Text;
  697. qe.AddAmount = AddAmountTextBox.Text;
  698. qe.RuleId = RuleIdTextBox.Text;
  699. qe.ExecId = ExecId.Text;
  700. qe.RegType = RegType.Text;
  701. qe.UIN = UINTextBox.Text;
  702. qe.TechCode = TechCodeTextBox.Text;
  703. result = qe.Pack();
  704. }
  705. else if (qrTabs.ActivePage == qrTypeWifi)
  706. {
  707. QRWifi qr = new QRWifi();
  708. qr.encryption = qrWifiEncryption.Text;
  709. qr.networkName = qrWifiName.Text;
  710. qr.password = qrWifiPass.Text;
  711. qr.hidden = qrWifiHidden.Checked;
  712. result = qr.Pack();
  713. }
  714. else if (qrTabs.ActivePage == qrTypeSwiss)
  715. {
  716. MyRes res = new MyRes("Messages,Swiss");
  717. string[] brackets = this.brackets.Split(',');
  718. string ibanText = qrSwissIban.Text;
  719. Iban.IbanType? ibanType = null;
  720. switch (qrSwissIbanType.SelectedIndex)
  721. {
  722. case 0:
  723. ibanType = Iban.IbanType.Iban;
  724. break;
  725. case 1:
  726. ibanType = Iban.IbanType.QrIban;
  727. break;
  728. }
  729. if (ibanType == null || ibanText == "")
  730. throw new SwissQrCodeException(res.Get("SwissNullIban"));
  731. Iban iban = null;
  732. // if the ibanText text is a field from the database, then we simply assign a value without checking it
  733. if (ibanText.StartsWith(brackets[0].ToString()) && ibanText.EndsWith(brackets[1]))
  734. {
  735. iban = new Iban(ibanText);
  736. iban.TypeIban = (Iban.IbanType)ibanType;
  737. }
  738. else
  739. iban = new Iban(ibanText, ibanType.Value);
  740. string creditorName = qrSwissCreditorName.Text;
  741. string creditorZipCode = qrSwissCreditorZipCode.Text;
  742. string creditorCity = qrSwissCreditorCity.Text;
  743. string creditorCountry = qrSwissCreditorCountry.Text;
  744. string creditorHouseNumberOrAddressline = qrSwissCreditorHNumber.Text;
  745. string creditorStreetOrAddressline = qrSwissCreditorStreet.Text;
  746. Contact creditor = new Contact(creditorName, creditorZipCode, creditorCity, creditorCountry, creditorStreetOrAddressline, creditorHouseNumberOrAddressline);
  747. string referenceText = qrSwissRefText.Text;
  748. Reference.ReferenceType? referenceType = null;
  749. Reference.ReferenceTextType? referenceTextType = null;
  750. switch (qrSwissRefTextType.SelectedIndex)
  751. {
  752. case 0:
  753. referenceTextType = Reference.ReferenceTextType.QrReference;
  754. break;
  755. case 1:
  756. referenceTextType = Reference.ReferenceTextType.CreditorReferenceIso11649;
  757. break;
  758. }
  759. switch (qrSwissRefType.SelectedIndex)
  760. {
  761. case 0:
  762. referenceType = Reference.ReferenceType.QRR;
  763. break;
  764. case 1:
  765. referenceType = Reference.ReferenceType.SCOR;
  766. break;
  767. case 2:
  768. referenceType = Reference.ReferenceType.NON;
  769. break;
  770. }
  771. Reference reference = null;
  772. if (!String.IsNullOrWhiteSpace(referenceText))
  773. reference = new Reference(referenceType.Value, referenceText, referenceTextType);
  774. else
  775. reference = new Reference(referenceType.Value, null, null);
  776. string debitorName = qrSwissDebitorName.Text;
  777. string debitorZipCode = qrSwissDebitorZipCode.Text;
  778. string debitorCity = qrSwissDebitorCity.Text;
  779. string debitorCountry = qrSwissDebitorCountry.Text;
  780. string debitorHouseNumberOrAddressline = qrSwissDebitorHNumber.Text;
  781. string debitorStreetOrAddressline = qrSwissDebitorStreet.Text;
  782. Contact debitor = null;
  783. if (debitorName + debitorCity + debitorZipCode + debitorCountry + debitorStreetOrAddressline + debitorHouseNumberOrAddressline != "")
  784. debitor = new Contact(debitorName, debitorZipCode, debitorCity, debitorCountry, debitorStreetOrAddressline, debitorHouseNumberOrAddressline);
  785. string addInfoBillInformation = qrSwissBillInfo.Text;
  786. string addInfoUnstructureMessage = qrSwissUnstructMessage.Text;
  787. AdditionalInformation additionalInformation = new AdditionalInformation(addInfoUnstructureMessage, addInfoBillInformation);
  788. string currency = null;
  789. switch (tbQrSwissCurrency.Text)
  790. {
  791. case nameof(Currency.EUR):
  792. currency = Currency.EUR.ToString();
  793. break;
  794. case nameof(Currency.CHF):
  795. currency = Currency.CHF.ToString();
  796. break;
  797. default:
  798. if (tbQrSwissCurrency.Text.StartsWith("[") && tbQrSwissCurrency.Text.EndsWith("]"))
  799. currency = tbQrSwissCurrency.Text;
  800. else
  801. currency = Currency.EUR.ToString();
  802. break;
  803. }
  804. string amountValue = null;
  805. if (!qrSwissAmount.Text.StartsWith(brackets[0]) || !qrSwissAmount.Text.EndsWith(brackets[1]))
  806. {
  807. //Amount has to use . as decimal separator in any case. See https://www.paymentstandards.ch/dam/downloads/ig-qr-bill-en.pdf page 27.
  808. string invariantSeparator = CultureInfo.InvariantCulture.NumberFormat.NumberDecimalSeparator;
  809. string clearQRSwissAmount = qrSwissAmount.Text.Replace(",", invariantSeparator).Replace("/", invariantSeparator);
  810. if (!string.IsNullOrWhiteSpace(clearQRSwissAmount))
  811. {
  812. if (decimal.TryParse(clearQRSwissAmount, NumberStyles.Number, CultureInfo.InvariantCulture, out decimal amount))
  813. amountValue = amount.ToString(CultureInfo.InvariantCulture);
  814. }
  815. }
  816. else
  817. amountValue = qrSwissAmount.Text;
  818. QRSwissParameters parameters = new QRSwissParameters();
  819. parameters.Iban = iban;
  820. parameters.Creditor = creditor;
  821. parameters.Reference = reference;
  822. parameters.AlternativeProcedure1 = qrSwissAlt1.Text;
  823. parameters.AlternativeProcedure2 = qrSwissAlt2.Text;
  824. parameters.AdditionalInformation = additionalInformation;
  825. parameters.Amount = amountValue;
  826. parameters.Currency = currency;
  827. parameters.Debitor = debitor;
  828. QRSwiss qr = new QRSwiss(parameters);
  829. result = qr.Pack();
  830. }
  831. DialogResult = DialogResult.OK;
  832. Close();
  833. }
  834. catch (Exception ex)
  835. {
  836. FRMessageBox.Error(ex.Message);
  837. }
  838. }
  839. private void tvData_AfterSelect(object sender, TreeViewEventArgs e)
  840. {
  841. bool descrVisible = tvData.SelectedNode != null &&
  842. (tvData.SelectedNode.Tag is MethodInfo || tvData.SelectedNode.Tag is SystemVariable);
  843. expandableSplitter1.Visible = descrVisible;
  844. lblDescription.Visible = descrVisible;
  845. if (descrVisible)
  846. lblDescription.ShowDescription(report, tvData.SelectedNode.Tag);
  847. }
  848. private void PaymTermCheckBox_CheckedChanged(object sender, EventArgs e)
  849. {
  850. if (PaymTermCheckBox.Checked)
  851. {
  852. PaymTermPicker.Enabled = false;
  853. }
  854. else
  855. {
  856. PaymTermPicker.Enabled = true;
  857. }
  858. }
  859. private void BirthDateCheckBox_CheckedChanged(object sender, EventArgs e)
  860. {
  861. if (BirthDateCheckBox.Checked)
  862. {
  863. BirthDatePicker.Enabled = false;
  864. }
  865. else
  866. {
  867. BirthDatePicker.Enabled = true;
  868. }
  869. }
  870. private void DocDateCheckBox_CheckedChanged(object sender, EventArgs e)
  871. {
  872. if (DocDateCheckBox.Checked)
  873. {
  874. DocumentDatePicker.Enabled = false;
  875. }
  876. else
  877. {
  878. DocumentDatePicker.Enabled = true;
  879. }
  880. }
  881. private void QuittDateCheckBox_CheckedChanged(object sender, EventArgs e)
  882. {
  883. if (QuittDateCheckBox.Checked)
  884. {
  885. QuittDateDatePicker.Enabled = false;
  886. }
  887. else
  888. {
  889. QuittDateDatePicker.Enabled = true;
  890. }
  891. }
  892. }
  893. }