/src/mpv5/webshopinterface/wsdjobs/newOrdersJob.java

http://mp-rechnungs-und-kundenverwaltung.googlecode.com/ · Java · 199 lines · 137 code · 34 blank · 28 comment · 10 complexity · 16fcf2afef25e478075b31e7c1a1dd61 MD5 · raw file

  1. /*
  2. * This file is part of YaBS.
  3. *
  4. * YaBS is free software: you can redistribute it and/or modify
  5. * it under the terms of the GNU General Public License as published by
  6. * the Free Software Foundation, either version 3 of the License, or
  7. * (at your option) any later version.
  8. *
  9. * YaBS is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. * GNU General Public License for more details.
  13. *
  14. * You should have received a copy of the GNU General Public License
  15. * along with YaBS. If not, see <http://www.gnu.org/licenses/>.
  16. */
  17. package mpv5.webshopinterface.wsdjobs;
  18. //~--- non-JDK imports --------------------------------------------------------
  19. import mpv5.db.common.Context;
  20. import mpv5.db.common.DatabaseObject;
  21. import mpv5.db.common.NodataFoundException;
  22. import mpv5.db.objects.Contact;
  23. import mpv5.db.objects.Item;
  24. import mpv5.db.objects.SubItem;
  25. import mpv5.db.objects.WSContactsMapping;
  26. import mpv5.db.objects.WSItemsMapping;
  27. import mpv5.globals.Messages;
  28. import mpv5.logging.Log;
  29. import mpv5.ui.dialogs.Popup;
  30. import mpv5.ui.frames.MPView;
  31. import mpv5.webshopinterface.WSConnectionClient;
  32. import mpv5.webshopinterface.WSDaemon;
  33. import mpv5.webshopinterface.WSDaemonJob;
  34. import mpv5.webshopinterface.WSIManager;
  35. import org.apache.xmlrpc.XmlRpcException;
  36. //~--- JDK imports ------------------------------------------------------------
  37. import java.util.Date;
  38. import java.util.List;
  39. import java.util.Vector;
  40. import java.util.logging.Level;
  41. import java.util.logging.Logger;
  42. /**
  43. * This job tries to fetch new orders
  44. */
  45. public class newOrdersJob implements WSDaemonJob {
  46. private final WSDaemon daemon;
  47. /**
  48. * Create a new job
  49. * @param ddaemon
  50. */
  51. public newOrdersJob(WSDaemon ddaemon) {
  52. this.daemon = ddaemon;
  53. }
  54. @Override
  55. public boolean isOneTimeJob() {
  56. return false;
  57. }
  58. @Override
  59. public boolean isDone() {
  60. return false;
  61. }
  62. @Override
  63. public void work(WSConnectionClient client) {
  64. WSContactsMapping md;
  65. Contact c;
  66. List<Item> savedOrders = new Vector<Item>();
  67. try {
  68. Object itd = WSItemsMapping.getLastWsID(daemon.getWebShop());
  69. Object d = client.getClient().invokeGetCommand(WSConnectionClient.COMMANDS.GET_NEW_ORDERS.toString(),
  70. new Object[]{itd}, new Object());
  71. List<Item> obs = WSIManager.createObjects(d, new Item());
  72. for (Item order : obs) {
  73. int id = order.__getContactsids();
  74. if (id == -1) { // Guestaccount
  75. Object d2 = client.getClient().invokeGetCommand(WSConnectionClient.COMMANDS.GET_CONTACT.toString(),
  76. new Object[]{order.__getIDS(),
  77. Boolean.FALSE}, new Object());
  78. List<Contact> obs2 = WSIManager.createObjects(d2, new Contact());
  79. c = obs2.get(0);
  80. c.setNotes(c.__getNotes() + "\nAuto generated guest account for webshop: "
  81. + daemon.getWebShop().__getCname());
  82. c.setMailaddress("NO-MAILS " + c.__getMailaddress());
  83. c.setGroupsids(daemon.getWebShop().__getGroupsids());
  84. c.saveImport();
  85. } else {
  86. try { // Look the contact up
  87. md = (WSContactsMapping) WSContactsMapping.getObject(Context.getWebShopContactMapping(),
  88. String.valueOf(id) + "@" + daemon.getWebShopID());
  89. try {
  90. c = (Contact) DatabaseObject.getObject(Context.getContact(), md.__getContactsids());
  91. } catch (NodataFoundException nodataFoundException) {
  92. throw new UnsupportedOperationException("Invalid contact mapping found: " + md);
  93. }
  94. } catch (NodataFoundException ex) {
  95. // Not yet created
  96. Object d2 =
  97. client.getClient().invokeGetCommand(WSConnectionClient.COMMANDS.GET_CONTACT.toString(),
  98. new Object[]{id,
  99. Boolean.TRUE}, new Object());
  100. List<Contact> obs2 = WSIManager.createObjects(d2, new Contact());
  101. c = obs2.get(0);
  102. c.setGroupsids(daemon.getWebShop().__getGroupsids());
  103. c.saveImport();
  104. md = new WSContactsMapping();
  105. md.setContactsids(c.__getIDS());
  106. md.setWscontact(String.valueOf(id));
  107. md.setCname(String.valueOf(id) + "@" + daemon.getWebShopID());
  108. md.setWebshopsids(daemon.getWebShopID());
  109. md.setGroupsids(mpv5.db.objects.User.getCurrentUser().__getGroupsids());
  110. md.save();
  111. }
  112. }
  113. int wsitemids = order.__getIDS();
  114. order.setContactsids(c.__getIDS());
  115. order.setDescription(order.__getDescription() + "\nImport: " + daemon.getWebShop());
  116. order.setGroupsids(daemon.getWebShop().__getGroupsids());
  117. order.save();
  118. savedOrders.add(order);
  119. WSItemsMapping m = new WSItemsMapping();
  120. m.setItemsids(order.__getIDS());
  121. m.setWsitem(String.valueOf(wsitemids));
  122. m.setCname(String.valueOf(order.__getIDS() + "@" + daemon.getWebShopID()));
  123. m.setWebshopsids(daemon.getWebShopID());
  124. m.setGroupsids(mpv5.db.objects.User.getCurrentUser().__getGroupsids());
  125. m.saveImport();
  126. // Fetch the order details
  127. Object da = client.getClient().invokeGetCommand(WSConnectionClient.COMMANDS.GET_ORDER_ROWS.toString(),
  128. new Object[]{String.valueOf(wsitemids)}, new Object());
  129. List<SubItem> aobs = WSIManager.createObjects(da, new SubItem());
  130. for (SubItem orderRow : aobs) {
  131. try {
  132. WSItemsMapping mk = (WSItemsMapping) DatabaseObject.getObject(Context.getWebShopItemMapping(),
  133. String.valueOf(orderRow.__getItemsids()));
  134. orderRow.setItemsids(mk.__getItemsids());
  135. orderRow.setGroupsids(daemon.getWebShop().__getGroupsids());
  136. orderRow.saveImport();
  137. } catch (NodataFoundException ex) {
  138. Log.Debug(ex);
  139. }
  140. }
  141. }
  142. if (obs.size() > 0) {
  143. mpv5.YabsViewProxy.instance().addMessage(obs.size() + " " + Messages.ORDERS_RECEIVED + " " + daemon.getWebShop());
  144. if (Popup.Y_N_dialog(obs.size() + " " + Messages.ORDERS_RECEIVED + " " + daemon.getWebShop() + "\n"
  145. + Messages.LOAD_NOW)) {
  146. for (Item s : savedOrders) {
  147. try {
  148. mpv5.YabsViewProxy.instance().getIdentifierView().addTab(DatabaseObject.getObject(Context.getItem(),
  149. s.__getIDS()));
  150. } catch (NodataFoundException ex) {
  151. Log.Debug(ex); // Something must have failed during the import process
  152. Popup.error(ex);
  153. }
  154. }
  155. }
  156. }
  157. } catch (XmlRpcException ex) {
  158. Log.Debug(this, ex.getMessage());
  159. if (Log.getLoglevel() == Log.LOGLEVEL_DEBUG) {
  160. Popup.error(ex);
  161. }
  162. }
  163. }
  164. }
  165. //~ Formatted by Jindent --- http://www.jindent.com