1
22
23 package com.liferay.portlet.shopping.service.impl;
24
25 import com.liferay.counter.service.CounterLocalServiceUtil;
26 import com.liferay.mail.service.MailServiceUtil;
27 import com.liferay.portal.PortalException;
28 import com.liferay.portal.SystemException;
29 import com.liferay.portal.kernel.mail.MailMessage;
30 import com.liferay.portal.kernel.util.GetterUtil;
31 import com.liferay.portal.kernel.util.StringUtil;
32 import com.liferay.portal.kernel.util.Validator;
33 import com.liferay.portal.model.Company;
34 import com.liferay.portal.model.User;
35 import com.liferay.portal.service.persistence.CompanyUtil;
36 import com.liferay.portal.service.persistence.UserUtil;
37 import com.liferay.portal.util.PortalUtil;
38 import com.liferay.portal.util.PortletKeys;
39 import com.liferay.portlet.messageboards.service.MBMessageLocalServiceUtil;
40 import com.liferay.portlet.shopping.BillingCityException;
41 import com.liferay.portlet.shopping.BillingCountryException;
42 import com.liferay.portlet.shopping.BillingEmailAddressException;
43 import com.liferay.portlet.shopping.BillingFirstNameException;
44 import com.liferay.portlet.shopping.BillingLastNameException;
45 import com.liferay.portlet.shopping.BillingPhoneException;
46 import com.liferay.portlet.shopping.BillingStateException;
47 import com.liferay.portlet.shopping.BillingStreetException;
48 import com.liferay.portlet.shopping.BillingZipException;
49 import com.liferay.portlet.shopping.CCExpirationException;
50 import com.liferay.portlet.shopping.CCNameException;
51 import com.liferay.portlet.shopping.CCNumberException;
52 import com.liferay.portlet.shopping.CCTypeException;
53 import com.liferay.portlet.shopping.CartMinOrderException;
54 import com.liferay.portlet.shopping.NoSuchOrderException;
55 import com.liferay.portlet.shopping.ShippingCityException;
56 import com.liferay.portlet.shopping.ShippingCountryException;
57 import com.liferay.portlet.shopping.ShippingEmailAddressException;
58 import com.liferay.portlet.shopping.ShippingFirstNameException;
59 import com.liferay.portlet.shopping.ShippingLastNameException;
60 import com.liferay.portlet.shopping.ShippingPhoneException;
61 import com.liferay.portlet.shopping.ShippingStateException;
62 import com.liferay.portlet.shopping.ShippingStreetException;
63 import com.liferay.portlet.shopping.ShippingZipException;
64 import com.liferay.portlet.shopping.model.ShoppingCart;
65 import com.liferay.portlet.shopping.model.ShoppingCartItem;
66 import com.liferay.portlet.shopping.model.ShoppingItem;
67 import com.liferay.portlet.shopping.model.ShoppingItemField;
68 import com.liferay.portlet.shopping.model.ShoppingOrder;
69 import com.liferay.portlet.shopping.model.ShoppingOrderItem;
70 import com.liferay.portlet.shopping.model.impl.ShoppingCartItemImpl;
71 import com.liferay.portlet.shopping.model.impl.ShoppingOrderImpl;
72 import com.liferay.portlet.shopping.service.ShoppingItemFieldLocalServiceUtil;
73 import com.liferay.portlet.shopping.service.ShoppingItemLocalServiceUtil;
74 import com.liferay.portlet.shopping.service.ShoppingOrderItemLocalServiceUtil;
75 import com.liferay.portlet.shopping.service.base.ShoppingOrderLocalServiceBaseImpl;
76 import com.liferay.portlet.shopping.service.persistence.ShoppingItemUtil;
77 import com.liferay.portlet.shopping.service.persistence.ShoppingOrderFinder;
78 import com.liferay.portlet.shopping.service.persistence.ShoppingOrderItemUtil;
79 import com.liferay.portlet.shopping.service.persistence.ShoppingOrderUtil;
80 import com.liferay.portlet.shopping.util.ShoppingPreferences;
81 import com.liferay.portlet.shopping.util.ShoppingUtil;
82 import com.liferay.portlet.shopping.util.comparator.OrderDateComparator;
83 import com.liferay.util.CreditCard;
84 import com.liferay.util.PwdGenerator;
85 import com.liferay.util.cal.CalendarUtil;
86
87 import java.io.IOException;
88
89 import java.util.Currency;
90 import java.util.Date;
91 import java.util.Iterator;
92 import java.util.List;
93 import java.util.Map;
94
95 import javax.mail.internet.InternetAddress;
96
97
104 public class ShoppingOrderLocalServiceImpl
105 extends ShoppingOrderLocalServiceBaseImpl {
106
107 public void completeOrder(
108 String number, String ppTxnId, String ppPaymentStatus,
109 double ppPaymentGross, String ppReceiverEmail, String ppPayerEmail,
110 boolean updateInventory)
111 throws PortalException, SystemException {
112
113
115 ShoppingOrder order = ShoppingOrderUtil.findByNumber(number);
116
117 order.setModifiedDate(new Date());
118 order.setPpTxnId(ppTxnId);
119 order.setPpPaymentStatus(ppPaymentStatus);
120 order.setPpPaymentGross(ppPaymentGross);
121 order.setPpReceiverEmail(ppReceiverEmail);
122 order.setPpPayerEmail(ppPayerEmail);
123
124 ShoppingOrderUtil.update(order);
125
126
128 if (updateInventory &&
129 ppPaymentStatus.equals(ShoppingOrderImpl.STATUS_COMPLETED)) {
130
131 List orderItems = ShoppingOrderItemLocalServiceUtil.getOrderItems(
132 order.getOrderId());
133
134 for (int i = 0; i < orderItems.size(); i++) {
135 ShoppingOrderItem orderItem =
136 (ShoppingOrderItem)orderItems.get(i);
137
138 ShoppingItem item = ShoppingItemLocalServiceUtil.getItem(
139 ShoppingUtil.getItemId(orderItem.getItemId()));
140
141 if (!item.isFields()) {
142 int quantity =
143 item.getStockQuantity() - orderItem.getQuantity();
144
145 item.setStockQuantity(quantity);
146 }
147 else {
148 List itemFields =
149 ShoppingItemFieldLocalServiceUtil.getItemFields(
150 item.getItemId());
151
152 ShoppingItemField[] itemFieldsArray =
153 (ShoppingItemField[])itemFields.toArray(
154 new ShoppingItemField[0]);
155
156 String[] fieldsArray = ShoppingCartItemImpl.getFieldsArray(
157 ShoppingUtil.getItemFields(orderItem.getItemId()));
158
159 int rowPos = ShoppingUtil.getFieldsQuantitiesPos(
160 item, itemFieldsArray, fieldsArray);
161
162 String[] fieldsQuantities = item.getFieldsQuantitiesArray();
163
164 try {
165 int quantity =
166 GetterUtil.getInteger(fieldsQuantities[rowPos]) -
167 orderItem.getQuantity();
168
169 fieldsQuantities[rowPos] = Integer.toString(quantity);
170
171 item.setFieldsQuantitiesArray(fieldsQuantities);
172 }
173 catch (Exception e) {
174 }
175 }
176
177 ShoppingItemUtil.update(item);
178 }
179 }
180
181
183 sendEmail(order, "confirmation");
184 }
185
186 public void deleteOrder(long orderId)
187 throws PortalException, SystemException {
188
189 ShoppingOrder order = ShoppingOrderUtil.findByPrimaryKey(orderId);
190
191 deleteOrder(order);
192 }
193
194 public void deleteOrder(ShoppingOrder order)
195 throws PortalException, SystemException {
196
197
199 ShoppingOrderItemUtil.removeByOrderId(order.getOrderId());
200
201
203 MBMessageLocalServiceUtil.deleteDiscussionMessages(
204 ShoppingOrder.class.getName(), order.getOrderId());
205
206
208 ShoppingOrderUtil.remove(order.getOrderId());
209 }
210
211 public ShoppingOrder getLatestOrder(long userId, long groupId)
212 throws PortalException, SystemException {
213
214 List orders = ShoppingOrderUtil.findByG_U_PPPS(
215 groupId, userId, ShoppingOrderImpl.STATUS_LATEST, 0, 1);
216
217 ShoppingOrder order = null;
218
219 if (orders.size() == 1) {
220 order = (ShoppingOrder)orders.get(0);
221 }
222 else {
223 User user = UserUtil.findByPrimaryKey(userId);
224 Date now = new Date();
225
226 String number = getNumber();
227
228 List pastOrders = ShoppingOrderUtil.findByG_U_PPPS(
229 groupId, userId, ShoppingOrderImpl.STATUS_CHECKOUT, 0, 1);
230
231 if (pastOrders.size() > 0) {
232 ShoppingOrder pastOrder = (ShoppingOrder)pastOrders.get(0);
233
234 long orderId = CounterLocalServiceUtil.increment();
235
236 order = ShoppingOrderUtil.create(orderId);
237
238 order.setBillingCompany(pastOrder.getBillingCompany());
239 order.setBillingStreet(pastOrder.getBillingStreet());
240 order.setBillingCity(pastOrder.getBillingCity());
241 order.setBillingState(pastOrder.getBillingState());
242 order.setBillingZip(pastOrder.getBillingZip());
243 order.setBillingCountry(pastOrder.getBillingCountry());
244 order.setBillingPhone(pastOrder.getBillingPhone());
245 order.setShipToBilling(pastOrder.isShipToBilling());
246 order.setShippingCompany(pastOrder.getShippingCompany());
247 order.setShippingStreet(pastOrder.getShippingStreet());
248 order.setShippingCity(pastOrder.getShippingCity());
249 order.setShippingState(pastOrder.getShippingState());
250 order.setShippingZip(pastOrder.getShippingZip());
251 order.setShippingCountry(pastOrder.getShippingCountry());
252 order.setShippingPhone(pastOrder.getShippingPhone());
253 }
254 else {
255 long orderId = CounterLocalServiceUtil.increment();
256
257 order = ShoppingOrderUtil.create(orderId);
258 }
259
260 order.setGroupId(groupId);
261 order.setCompanyId(user.getCompanyId());
262 order.setUserId(user.getUserId());
263 order.setUserName(user.getFullName());
264 order.setCreateDate(now);
265 order.setModifiedDate(now);
266 order.setNumber(number);
267 order.setBillingFirstName(user.getFirstName());
268 order.setBillingLastName(user.getLastName());
269 order.setBillingEmailAddress(user.getEmailAddress());
270 order.setShippingFirstName(user.getFirstName());
271 order.setShippingLastName(user.getLastName());
272 order.setShippingEmailAddress(user.getEmailAddress());
273 order.setCcName(user.getFullName());
274 order.setPpPaymentStatus(ShoppingOrderImpl.STATUS_LATEST);
275 order.setSendOrderEmail(true);
276 order.setSendShippingEmail(true);
277
278 ShoppingOrderUtil.update(order);
279 }
280
281 return order;
282 }
283
284 public ShoppingOrder getOrder(long orderId)
285 throws PortalException, SystemException {
286
287 return ShoppingOrderUtil.findByPrimaryKey(orderId);
288 }
289
290 public ShoppingOrder getOrder(String number)
291 throws PortalException, SystemException {
292
293 return ShoppingOrderUtil.findByNumber(number);
294 }
295
296 public ShoppingOrder saveLatestOrder(ShoppingCart cart)
297 throws PortalException, SystemException {
298
299 Map items = cart.getItems();
300 Date now = new Date();
301
302 ShoppingPreferences shoppingPrefs = ShoppingPreferences.getInstance(
303 cart.getCompanyId(), cart.getGroupId());
304
305 if (!ShoppingUtil.meetsMinOrder(shoppingPrefs, items)) {
306 throw new CartMinOrderException();
307 }
308
309 ShoppingOrder order = getLatestOrder(
310 cart.getUserId(), cart.getGroupId());
311
312 order.setCreateDate(now);
313 order.setModifiedDate(now);
314 order.setPpPaymentStatus(ShoppingOrderImpl.STATUS_CHECKOUT);
315
316 ShoppingOrderUtil.update(order);
317
318 boolean requiresShipping = false;
319
320 Iterator itr = items.entrySet().iterator();
321
322 while (itr.hasNext()) {
323 Map.Entry entry = (Map.Entry)itr.next();
324
325 ShoppingCartItem cartItem = (ShoppingCartItem)entry.getKey();
326 Integer count = (Integer)entry.getValue();
327
328 ShoppingItem item = cartItem.getItem();
329
330 if (item.isRequiresShipping()) {
331 requiresShipping = true;
332 }
333
334 long orderItemId = CounterLocalServiceUtil.increment();
335
336 ShoppingOrderItem orderItem =
337 ShoppingOrderItemUtil.create(orderItemId);
338
339 orderItem.setOrderId(order.getOrderId());
340 orderItem.setItemId(cartItem.getCartItemId());
341 orderItem.setSku(item.getSku());
342 orderItem.setName(item.getName());
343 orderItem.setDescription(item.getDescription());
344 orderItem.setProperties(item.getProperties());
345 orderItem.setPrice(
346 ShoppingUtil.calculateActualPrice(item, count.intValue()) /
347 count.intValue());
348 orderItem.setQuantity(count.intValue());
349
350 ShoppingOrderItemUtil.update(orderItem);
351 }
352
353 order.setModifiedDate(new Date());
354 order.setTax(
355 ShoppingUtil.calculateTax(items, order.getBillingState()));
356 order.setShipping(
357 ShoppingUtil.calculateAlternativeShipping(
358 items, cart.getAltShipping()));
359 order.setAltShipping(
360 shoppingPrefs.getAlternativeShippingName(cart.getAltShipping()));
361 order.setRequiresShipping(requiresShipping);
362 order.setInsure(cart.isInsure());
363 order.setInsurance(ShoppingUtil.calculateInsurance(items));
364 order.setCouponCodes(cart.getCouponCodes());
365 order.setCouponDiscount(
366 ShoppingUtil.calculateCouponDiscount(
367 items, order.getBillingState(), cart.getCoupon()));
368 order.setSendOrderEmail(true);
369 order.setSendShippingEmail(true);
370
371 ShoppingOrderUtil.update(order);
372
373 return order;
374 }
375
376 public List search(
377 long groupId, long companyId, long userId, String number,
378 String billingFirstName, String billingLastName,
379 String billingEmailAddress, String shippingFirstName,
380 String shippingLastName, String shippingEmailAddress,
381 String ppPaymentStatus, boolean andOperator, int begin, int end)
382 throws PortalException, SystemException {
383
384 OrderDateComparator obc = new OrderDateComparator(false);
385
386 return ShoppingOrderFinder.findByG_C_U_N_PPPS(
387 groupId, companyId, userId, number, billingFirstName,
388 billingLastName, billingEmailAddress, shippingFirstName,
389 shippingLastName, shippingEmailAddress, ppPaymentStatus,
390 andOperator, begin, end, obc);
391 }
392
393 public int searchCount(
394 long groupId, long companyId, long userId, String number,
395 String billingFirstName, String billingLastName,
396 String billingEmailAddress, String shippingFirstName,
397 String shippingLastName, String shippingEmailAddress,
398 String ppPaymentStatus, boolean andOperator)
399 throws PortalException, SystemException {
400
401 return ShoppingOrderFinder.countByG_C_U_N_PPPS(
402 groupId, companyId, userId, number, billingFirstName,
403 billingLastName, billingEmailAddress, shippingFirstName,
404 shippingLastName, shippingEmailAddress, ppPaymentStatus,
405 andOperator);
406 }
407
408 public void sendEmail(long orderId, String emailType)
409 throws PortalException, SystemException {
410
411 ShoppingOrder order = ShoppingOrderUtil.findByPrimaryKey(orderId);
412
413 sendEmail(order, emailType);
414 }
415
416 public void sendEmail(ShoppingOrder order, String emailType)
417 throws PortalException, SystemException {
418
419 try {
420 ShoppingPreferences shoppingPrefs =
421 ShoppingPreferences.getInstance(
422 order.getCompanyId(), order.getGroupId());
423
424 if (emailType.equals("confirmation") &&
425 shoppingPrefs.getEmailOrderConfirmationEnabled()) {
426 }
427 else if (emailType.equals("shipping") &&
428 shoppingPrefs.getEmailOrderShippingEnabled()) {
429 }
430 else {
431 return;
432 }
433
434 Company company = CompanyUtil.findByPrimaryKey(
435 order.getCompanyId());
436
437 User user = UserUtil.findByPrimaryKey(order.getUserId());
438
439 Currency currency =
440 Currency.getInstance(shoppingPrefs.getCurrencyId());
441
442 String billingAddress =
443 order.getBillingFirstName() + " " + order.getBillingLastName() +
444 "<br>" +
445 order.getBillingEmailAddress() + "<br>" +
446 order.getBillingStreet() + "<br>" +
447 order.getBillingCity() + "<br>" +
448 order.getBillingState() + "<br>" +
449 order.getBillingZip() + "<br>" +
450 order.getBillingCountry() + "<br>" +
451 order.getBillingPhone() + "<br>";
452
453 String shippingAddress =
454 order.getShippingFirstName() + " " +
455 order.getShippingLastName() + "<br>" +
456 order.getShippingEmailAddress() + "<br>" +
457 order.getShippingStreet() + "<br>" +
458 order.getShippingCity() + "<br>" +
459 order.getShippingState() + "<br>" +
460 order.getShippingZip() + "<br>" +
461 order.getShippingCountry() + "<br>" +
462 order.getShippingPhone() + "<br>";
463
464 double total = ShoppingUtil.calculateTotal(order);
465
466 String portletName = PortalUtil.getPortletTitle(
467 PortletKeys.SHOPPING, user);
468
469 String fromName = shoppingPrefs.getEmailFromName();
470 String fromAddress = shoppingPrefs.getEmailFromAddress();
471
472 String toName = user.getFullName();
473 String toAddress = user.getEmailAddress();
474
475 String subject = null;
476 String body = null;
477
478 if (emailType.equals("confirmation")) {
479 subject = shoppingPrefs.getEmailOrderConfirmationSubject();
480 body = shoppingPrefs.getEmailOrderConfirmationBody();
481 }
482 else if (emailType.equals("shipping")) {
483 subject = shoppingPrefs.getEmailOrderShippingSubject();
484 body = shoppingPrefs.getEmailOrderShippingBody();
485 }
486
487 subject = StringUtil.replace(
488 subject,
489 new String[] {
490 "[$FROM_ADDRESS$]",
491 "[$FROM_NAME$]",
492 "[$ORDER_BILLING_ADDRESS$]",
493 "[$ORDER_CURRENCY$]",
494 "[$ORDER_NUMBER$]",
495 "[$ORDER_SHIPPING_ADDRESS$]",
496 "[$ORDER_TOTAL$]",
497 "[$PORTAL_URL$]",
498 "[$PORTLET_NAME$]",
499 "[$TO_ADDRESS$]",
500 "[$TO_NAME$]"
501 },
502 new String[] {
503 fromAddress,
504 fromName,
505 billingAddress,
506 currency.getSymbol(),
507 order.getNumber(),
508 shippingAddress,
509 String.valueOf(total),
510 company.getVirtualHost(),
511 portletName,
512 toAddress,
513 toName
514 });
515
516 body = StringUtil.replace(
517 body,
518 new String[] {
519 "[$FROM_ADDRESS$]",
520 "[$FROM_NAME$]",
521 "[$ORDER_BILLING_ADDRESS$]",
522 "[$ORDER_CURRENCY$]",
523 "[$ORDER_NUMBER$]",
524 "[$ORDER_SHIPPING_ADDRESS$]",
525 "[$ORDER_TOTAL$]",
526 "[$PORTAL_URL$]",
527 "[$PORTLET_NAME$]",
528 "[$TO_ADDRESS$]",
529 "[$TO_NAME$]"
530 },
531 new String[] {
532 fromAddress,
533 fromName,
534 billingAddress,
535 currency.getSymbol(),
536 order.getNumber(),
537 shippingAddress,
538 String.valueOf(total),
539 company.getVirtualHost(),
540 portletName,
541 toAddress,
542 toName
543 });
544
545 InternetAddress from = new InternetAddress(fromAddress, fromName);
546
547 InternetAddress to = new InternetAddress(toAddress, toName);
548
549 MailMessage message = new MailMessage(
550 from, to, subject, body, true);
551
552 MailServiceUtil.sendEmail(message);
553
554 if (emailType.equals("confirmation") && order.isSendOrderEmail()) {
555 order.setSendOrderEmail(false);
556
557 ShoppingOrderUtil.update(order);
558 }
559 else if (emailType.equals("shipping") &&
560 order.isSendShippingEmail()) {
561
562 order.setSendShippingEmail(false);
563
564 ShoppingOrderUtil.update(order);
565 }
566 }
567 catch (IOException ioe) {
568 throw new SystemException(ioe);
569 }
570 catch (PortalException pe) {
571 throw pe;
572 }
573 }
574
575 public ShoppingOrder updateLatestOrder(
576 long userId, long groupId, String billingFirstName,
577 String billingLastName, String billingEmailAddress,
578 String billingCompany, String billingStreet, String billingCity,
579 String billingState, String billingZip, String billingCountry,
580 String billingPhone, boolean shipToBilling,
581 String shippingFirstName, String shippingLastName,
582 String shippingEmailAddress, String shippingCompany,
583 String shippingStreet, String shippingCity, String shippingState,
584 String shippingZip, String shippingCountry, String shippingPhone,
585 String ccName, String ccType, String ccNumber, int ccExpMonth,
586 int ccExpYear, String ccVerNumber, String comments)
587 throws PortalException, SystemException {
588
589 ShoppingOrder order = getLatestOrder(userId, groupId);
590
591 return updateOrder(
592 order.getOrderId(), billingFirstName, billingLastName,
593 billingEmailAddress, billingCompany, billingStreet, billingCity,
594 billingState, billingZip, billingCountry, billingPhone,
595 shipToBilling, shippingFirstName, shippingLastName,
596 shippingEmailAddress, shippingCompany, shippingStreet, shippingCity,
597 shippingState, shippingZip, shippingCountry, shippingPhone,
598 ccName, ccType, ccNumber, ccExpMonth, ccExpYear, ccVerNumber,
599 comments);
600 }
601
602 public ShoppingOrder updateOrder(
603 long orderId, String billingFirstName, String billingLastName,
604 String billingEmailAddress, String billingCompany,
605 String billingStreet, String billingCity, String billingState,
606 String billingZip, String billingCountry, String billingPhone,
607 boolean shipToBilling, String shippingFirstName,
608 String shippingLastName, String shippingEmailAddress,
609 String shippingCompany, String shippingStreet, String shippingCity,
610 String shippingState, String shippingZip, String shippingCountry,
611 String shippingPhone, String ccName, String ccType, String ccNumber,
612 int ccExpMonth, int ccExpYear, String ccVerNumber, String comments)
613 throws PortalException, SystemException {
614
615 ShoppingOrder order = ShoppingOrderUtil.findByPrimaryKey(orderId);
616
617 ShoppingPreferences shoppingPrefs = ShoppingPreferences.getInstance(
618 order.getCompanyId(), order.getGroupId());
619
620 validate(
621 shoppingPrefs, billingFirstName, billingLastName,
622 billingEmailAddress, billingStreet, billingCity, billingState,
623 billingZip, billingCountry, billingPhone, shipToBilling,
624 shippingFirstName, shippingLastName, shippingEmailAddress,
625 shippingStreet, shippingCity, shippingState, shippingZip,
626 shippingCountry, shippingPhone, ccName, ccType, ccNumber,
627 ccExpMonth, ccExpYear, ccVerNumber);
628
629 order.setModifiedDate(new Date());
630 order.setBillingFirstName(billingFirstName);
631 order.setBillingLastName(billingLastName);
632 order.setBillingEmailAddress(billingEmailAddress);
633 order.setBillingCompany(billingCompany);
634 order.setBillingStreet(billingStreet);
635 order.setBillingCity(billingCity);
636 order.setBillingState(billingState);
637 order.setBillingZip(billingZip);
638 order.setBillingCountry(billingCountry);
639 order.setBillingPhone(billingPhone);
640 order.setShipToBilling(shipToBilling);
641
642 if (shipToBilling) {
643 order.setShippingFirstName(billingFirstName);
644 order.setShippingLastName(billingLastName);
645 order.setShippingEmailAddress(billingEmailAddress);
646 order.setShippingCompany(billingCompany);
647 order.setShippingStreet(billingStreet);
648 order.setShippingCity(billingCity);
649 order.setShippingState(billingState);
650 order.setShippingZip(billingZip);
651 order.setShippingCountry(billingCountry);
652 order.setShippingPhone(billingPhone);
653 }
654 else {
655 order.setShippingFirstName(shippingFirstName);
656 order.setShippingLastName(shippingLastName);
657 order.setShippingEmailAddress(shippingEmailAddress);
658 order.setShippingCompany(shippingCompany);
659 order.setShippingStreet(shippingStreet);
660 order.setShippingCity(shippingCity);
661 order.setShippingState(shippingState);
662 order.setShippingZip(shippingZip);
663 order.setShippingCountry(shippingCountry);
664 order.setShippingPhone(shippingPhone);
665 }
666
667 order.setCcName(ccName);
668 order.setCcType(ccType);
669 order.setCcNumber(ccNumber);
670 order.setCcExpMonth(ccExpMonth);
671 order.setCcExpYear(ccExpYear);
672 order.setCcVerNumber(ccVerNumber);
673 order.setComments(comments);
674
675 ShoppingOrderUtil.update(order);
676
677 return order;
678 }
679
680 public ShoppingOrder updateOrder(
681 long orderId, String ppTxnId, String ppPaymentStatus,
682 double ppPaymentGross, String ppReceiverEmail, String ppPayerEmail)
683 throws PortalException, SystemException {
684
685 ShoppingOrder order = ShoppingOrderUtil.findByPrimaryKey(orderId);
686
687 order.setModifiedDate(new Date());
688 order.setPpTxnId(ppTxnId);
689 order.setPpPaymentStatus(ppPaymentStatus);
690 order.setPpPaymentGross(ppPaymentGross);
691 order.setPpReceiverEmail(ppReceiverEmail);
692 order.setPpPayerEmail(ppPayerEmail);
693
694 ShoppingOrderUtil.update(order);
695
696 return order;
697 }
698
699 protected String getNumber() throws SystemException {
700 String number =
701 PwdGenerator.getPassword(PwdGenerator.KEY1 + PwdGenerator.KEY2, 12);
702
703 try {
704 ShoppingOrderUtil.findByNumber(number);
705
706 return getNumber();
707 }
708 catch (NoSuchOrderException nsoe) {
709 return number;
710 }
711 }
712
713 protected void validate(
714 ShoppingPreferences shoppingPrefs, String billingFirstName,
715 String billingLastName, String billingEmailAddress,
716 String billingStreet, String billingCity, String billingState,
717 String billingZip, String billingCountry, String billingPhone,
718 boolean shipToBilling, String shippingFirstName,
719 String shippingLastName, String shippingEmailAddress,
720 String shippingStreet, String shippingCity, String shippingState,
721 String shippingZip, String shippingCountry, String shippingPhone,
722 String ccName, String ccType, String ccNumber, int ccExpMonth,
723 int ccExpYear, String ccVerNumber)
724 throws PortalException {
725
726 if (Validator.isNull(billingFirstName)) {
727 throw new BillingFirstNameException();
728 }
729 else if (Validator.isNull(billingLastName)) {
730 throw new BillingLastNameException();
731 }
732 else if (!Validator.isEmailAddress(billingEmailAddress)) {
733 throw new BillingEmailAddressException();
734 }
735 else if (Validator.isNull(billingStreet)) {
736 throw new BillingStreetException();
737 }
738 else if (Validator.isNull(billingCity)) {
739 throw new BillingCityException();
740 }
741 else if (Validator.isNull(billingState)) {
742 throw new BillingStateException();
743 }
744 else if (Validator.isNull(billingZip)) {
745 throw new BillingZipException();
746 }
747 else if (Validator.isNull(billingCountry)) {
748 throw new BillingCountryException();
749 }
750 else if (Validator.isNull(billingPhone)) {
751 throw new BillingPhoneException();
752 }
753
754 if (!shipToBilling) {
755 if (Validator.isNull(shippingFirstName)) {
756 throw new ShippingFirstNameException();
757 }
758 else if (Validator.isNull(shippingLastName)) {
759 throw new ShippingLastNameException();
760 }
761 else if (!Validator.isEmailAddress(shippingEmailAddress)) {
762 throw new ShippingEmailAddressException();
763 }
764 else if (Validator.isNull(shippingStreet)) {
765 throw new ShippingStreetException();
766 }
767 else if (Validator.isNull(shippingCity)) {
768 throw new ShippingCityException();
769 }
770 else if (Validator.isNull(shippingState)) {
771 throw new ShippingStateException();
772 }
773 else if (Validator.isNull(shippingZip)) {
774 throw new ShippingZipException();
775 }
776 else if (Validator.isNull(shippingCountry)) {
777 throw new ShippingCountryException();
778 }
779 else if (Validator.isNull(shippingPhone)) {
780 throw new ShippingPhoneException();
781 }
782 }
783
784 if ((!shoppingPrefs.usePayPal()) &&
785 (shoppingPrefs.getCcTypes().length > 0)) {
786
787 if (Validator.isNull(ccName)) {
788 throw new CCNameException();
789 }
790 else if (Validator.isNull(ccType)) {
791 throw new CCTypeException();
792 }
793 else if (!CreditCard.isValid(ccNumber, ccType)) {
794 throw new CCNumberException();
795 }
796 else if (!CalendarUtil.isFuture(ccExpMonth, ccExpYear)) {
797 throw new CCExpirationException();
798 }
799 }
800 }
801
802 }