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