001
014
015 package com.liferay.portlet.shopping.service.impl;
016
017 import com.liferay.portal.kernel.exception.PortalException;
018 import com.liferay.portal.kernel.exception.SystemException;
019 import com.liferay.portal.kernel.util.GetterUtil;
020 import com.liferay.portal.kernel.util.Validator;
021 import com.liferay.portal.kernel.workflow.WorkflowConstants;
022 import com.liferay.portal.model.User;
023 import com.liferay.portal.service.ServiceContext;
024 import com.liferay.portal.util.PortletKeys;
025 import com.liferay.portal.util.PropsValues;
026 import com.liferay.portal.util.SubscriptionSender;
027 import com.liferay.portlet.shopping.BillingCityException;
028 import com.liferay.portlet.shopping.BillingCountryException;
029 import com.liferay.portlet.shopping.BillingEmailAddressException;
030 import com.liferay.portlet.shopping.BillingFirstNameException;
031 import com.liferay.portlet.shopping.BillingLastNameException;
032 import com.liferay.portlet.shopping.BillingPhoneException;
033 import com.liferay.portlet.shopping.BillingStateException;
034 import com.liferay.portlet.shopping.BillingStreetException;
035 import com.liferay.portlet.shopping.BillingZipException;
036 import com.liferay.portlet.shopping.CCExpirationException;
037 import com.liferay.portlet.shopping.CCNameException;
038 import com.liferay.portlet.shopping.CCNumberException;
039 import com.liferay.portlet.shopping.CCTypeException;
040 import com.liferay.portlet.shopping.CartMinOrderException;
041 import com.liferay.portlet.shopping.ShippingCityException;
042 import com.liferay.portlet.shopping.ShippingCountryException;
043 import com.liferay.portlet.shopping.ShippingEmailAddressException;
044 import com.liferay.portlet.shopping.ShippingFirstNameException;
045 import com.liferay.portlet.shopping.ShippingLastNameException;
046 import com.liferay.portlet.shopping.ShippingPhoneException;
047 import com.liferay.portlet.shopping.ShippingStateException;
048 import com.liferay.portlet.shopping.ShippingStreetException;
049 import com.liferay.portlet.shopping.ShippingZipException;
050 import com.liferay.portlet.shopping.model.ShoppingCart;
051 import com.liferay.portlet.shopping.model.ShoppingCartItem;
052 import com.liferay.portlet.shopping.model.ShoppingItem;
053 import com.liferay.portlet.shopping.model.ShoppingItemField;
054 import com.liferay.portlet.shopping.model.ShoppingOrder;
055 import com.liferay.portlet.shopping.model.ShoppingOrderConstants;
056 import com.liferay.portlet.shopping.model.ShoppingOrderItem;
057 import com.liferay.portlet.shopping.model.impl.ShoppingCartItemImpl;
058 import com.liferay.portlet.shopping.service.base.ShoppingOrderLocalServiceBaseImpl;
059 import com.liferay.portlet.shopping.util.ShoppingPreferences;
060 import com.liferay.portlet.shopping.util.ShoppingUtil;
061 import com.liferay.portlet.shopping.util.comparator.OrderDateComparator;
062 import com.liferay.util.CreditCard;
063 import com.liferay.util.PwdGenerator;
064
065 import java.util.Currency;
066 import java.util.Date;
067 import java.util.List;
068 import java.util.Map;
069
070
073 public class ShoppingOrderLocalServiceImpl
074 extends ShoppingOrderLocalServiceBaseImpl {
075
076 @Override
077 public ShoppingOrder addLatestOrder(long userId, long groupId)
078 throws PortalException, SystemException {
079
080
081
082 User user = userPersistence.findByPrimaryKey(userId);
083 Date now = new Date();
084
085 String number = getNumber();
086
087 ShoppingOrder order = null;
088
089 long orderId = counterLocalService.increment();
090
091 List<ShoppingOrder> pastOrders =
092 shoppingOrderPersistence.findByG_U_PPPS(
093 groupId, userId, ShoppingOrderConstants.STATUS_CHECKOUT, 0, 1);
094
095 if (pastOrders.size() > 0) {
096 ShoppingOrder pastOrder = pastOrders.get(0);
097
098 order = shoppingOrderPersistence.create(orderId);
099
100 order.setBillingCompany(pastOrder.getBillingCompany());
101 order.setBillingStreet(pastOrder.getBillingStreet());
102 order.setBillingCity(pastOrder.getBillingCity());
103 order.setBillingState(pastOrder.getBillingState());
104 order.setBillingZip(pastOrder.getBillingZip());
105 order.setBillingCountry(pastOrder.getBillingCountry());
106 order.setBillingPhone(pastOrder.getBillingPhone());
107 order.setShipToBilling(pastOrder.isShipToBilling());
108 order.setShippingCompany(pastOrder.getShippingCompany());
109 order.setShippingStreet(pastOrder.getShippingStreet());
110 order.setShippingCity(pastOrder.getShippingCity());
111 order.setShippingState(pastOrder.getShippingState());
112 order.setShippingZip(pastOrder.getShippingZip());
113 order.setShippingCountry(pastOrder.getShippingCountry());
114 order.setShippingPhone(pastOrder.getShippingPhone());
115 }
116 else {
117 order = shoppingOrderPersistence.create(orderId);
118 }
119
120 order.setGroupId(groupId);
121 order.setCompanyId(user.getCompanyId());
122 order.setUserId(user.getUserId());
123 order.setUserName(user.getFullName());
124 order.setCreateDate(now);
125 order.setModifiedDate(now);
126 order.setNumber(number);
127 order.setBillingFirstName(user.getFirstName());
128 order.setBillingLastName(user.getLastName());
129 order.setBillingEmailAddress(user.getEmailAddress());
130 order.setShippingFirstName(user.getFirstName());
131 order.setShippingLastName(user.getLastName());
132 order.setShippingEmailAddress(user.getEmailAddress());
133 order.setCcName(user.getFullName());
134 order.setPpPaymentStatus(ShoppingOrderConstants.STATUS_LATEST);
135 order.setSendOrderEmail(true);
136 order.setSendShippingEmail(true);
137
138 shoppingOrderPersistence.update(order);
139
140
141
142 if (PropsValues.SHOPPING_ORDER_COMMENTS_ENABLED) {
143 mbMessageLocalService.addDiscussionMessage(
144 userId, order.getUserName(), groupId,
145 ShoppingOrder.class.getName(), orderId,
146 WorkflowConstants.ACTION_PUBLISH);
147 }
148
149 return order;
150 }
151
152 @Override
153 public void completeOrder(
154 String number, String ppTxnId, String ppPaymentStatus,
155 double ppPaymentGross, String ppReceiverEmail, String ppPayerEmail,
156 boolean updateInventory, ServiceContext serviceContext)
157 throws PortalException, SystemException {
158
159
160
161 ShoppingOrder order = shoppingOrderPersistence.findByNumber(number);
162
163 order.setModifiedDate(new Date());
164 order.setPpTxnId(ppTxnId);
165 order.setPpPaymentStatus(ppPaymentStatus);
166 order.setPpPaymentGross(ppPaymentGross);
167 order.setPpReceiverEmail(ppReceiverEmail);
168 order.setPpPayerEmail(ppPayerEmail);
169
170 shoppingOrderPersistence.update(order);
171
172
173
174 if (updateInventory &&
175 ppPaymentStatus.equals(ShoppingOrderConstants.STATUS_COMPLETED)) {
176
177 List<ShoppingOrderItem> orderItems =
178 shoppingOrderItemLocalService.getOrderItems(order.getOrderId());
179
180 for (ShoppingOrderItem orderItem : orderItems) {
181 ShoppingItem item = shoppingItemLocalService.getItem(
182 ShoppingUtil.getItemId(orderItem.getItemId()));
183
184 if (item.isInfiniteStock()) {
185 continue;
186 }
187
188 if (!item.isFields()) {
189 int quantity =
190 item.getStockQuantity() - orderItem.getQuantity();
191
192 item.setStockQuantity(quantity);
193 }
194 else {
195 List<ShoppingItemField> itemFields =
196 shoppingItemFieldLocalService.getItemFields(
197 item.getItemId());
198
199 ShoppingItemField[] itemFieldsArray = itemFields.toArray(
200 new ShoppingItemField[itemFields.size()]);
201
202 String[] fieldsArray = ShoppingCartItemImpl.getFieldsArray(
203 ShoppingUtil.getItemFields(orderItem.getItemId()));
204
205 int rowPos = ShoppingUtil.getFieldsQuantitiesPos(
206 item, itemFieldsArray, fieldsArray);
207
208 String[] fieldsQuantities = item.getFieldsQuantitiesArray();
209
210 try {
211 int quantity =
212 GetterUtil.getInteger(fieldsQuantities[rowPos]) -
213 orderItem.getQuantity();
214
215 fieldsQuantities[rowPos] = String.valueOf(quantity);
216
217 item.setFieldsQuantitiesArray(fieldsQuantities);
218 }
219 catch (Exception e) {
220 }
221 }
222
223 shoppingItemPersistence.update(item);
224 }
225 }
226
227
228
229 sendEmail(order, "confirmation", serviceContext);
230 }
231
232 @Override
233 public void deleteOrder(long orderId)
234 throws PortalException, SystemException {
235
236 ShoppingOrder order = shoppingOrderPersistence.findByPrimaryKey(
237 orderId);
238
239 deleteOrder(order);
240 }
241
242 @Override
243 public void deleteOrder(ShoppingOrder order)
244 throws PortalException, SystemException {
245
246
247
248 shoppingOrderPersistence.remove(order);
249
250
251
252 subscriptionLocalService.deleteSubscriptions(
253 order.getCompanyId(), ShoppingOrder.class.getName(),
254 order.getOrderId());
255
256
257
258 shoppingOrderItemPersistence.removeByOrderId(order.getOrderId());
259
260
261
262 mbMessageLocalService.deleteDiscussionMessages(
263 ShoppingOrder.class.getName(), order.getOrderId());
264 }
265
266 @Override
267 public void deleteOrders(long groupId)
268 throws PortalException, SystemException {
269
270 List<ShoppingOrder> orders = shoppingOrderPersistence.findByGroupId(
271 groupId);
272
273 for (ShoppingOrder order : orders) {
274 deleteOrder(order);
275 }
276 }
277
278 @Override
279 public ShoppingOrder getLatestOrder(long userId, long groupId)
280 throws PortalException, SystemException {
281
282 List<ShoppingOrder> orders = shoppingOrderPersistence.findByG_U_PPPS(
283 groupId, userId, ShoppingOrderConstants.STATUS_LATEST, 0, 1);
284
285 ShoppingOrder order = null;
286
287 if (orders.size() == 1) {
288 order = orders.get(0);
289 }
290 else {
291 order = shoppingOrderLocalService.addLatestOrder(userId, groupId);
292 }
293
294 return order;
295 }
296
297 @Override
298 public ShoppingOrder getOrder(long orderId)
299 throws PortalException, SystemException {
300
301 return shoppingOrderPersistence.findByPrimaryKey(orderId);
302 }
303
304 @Override
305 public ShoppingOrder getOrder(String number)
306 throws PortalException, SystemException {
307
308 return shoppingOrderPersistence.findByNumber(number);
309 }
310
311 @Override
312 public ShoppingOrder getPayPalTxnIdOrder(String ppTxnId)
313 throws PortalException, SystemException {
314
315 return shoppingOrderPersistence.findByPPTxnId(ppTxnId);
316 }
317
318 @Override
319 public ShoppingOrder saveLatestOrder(ShoppingCart cart)
320 throws PortalException, SystemException {
321
322 Map<ShoppingCartItem, Integer> items = cart.getItems();
323 Date now = new Date();
324
325 ShoppingPreferences shoppingPrefs = ShoppingPreferences.getInstance(
326 cart.getCompanyId(), cart.getGroupId());
327
328 if (!ShoppingUtil.meetsMinOrder(shoppingPrefs, items)) {
329 throw new CartMinOrderException();
330 }
331
332 ShoppingOrder order = getLatestOrder(
333 cart.getUserId(), cart.getGroupId());
334
335 order.setCreateDate(now);
336 order.setModifiedDate(now);
337 order.setPpPaymentStatus(ShoppingOrderConstants.STATUS_CHECKOUT);
338
339 shoppingOrderPersistence.update(order);
340
341 boolean requiresShipping = false;
342
343 for (Map.Entry<ShoppingCartItem, Integer> entry : items.entrySet()) {
344 ShoppingCartItem cartItem = entry.getKey();
345 Integer count = entry.getValue();
346
347 ShoppingItem item = cartItem.getItem();
348
349 if (item.isRequiresShipping()) {
350 requiresShipping = true;
351 }
352
353 long orderItemId = counterLocalService.increment();
354
355 ShoppingOrderItem orderItem = shoppingOrderItemPersistence.create(
356 orderItemId);
357
358 orderItem.setOrderId(order.getOrderId());
359 orderItem.setItemId(cartItem.getCartItemId());
360 orderItem.setSku(item.getSku());
361 orderItem.setName(item.getName());
362 orderItem.setDescription(item.getDescription());
363 orderItem.setProperties(item.getProperties());
364 orderItem.setPrice(
365 ShoppingUtil.calculateActualPrice(item, count.intValue()) /
366 count.intValue());
367 orderItem.setQuantity(count.intValue());
368
369 shoppingOrderItemPersistence.update(orderItem);
370 }
371
372 order.setModifiedDate(new Date());
373 order.setTax(ShoppingUtil.calculateTax(items, order.getBillingState()));
374 order.setShipping(
375 ShoppingUtil.calculateAlternativeShipping(
376 items, cart.getAltShipping()));
377 order.setAltShipping(
378 shoppingPrefs.getAlternativeShippingName(cart.getAltShipping()));
379 order.setRequiresShipping(requiresShipping);
380 order.setInsure(cart.isInsure());
381 order.setInsurance(ShoppingUtil.calculateInsurance(items));
382 order.setCouponCodes(cart.getCouponCodes());
383 order.setCouponDiscount(
384 ShoppingUtil.calculateCouponDiscount(
385 items, order.getBillingState(), cart.getCoupon()));
386 order.setSendOrderEmail(true);
387 order.setSendShippingEmail(true);
388
389 shoppingOrderPersistence.update(order);
390
391 return order;
392 }
393
394 @Override
395 public List<ShoppingOrder> search(
396 long groupId, long companyId, long userId, String number,
397 String billingFirstName, String billingLastName,
398 String billingEmailAddress, String shippingFirstName,
399 String shippingLastName, String shippingEmailAddress,
400 String ppPaymentStatus, boolean andOperator, int start, int end)
401 throws SystemException {
402
403 OrderDateComparator obc = new OrderDateComparator(false);
404
405 return shoppingOrderFinder.findByG_C_U_N_PPPS(
406 groupId, companyId, userId, number, billingFirstName,
407 billingLastName, billingEmailAddress, shippingFirstName,
408 shippingLastName, shippingEmailAddress, ppPaymentStatus,
409 andOperator, start, end, obc);
410 }
411
412 @Override
413 public int searchCount(
414 long groupId, long companyId, long userId, String number,
415 String billingFirstName, String billingLastName,
416 String billingEmailAddress, String shippingFirstName,
417 String shippingLastName, String shippingEmailAddress,
418 String ppPaymentStatus, boolean andOperator)
419 throws SystemException {
420
421 return shoppingOrderFinder.countByG_C_U_N_PPPS(
422 groupId, companyId, userId, number, billingFirstName,
423 billingLastName, billingEmailAddress, shippingFirstName,
424 shippingLastName, shippingEmailAddress, ppPaymentStatus,
425 andOperator);
426 }
427
428 @Override
429 public void sendEmail(
430 long orderId, String emailType, ServiceContext serviceContext)
431 throws PortalException, SystemException {
432
433 ShoppingOrder order = shoppingOrderPersistence.findByPrimaryKey(
434 orderId);
435
436 sendEmail(order, emailType, serviceContext);
437 }
438
439 @Override
440 public void sendEmail(
441 ShoppingOrder order, String emailType,
442 ServiceContext serviceContext)
443 throws PortalException, SystemException {
444
445 ShoppingPreferences shoppingPrefs = ShoppingPreferences.getInstance(
446 order.getCompanyId(), order.getGroupId());
447
448 if (emailType.equals("confirmation") &&
449 shoppingPrefs.getEmailOrderConfirmationEnabled()) {
450 }
451 else if (emailType.equals("shipping") &&
452 shoppingPrefs.getEmailOrderShippingEnabled()) {
453 }
454 else {
455 return;
456 }
457
458 User user = userPersistence.findByPrimaryKey(order.getUserId());
459
460 Currency currency = Currency.getInstance(shoppingPrefs.getCurrencyId());
461
462 String billingAddress =
463 order.getBillingFirstName() + " " + order.getBillingLastName() +
464 "<br>" +
465 order.getBillingEmailAddress() + "<br>" +
466 order.getBillingStreet() + "<br>" +
467 order.getBillingCity() + "<br>" +
468 order.getBillingState() + "<br>" +
469 order.getBillingZip() + "<br>" +
470 order.getBillingCountry() + "<br>" +
471 order.getBillingPhone() + "<br>";
472
473 String shippingAddress =
474 order.getShippingFirstName() + " " + order.getShippingLastName() +
475 "<br>" +
476 order.getShippingEmailAddress() + "<br>" +
477 order.getShippingStreet() + "<br>" +
478 order.getShippingCity() + "<br>" +
479 order.getShippingState() + "<br>" +
480 order.getShippingZip() + "<br>" +
481 order.getShippingCountry() + "<br>" +
482 order.getShippingPhone() + "<br>";
483
484 double total = ShoppingUtil.calculateTotal(order);
485
486 String fromName = shoppingPrefs.getEmailFromName(order.getCompanyId());
487 String fromAddress = shoppingPrefs.getEmailFromAddress(
488 order.getCompanyId());
489
490 String toName = user.getFullName();
491 String toAddress = user.getEmailAddress();
492
493 String subject = null;
494 String body = null;
495
496 if (emailType.equals("confirmation")) {
497 subject = shoppingPrefs.getEmailOrderConfirmationSubject();
498 body = shoppingPrefs.getEmailOrderConfirmationBody();
499 }
500 else if (emailType.equals("shipping")) {
501 subject = shoppingPrefs.getEmailOrderShippingSubject();
502 body = shoppingPrefs.getEmailOrderShippingBody();
503 }
504
505 SubscriptionSender subscriptionSender = new SubscriptionSender();
506
507 subscriptionSender.setBody(body);
508 subscriptionSender.setCompanyId(order.getCompanyId());
509 subscriptionSender.setContextAttributes(
510 "[$ORDER_BILLING_ADDRESS$]", billingAddress, "[$ORDER_CURRENCY$]",
511 currency.getSymbol(), "[$ORDER_NUMBER$]", order.getNumber(),
512 "[$ORDER_SHIPPING_ADDRESS$]", shippingAddress, "[$ORDER_TOTAL$]",
513 total);
514 subscriptionSender.setFrom(fromAddress, fromName);
515 subscriptionSender.setHtmlFormat(true);
516 subscriptionSender.setMailId("shopping_order", order.getOrderId());
517 subscriptionSender.setPortletId(PortletKeys.SHOPPING);
518 subscriptionSender.setScopeGroupId(order.getGroupId());
519 subscriptionSender.setServiceContext(serviceContext);
520 subscriptionSender.setSubject(subject);
521 subscriptionSender.setUserId(order.getUserId());
522
523 subscriptionSender.addRuntimeSubscribers(toAddress, toName);
524
525 subscriptionSender.flushNotificationsAsync();
526
527 if (emailType.equals("confirmation") && order.isSendOrderEmail()) {
528 order.setSendOrderEmail(false);
529
530 shoppingOrderPersistence.update(order);
531 }
532 else if (emailType.equals("shipping") && order.isSendShippingEmail()) {
533 order.setSendShippingEmail(false);
534
535 shoppingOrderPersistence.update(order);
536 }
537 }
538
539 @Override
540 public ShoppingOrder updateLatestOrder(
541 long userId, long groupId, String billingFirstName,
542 String billingLastName, String billingEmailAddress,
543 String billingCompany, String billingStreet, String billingCity,
544 String billingState, String billingZip, String billingCountry,
545 String billingPhone, boolean shipToBilling,
546 String shippingFirstName, String shippingLastName,
547 String shippingEmailAddress, String shippingCompany,
548 String shippingStreet, String shippingCity, String shippingState,
549 String shippingZip, String shippingCountry, String shippingPhone,
550 String ccName, String ccType, String ccNumber, int ccExpMonth,
551 int ccExpYear, String ccVerNumber, String comments)
552 throws PortalException, SystemException {
553
554 ShoppingOrder order = getLatestOrder(userId, groupId);
555
556 return updateOrder(
557 order.getOrderId(), billingFirstName, billingLastName,
558 billingEmailAddress, billingCompany, billingStreet, billingCity,
559 billingState, billingZip, billingCountry, billingPhone,
560 shipToBilling, shippingFirstName, shippingLastName,
561 shippingEmailAddress, shippingCompany, shippingStreet, shippingCity,
562 shippingState, shippingZip, shippingCountry, shippingPhone, ccName,
563 ccType, ccNumber, ccExpMonth, ccExpYear, ccVerNumber, comments);
564 }
565
566 @Override
567 public ShoppingOrder updateOrder(
568 long orderId, String ppTxnId, String ppPaymentStatus,
569 double ppPaymentGross, String ppReceiverEmail, String ppPayerEmail)
570 throws PortalException, SystemException {
571
572 ShoppingOrder order = shoppingOrderPersistence.findByPrimaryKey(
573 orderId);
574
575 order.setModifiedDate(new Date());
576 order.setPpTxnId(ppTxnId);
577 order.setPpPaymentStatus(ppPaymentStatus);
578 order.setPpPaymentGross(ppPaymentGross);
579 order.setPpReceiverEmail(ppReceiverEmail);
580 order.setPpPayerEmail(ppPayerEmail);
581
582 shoppingOrderPersistence.update(order);
583
584 return order;
585 }
586
587 @Override
588 public ShoppingOrder updateOrder(
589 long orderId, String billingFirstName, String billingLastName,
590 String billingEmailAddress, String billingCompany,
591 String billingStreet, String billingCity, String billingState,
592 String billingZip, String billingCountry, String billingPhone,
593 boolean shipToBilling, String shippingFirstName,
594 String shippingLastName, String shippingEmailAddress,
595 String shippingCompany, String shippingStreet, String shippingCity,
596 String shippingState, String shippingZip, String shippingCountry,
597 String shippingPhone, String ccName, String ccType, String ccNumber,
598 int ccExpMonth, int ccExpYear, String ccVerNumber, String comments)
599 throws PortalException, SystemException {
600
601 ShoppingOrder order = shoppingOrderPersistence.findByPrimaryKey(
602 orderId);
603
604 ShoppingPreferences shoppingPrefs = ShoppingPreferences.getInstance(
605 order.getCompanyId(), order.getGroupId());
606
607 validate(
608 shoppingPrefs, billingFirstName, billingLastName,
609 billingEmailAddress, billingStreet, billingCity, billingState,
610 billingZip, billingCountry, billingPhone, shipToBilling,
611 shippingFirstName, shippingLastName, shippingEmailAddress,
612 shippingStreet, shippingCity, shippingState, shippingZip,
613 shippingCountry, shippingPhone, ccName, ccType, ccNumber,
614 ccExpMonth, ccExpYear, ccVerNumber);
615
616 order.setModifiedDate(new Date());
617 order.setBillingFirstName(billingFirstName);
618 order.setBillingLastName(billingLastName);
619 order.setBillingEmailAddress(billingEmailAddress);
620 order.setBillingCompany(billingCompany);
621 order.setBillingStreet(billingStreet);
622 order.setBillingCity(billingCity);
623 order.setBillingState(billingState);
624 order.setBillingZip(billingZip);
625 order.setBillingCountry(billingCountry);
626 order.setBillingPhone(billingPhone);
627 order.setShipToBilling(shipToBilling);
628
629 if (shipToBilling) {
630 order.setShippingFirstName(billingFirstName);
631 order.setShippingLastName(billingLastName);
632 order.setShippingEmailAddress(billingEmailAddress);
633 order.setShippingCompany(billingCompany);
634 order.setShippingStreet(billingStreet);
635 order.setShippingCity(billingCity);
636 order.setShippingState(billingState);
637 order.setShippingZip(billingZip);
638 order.setShippingCountry(billingCountry);
639 order.setShippingPhone(billingPhone);
640 }
641 else {
642 order.setShippingFirstName(shippingFirstName);
643 order.setShippingLastName(shippingLastName);
644 order.setShippingEmailAddress(shippingEmailAddress);
645 order.setShippingCompany(shippingCompany);
646 order.setShippingStreet(shippingStreet);
647 order.setShippingCity(shippingCity);
648 order.setShippingState(shippingState);
649 order.setShippingZip(shippingZip);
650 order.setShippingCountry(shippingCountry);
651 order.setShippingPhone(shippingPhone);
652 }
653
654 order.setCcName(ccName);
655 order.setCcType(ccType);
656 order.setCcNumber(ccNumber);
657 order.setCcExpMonth(ccExpMonth);
658 order.setCcExpYear(ccExpYear);
659 order.setCcVerNumber(ccVerNumber);
660 order.setComments(comments);
661
662 shoppingOrderPersistence.update(order);
663
664 return order;
665 }
666
667 protected String getNumber() throws SystemException {
668 String number = PwdGenerator.getPassword(
669 12, PwdGenerator.KEY1, PwdGenerator.KEY2);
670
671 ShoppingOrder order = shoppingOrderPersistence.fetchByNumber(number);
672
673 if (order != null) {
674 return order.getNumber();
675 }
676
677 return number;
678 }
679
680 protected void validate(
681 ShoppingPreferences shoppingPrefs, String billingFirstName,
682 String billingLastName, String billingEmailAddress,
683 String billingStreet, String billingCity, String billingState,
684 String billingZip, String billingCountry, String billingPhone,
685 boolean shipToBilling, String shippingFirstName,
686 String shippingLastName, String shippingEmailAddress,
687 String shippingStreet, String shippingCity, String shippingState,
688 String shippingZip, String shippingCountry, String shippingPhone,
689 String ccName, String ccType, String ccNumber, int ccExpMonth,
690 int ccExpYear, String ccVerNumber)
691 throws PortalException {
692
693 if (Validator.isNull(billingFirstName)) {
694 throw new BillingFirstNameException();
695 }
696 else if (Validator.isNull(billingLastName)) {
697 throw new BillingLastNameException();
698 }
699 else if (!Validator.isEmailAddress(billingEmailAddress)) {
700 throw new BillingEmailAddressException();
701 }
702 else if (Validator.isNull(billingStreet)) {
703 throw new BillingStreetException();
704 }
705 else if (Validator.isNull(billingCity)) {
706 throw new BillingCityException();
707 }
708 else if (Validator.isNull(billingState)) {
709 throw new BillingStateException();
710 }
711 else if (Validator.isNull(billingZip)) {
712 throw new BillingZipException();
713 }
714 else if (Validator.isNull(billingCountry)) {
715 throw new BillingCountryException();
716 }
717 else if (Validator.isNull(billingPhone)) {
718 throw new BillingPhoneException();
719 }
720
721 if (!shipToBilling) {
722 if (Validator.isNull(shippingFirstName)) {
723 throw new ShippingFirstNameException();
724 }
725 else if (Validator.isNull(shippingLastName)) {
726 throw new ShippingLastNameException();
727 }
728 else if (!Validator.isEmailAddress(shippingEmailAddress)) {
729 throw new ShippingEmailAddressException();
730 }
731 else if (Validator.isNull(shippingStreet)) {
732 throw new ShippingStreetException();
733 }
734 else if (Validator.isNull(shippingCity)) {
735 throw new ShippingCityException();
736 }
737 else if (Validator.isNull(shippingState)) {
738 throw new ShippingStateException();
739 }
740 else if (Validator.isNull(shippingZip)) {
741 throw new ShippingZipException();
742 }
743 else if (Validator.isNull(shippingCountry)) {
744 throw new ShippingCountryException();
745 }
746 else if (Validator.isNull(shippingPhone)) {
747 throw new ShippingPhoneException();
748 }
749 }
750
751 if (!shoppingPrefs.usePayPal() &&
752 (shoppingPrefs.getCcTypes().length > 0)) {
753
754 if (Validator.isNull(ccName)) {
755 throw new CCNameException();
756 }
757 else if (Validator.isNull(ccType)) {
758 throw new CCTypeException();
759 }
760 else if (!CreditCard.isValidNumber(ccNumber, ccType)) {
761 throw new CCNumberException();
762 }
763 else if (!CreditCard.isValidExpirationDate(ccExpMonth, ccExpYear)) {
764 throw new CCExpirationException();
765 }
766 }
767 }
768
769 }