PageRenderTime 41ms CodeModel.GetById 9ms RepoModel.GetById 1ms app.codeStats 0ms

/WEB/c/user/shopping-order/_ctrl/_cntOrderEdit.ascx.cs

https://bitbucket.org/zzare/eko
C# | 600 lines | 395 code | 129 blank | 76 comment | 112 complexity | df9f6c8edcf82dafb9634689d59d968d MD5 | raw file
  1. using System;
  2. using System.Collections;
  3. using System.Configuration;
  4. using System.Data;
  5. using System.Linq;
  6. using System.Web;
  7. using System.Web.Security;
  8. using System.Web.UI;
  9. using System.Web.UI.HtmlControls;
  10. using System.Web.UI.WebControls;
  11. using System.Web.UI.WebControls.WebParts;
  12. using System.Xml.Linq;
  13. using System.Collections.Generic;
  14. using System.Security.Cryptography.X509Certificates;
  15. using System.Security.Cryptography;
  16. using System.Globalization;
  17. namespace SM.UI.Controls
  18. {
  19. public partial class shopping_order_cntOrderEdit : BaseControl
  20. {
  21. public Guid PageID { get; set; }
  22. protected SHOPPING_ORDER Order;
  23. public event EventHandler OnUserChanged;
  24. public event EventHandler OnCancel;
  25. public Guid OrderID {
  26. get
  27. {
  28. Guid res = Guid.Empty;
  29. if (ViewState["OrderID"] == null) return res;
  30. if (!SM.EM.Helpers.IsGUID(ViewState["OrderID"].ToString())) return res;
  31. return new Guid(ViewState["OrderID"].ToString());
  32. }
  33. set{
  34. ViewState["OrderID"] = value;
  35. }
  36. }
  37. protected short NewStatus;
  38. protected void Page_Load(object sender, EventArgs e)
  39. {
  40. if (!IsPostBack)
  41. {
  42. }
  43. }
  44. protected override void OnPreRender(EventArgs e)
  45. {
  46. if (Order == null)
  47. Order = SHOPPING_ORDER.GetShoppingOrderByIDByPage(OrderID, PageID);
  48. base.OnPreRender(e);
  49. }
  50. // bind data
  51. public void BindData() {
  52. this.Visible = true;
  53. if (OrderID == Guid.Empty)
  54. {
  55. //LoadDefaultValues();
  56. }
  57. else {
  58. LoadData();
  59. }
  60. }
  61. // LOAD Question
  62. protected void LoadData() {
  63. SHOPPING_ORDER ord = SHOPPING_ORDER.GetShoppingOrderByIDByPage(OrderID, PageID );
  64. if (ord == null)
  65. return;
  66. Order = ord;
  67. tbOrderRefID.Text = SHOPPING_ORDER.Common.RenderShoppingOrderNumber(ord);
  68. litTotal.Text = SM.EM.Helpers.FormatPrice(ord.TotalWithTax) + " ( " + SM.EM.Helpers.FormatPrice(ord.Total) + " +ddv )";
  69. litDateStart.Text = SM.EM.Helpers.FormatDateMedium(ord.DateStart);
  70. //litPaymentType.Text = SHOPPING_ORDER.Common.RenderSHOPPING_ORDERPayment(ord.PaymentType.Value );
  71. lnkUser.HRef = Page.ResolveUrl(CUSTOMER.Common.RenderBackendDetailsHref (ord.UserId ));
  72. CustomerRep crep = new CustomerRep();
  73. CUSTOMER cus = crep.GetCustomerByID(ord.UserId);
  74. if (cus != null)
  75. {
  76. lnkUser.InnerHtml = cus.USERNAME;
  77. }
  78. // lnkTicket.HRef = TICKET.Common.GetTicketDetailsCMSHref (ord.TicketID.Value );
  79. // status
  80. litStatus.Text = SHOPPING_ORDER.Common.RenderOrderStatus(ord.OrderStatus);
  81. // order detail
  82. ProductRep prep = new ProductRep();
  83. List<ProductRep.Data.ShoppingCartItem> list = prep.GetCartItemList(ord.UserId , LANGUAGE.GetCurrentLang(), ord.PageId , ord.OrderID);
  84. objOrderDetail.Order = Order;
  85. objOrderDetail.CartItems = list;
  86. objOrderDetail.LoadData();
  87. phCancel.Visible = true;
  88. phSetPayed.Visible = false;
  89. phSetFinished.Visible = false;
  90. phSetPayedOnline.Visible = false;
  91. phSetPayedBack.Visible = false;
  92. phDeliverySend.Visible = false;
  93. phDelivery.Visible = false;
  94. rfvDatePayed.Enabled = false;
  95. //rfvDatePayedOnline.Enabled = false;
  96. if (ord.OrderStatus == SHOPPING_ORDER.Common.Status.CONFIRMED)
  97. {
  98. // post-payed
  99. if (ord.PaymentType == SHOPPING_ORDER.Common.PaymentType.DELIVERY)
  100. {
  101. phDeliverySend.Visible = true;
  102. }
  103. else
  104. {
  105. // pre-payed
  106. phSetPayed.Visible = true;
  107. rfvDatePayed.Enabled = true;
  108. }
  109. // enable cancel
  110. phCancel.Visible = true;
  111. }
  112. else if (ord.OrderStatus == SHOPPING_ORDER.Common.Status.ONLINE_PAYMENT_RESERVED )
  113. {
  114. // tbDatePayedOnline.Text = DateTime.Now.Date.ToShortDateString();
  115. phSetPayedOnline.Visible = true;
  116. //rfvDatePayedOnline.Enabled = true;
  117. phCancel.Visible = true;
  118. }
  119. else if (ord.OrderStatus == SHOPPING_ORDER.Common.Status.SENT_DELIVERY )
  120. {
  121. phDelivery.Visible = true;
  122. //rfvDatePayedOnline.Enabled = true;
  123. phCancel.Visible = true;
  124. }
  125. else if (ord.OrderStatus == SHOPPING_ORDER.Common.Status.PAYED)
  126. {
  127. // phSetPayed.Visible = false;
  128. // rfvDatePayed.Enabled = false;
  129. phSetFinished.Visible = true;
  130. //btSetPayedBack.Visible = false;
  131. phCancel.Visible = false;
  132. }
  133. else if (ord.OrderStatus == SHOPPING_ORDER.Common.Status.FINISHED)
  134. {
  135. // phSetPayed.Visible = false;
  136. // rfvDatePayed.Enabled = false;
  137. // btSetPayedBack.Visible = true;
  138. // payed by delivery
  139. if (ord.PaymentType == SHOPPING_ORDER.Common.PaymentType.DELIVERY)
  140. {
  141. }
  142. else
  143. // pre payed
  144. {
  145. phSetPayedBack.Visible = true;
  146. }
  147. phCancel.Visible = false;
  148. }
  149. else if (ord.OrderStatus == SHOPPING_ORDER.Common.Status.CANCELED)
  150. {
  151. // phSetPayed.Visible = false;
  152. // rfvDatePayed.Enabled = false;
  153. // btSetPayedBack.Visible = false;
  154. phCancel.Visible = false;
  155. }
  156. panEdit.Visible = true;
  157. }
  158. public void Save() {
  159. eMenikDataContext db = new eMenikDataContext();
  160. SHOPPING_ORDER ord = db.SHOPPING_ORDERs.SingleOrDefault(w => w.OrderID == OrderID);
  161. // status
  162. // user has payed
  163. if (ord.OrderStatus == SHOPPING_ORDER.Common.Status.CONFIRMED && NewStatus == SHOPPING_ORDER.Common.Status.PAYED)
  164. {
  165. ord.DatePayed = DateTime.Parse( tbDatePayed.Text);
  166. ord.Payed = true;
  167. } // shippment is sent
  168. else if (ord.OrderStatus == SHOPPING_ORDER.Common.Status.CONFIRMED && NewStatus == SHOPPING_ORDER.Common.Status.SENT_DELIVERY )
  169. {
  170. // send mail to user
  171. OrderRep orep = new OrderRep();
  172. CustomerRep crep = new CustomerRep();
  173. orep.SendMailUserOrderCompleted(EM_USER.GetUserByID(ord.PageId.Value), crep.GetCustomerByID(ord.UserId), ord);
  174. ord.ShippedDate = DateTime.Now;
  175. }
  176. // back: order is not finished
  177. else if (ord.OrderStatus == SHOPPING_ORDER.Common.Status.FINISHED && NewStatus == SHOPPING_ORDER.Common.Status.PAYED)
  178. {
  179. // back to
  180. ord.DateFinished = null;
  181. } // order is finished
  182. else if (ord.OrderStatus == SHOPPING_ORDER.Common.Status.PAYED && NewStatus == SHOPPING_ORDER.Common.Status.FINISHED)
  183. {
  184. // send mail to user
  185. OrderRep orep = new OrderRep();
  186. CustomerRep crep = new CustomerRep();
  187. orep.SendMailUserOrderCompleted(EM_USER.GetUserByID(ord.PageId.Value), crep.GetCustomerByID(ord.UserId), ord);
  188. ord.DateFinished = DateTime.Parse(tbDateFinished.Text);
  189. ord.ShippedDate = DateTime.Now;
  190. }// order sent by DELIVERY is finished
  191. else if (ord.OrderStatus == SHOPPING_ORDER.Common.Status.SENT_DELIVERY && NewStatus == SHOPPING_ORDER.Common.Status.FINISHED)
  192. {
  193. // set payed
  194. ord.DatePayed = DateTime.Parse(tbDateDeliveryFinished.Text);
  195. ord.Payed = true;
  196. ord.DateFinished = DateTime.Now;
  197. }// CANCEL: order was placed, but is canceled
  198. else if (ord.OrderStatus == SHOPPING_ORDER.Common.Status.CONFIRMED && NewStatus == SHOPPING_ORDER.Common.Status.CANCELED)
  199. {
  200. // reupdate stock
  201. ProductRep prep = new ProductRep();
  202. // get items
  203. var items = prep.GetCartItemList(ord.UserId, LANGUAGE.GetDefaultLang(), ord.PageId, ord.OrderID );
  204. // update stock
  205. var products = prep.GetProductsByOrder(ord.OrderID).Distinct();
  206. foreach (var item in products)
  207. {
  208. var quantity = items.Where(p => p.ProductID == item.PRODUCT_ID).Sum(s => s.Quantity);
  209. item.UNITS_IN_STOCK += quantity;
  210. }
  211. // save new stock
  212. prep.Save();
  213. }// CANCEL: order was ONLINE payed, but is CANCELED
  214. else if (ord.OrderStatus == SHOPPING_ORDER.Common.Status.ONLINE_PAYMENT_RESERVED && NewStatus == SHOPPING_ORDER.Common.Status.CANCELED)
  215. {
  216. if (ord.PaymentType == SHOPPING_ORDER.Common.PaymentType.ONLINE_e24)
  217. {
  218. OnlineE24PipeRep olr = new OnlineE24PipeRep();
  219. // get trans
  220. E24_TRAN trans = olr.GetTransByID(ord.TransIDe24.Value);
  221. if (trans == null)
  222. {
  223. // todo: set error text
  224. if (Page is SM.EM.UI.BasePage_USER_EMENIK)
  225. {
  226. SM.EM.UI.BasePage_USER_EMENIK ppuem = (SM.EM.UI.BasePage_USER_EMENIK)Page;
  227. ppuem.SetStatus("Napaka. Transakcija ne obstaja.");
  228. }
  229. return;
  230. }
  231. e24PaymentPipeLib.e24PaymentPipeCtlClass pipe = new e24PaymentPipeLib.e24PaymentPipeCtlClass();
  232. pipe.Action = OnlineE24Payment.Common.Action.VOID ;
  233. pipe.Currency = trans.Currency; // Euro
  234. pipe.Amt = String.Format(CultureInfo.GetCultureInfo("en-US").NumberFormat, "{0:f2}", trans.Amount);
  235. pipe.Language = "SLO";
  236. pipe.ResponseUrl = trans.UpdateURL; //String.Format("http://{0}/TransactionNotification.aspx?result=Success", Request.Url.Authority);
  237. pipe.ErrorUrl = trans.ErrorURL; //String.Format("http://{0}/TransactionNotification.aspx?result=Cancel", Request.Url.Authority);
  238. // store
  239. pipe.WebAddress = OnlineE24Payment.WebAddress();// "test4.constriv.com";
  240. pipe.PortStr = OnlineE24Payment.Port();// "443";
  241. pipe.Context = OnlineE24Payment.Context(); //"/cg"; //"/cg301";
  242. pipe.ID = OnlineE24Payment.ID();// "89025555";
  243. pipe.Password = OnlineE24Payment.Pass();// "test";
  244. // id
  245. pipe.PaymentId = trans.PaymentID;
  246. pipe.TrackId = trans.TrackID;
  247. pipe.TransId = trans.TranID;
  248. pipe.Udf1 = trans.TransID.ToString();
  249. pipe.Udf2 = trans.RefID.ToString();
  250. Int16 result = pipe.PerformTransaction();
  251. var RawResponse = pipe.RawResponse;
  252. var ErrorMsg = pipe.ErrorMsg;
  253. if (result != 0)
  254. { // todo: set error text
  255. if (Page is SM.EM.UI.BasePage_USER_EMENIK)
  256. {
  257. SM.EM.UI.BasePage_USER_EMENIK ppuem = (SM.EM.UI.BasePage_USER_EMENIK)Page;
  258. ppuem.SetStatus("Napaka. Napaka pri procesiranju, stornacija ni uspela. " + ErrorMsg);
  259. }
  260. return;
  261. }
  262. else
  263. {
  264. if (Page is SM.EM.UI.BasePage_USER_EMENIK)
  265. {
  266. SM.EM.UI.BasePage_USER_EMENIK ppuem = (SM.EM.UI.BasePage_USER_EMENIK)Page;
  267. ppuem.SetStatus("Stornacija je uspela!");
  268. }
  269. }
  270. }
  271. else
  272. {
  273. // mega pos service
  274. si.megapos.service.MegaposProcessorService service = new si.megapos.service.MegaposProcessorService();
  275. X509Certificate cert = X509Certificate.CreateFromCertFile(MegaPos.CertificatePath());
  276. service.ClientCertificates.Add(cert);
  277. // transaction
  278. MegaPosRep mpr = new MegaPosRep();
  279. if (ord.TransID != null)
  280. {
  281. MP_TRAN trans = mpr.GetTransByID(ord.TransID.Value);
  282. // cancel
  283. si.megapos.service.TxOperationResult initTxResult = service.cancelTx(MegaPos.Store(), trans.TxId);
  284. if (initTxResult.success != true)
  285. {
  286. // todo: set error text
  287. if (Page is SM.EM.UI.BasePage_USER_EMENIK)
  288. {
  289. SM.EM.UI.BasePage_USER_EMENIK ppuem = (SM.EM.UI.BasePage_USER_EMENIK)Page;
  290. ppuem.SetStatus("Napaka pri preklicu");
  291. }
  292. return;
  293. }
  294. }
  295. }
  296. // reupdate stock
  297. ProductRep prep = new ProductRep();
  298. // get items
  299. var items = prep.GetCartItemList(ord.UserId, LANGUAGE.GetDefaultLang(), ord.PageId, ord.OrderID );
  300. // update stock
  301. var products = prep.GetProductsByOrder(ord.OrderID).Distinct();
  302. foreach (var item in products)
  303. {
  304. var quantity = items.Where(p => p.ProductID == item.PRODUCT_ID).Sum(s => s.Quantity);
  305. item.UNITS_IN_STOCK += quantity;
  306. }
  307. // save new stock
  308. prep.Save();
  309. }
  310. else // user has payed -ONLINE -> transfer money
  311. if (ord.OrderStatus == SHOPPING_ORDER.Common.Status.ONLINE_PAYMENT_RESERVED && NewStatus == SHOPPING_ORDER.Common.Status.PAYED)
  312. {
  313. ord.DatePayed = DateTime.Now ;
  314. ord.Payed = true;
  315. if (ord.PaymentType == SHOPPING_ORDER.Common.PaymentType.ONLINE_e24)
  316. {
  317. OnlineE24PipeRep olr = new OnlineE24PipeRep();
  318. // get trans
  319. E24_TRAN trans = olr.GetTransByID(ord.TransIDe24.Value);
  320. if (trans == null)
  321. {
  322. // todo: set error text
  323. if (Page is SM.EM.UI.BasePage_USER_EMENIK)
  324. {
  325. SM.EM.UI.BasePage_USER_EMENIK ppuem = (SM.EM.UI.BasePage_USER_EMENIK)Page;
  326. ppuem.SetStatus("Napaka. Transakcija ne obstaja.");
  327. }
  328. return;
  329. }
  330. e24PaymentPipeLib.e24PaymentPipeCtlClass pipe = new e24PaymentPipeLib.e24PaymentPipeCtlClass();
  331. pipe.Action = OnlineE24Payment.Common.Action.CAPTURE ;
  332. pipe.Currency = trans.Currency; // Euro
  333. pipe.Amt = String.Format(CultureInfo.GetCultureInfo("en-US").NumberFormat, "{0:f2}", trans.Amount);
  334. pipe.Language = "SLO";
  335. pipe.ResponseUrl = trans.UpdateURL; //String.Format("http://{0}/TransactionNotification.aspx?result=Success", Request.Url.Authority);
  336. pipe.ErrorUrl = trans.ErrorURL; //String.Format("http://{0}/TransactionNotification.aspx?result=Cancel", Request.Url.Authority);
  337. // store
  338. pipe.WebAddress = OnlineE24Payment.WebAddress();// "test4.constriv.com";
  339. pipe.PortStr = OnlineE24Payment.Port();// "443";
  340. pipe.Context = OnlineE24Payment.Context(); //"/cg"; //"/cg301";
  341. pipe.ID = OnlineE24Payment.ID();// "89025555";
  342. pipe.Password = OnlineE24Payment.Pass();// "test";
  343. // id
  344. pipe.PaymentId = trans.PaymentID ;
  345. pipe.TrackId = trans.TrackID;
  346. pipe.TransId = trans.TranID;
  347. pipe.Udf1 = trans.TransID.ToString();
  348. pipe.Udf2 = trans.RefID.ToString();
  349. Int16 result = pipe.PerformTransaction();
  350. var RawResponse = pipe.RawResponse;
  351. var ErrorMsg = pipe.ErrorMsg;
  352. if (result != 0)
  353. { // todo: set error text
  354. if (Page is SM.EM.UI.BasePage_USER_EMENIK)
  355. {
  356. SM.EM.UI.BasePage_USER_EMENIK ppuem = (SM.EM.UI.BasePage_USER_EMENIK)Page;
  357. ppuem.SetStatus("Napaka. Napaka pri procesiranju, plačilo ni uspelo. " + ErrorMsg);
  358. }
  359. return;
  360. }
  361. else {
  362. if (Page is SM.EM.UI.BasePage_USER_EMENIK)
  363. {
  364. SM.EM.UI.BasePage_USER_EMENIK ppuem = (SM.EM.UI.BasePage_USER_EMENIK)Page;
  365. ppuem.SetStatus("Plačilo je uspelo!");
  366. }
  367. }
  368. }
  369. else {
  370. // transfer money!!
  371. // mega pos service
  372. si.megapos.service.MegaposProcessorService service = new si.megapos.service.MegaposProcessorService();
  373. X509Certificate cert = X509Certificate.CreateFromCertFile(MegaPos.CertificatePath());
  374. service.ClientCertificates.Add(cert);
  375. // transaction
  376. MegaPosRep mpr = new MegaPosRep();
  377. if (ord.TransID != null)
  378. {
  379. MP_TRAN trans = mpr.GetTransByID(ord.TransID.Value);
  380. // cancel
  381. si.megapos.service.TxOperationResult initTxResult = service.processOrder(MegaPos.Store(), trans.TxId, null);
  382. if (initTxResult.success != true)
  383. {
  384. // todo: set error text
  385. if (Page is SM.EM.UI.BasePage_USER_EMENIK)
  386. {
  387. SM.EM.UI.BasePage_USER_EMENIK ppuem = (SM.EM.UI.BasePage_USER_EMENIK)Page;
  388. ppuem.SetStatus("Napaka pri prenašanju");
  389. }
  390. return;
  391. }
  392. }
  393. }
  394. // set user payed, calculate new date valid
  395. //EM_USER.UpdateUserPayment(ord.UserId, ord.TotalWithTax.Value , PAYMENT.Common.PaymentType.Payment, "", Page.User.Identity.Name, ord.OrderID);
  396. // set tickets are active
  397. //SHOPPING_ORDER.UpdateOrderTicketsActive(OrderID, true);
  398. }
  399. ord.OrderStatus = NewStatus;
  400. // save
  401. db.SubmitChanges();
  402. // raise changed event
  403. OnUserChanged (this, new EventArgs());
  404. }
  405. // GROUP
  406. //protected void btSave_Click(object sender, EventArgs e)
  407. //{
  408. // Save();
  409. //}
  410. protected void btCancel_Click(object sender, EventArgs e)
  411. {
  412. //this.Visible = false;
  413. OnCancel(this, new EventArgs());
  414. // remove status text
  415. ParentPage.mp.StatusText = "";
  416. }
  417. protected void btSetPayed_Click(object sender, EventArgs e)
  418. {
  419. NewStatus = SHOPPING_ORDER.Common.Status.PAYED;
  420. // validation
  421. Page.Validate("ordredit");
  422. if (!Page.IsValid) return;
  423. Save();
  424. }
  425. protected void btSetPayedOnline_Click(object sender, EventArgs e)
  426. {
  427. NewStatus = SHOPPING_ORDER.Common.Status.PAYED;
  428. // validation
  429. Page.Validate("ordredit");
  430. if (!Page.IsValid) return;
  431. Save();
  432. }
  433. protected void btDeliverySend_Click(object sender, EventArgs e)
  434. {
  435. NewStatus = SHOPPING_ORDER.Common.Status.SENT_DELIVERY ;
  436. // validation
  437. Page.Validate("ordredit");
  438. if (!Page.IsValid) return;
  439. Save();
  440. }
  441. protected void btSetFinished_Click(object sender, EventArgs e)
  442. {
  443. NewStatus = SHOPPING_ORDER.Common.Status.FINISHED;
  444. // validation
  445. Page.Validate("ordreditFIN");
  446. if (!Page.IsValid) return;
  447. Save();
  448. }
  449. protected void btDeliveryFinished_Click(object sender, EventArgs e)
  450. {
  451. NewStatus = SHOPPING_ORDER.Common.Status.FINISHED;
  452. // validation
  453. Page.Validate("ordreditDEl_FIN");
  454. if (!Page.IsValid) return;
  455. Save();
  456. }
  457. protected void btSetPayedBack_Click(object sender, EventArgs e)
  458. {
  459. NewStatus = SHOPPING_ORDER.Common.Status.PAYED;
  460. // validation
  461. Page.Validate("ordredit");
  462. if (!Page.IsValid) return;
  463. Save();
  464. }
  465. protected void btCancelOrder_Click(object sender, EventArgs e)
  466. {
  467. NewStatus = SHOPPING_ORDER.Common.Status.CANCELED;
  468. Save();
  469. }
  470. }
  471. }