in ebaystore/src/main/java/org/apache/ofbiz/ebaystore/EbayStoreAutoPreferences.java [312:398]
public static Map<String, Object> autoSendFeedbackReminderEmail(DispatchContext dctx, Map<String, ? extends Object> context) throws ApiException, SdkException, Exception {
Delegator delegator = dctx.getDelegator();
LocalDispatcher dispatcher = dctx.getDispatcher();
Locale locale = (Locale) context.get("locale");
GenericValue userLogin = EntityQuery.use(delegator).from("UserLogin").where("userLoginId", "system").queryOne();
if (UtilValidate.isEmpty(context.get("productStoreId")) && UtilValidate.isEmpty(context.get("jobId"))) {
return ServiceUtil.returnFailure(UtilProperties.getMessage(RESOURCE, "EbayStoreRequiredProductStoreId", locale));
}
String jobId = (String) context.get("jobId");
String productStoreId = (String) context.get("productStoreId");
String isAutoFeedbackReminder = "N";
int afterDays = 0;
GenericValue ebayProductStorePref = null;
String dateTimeFormat = UtilDateTime.getDateTimeFormat();
SimpleDateFormat formatter = new SimpleDateFormat(dateTimeFormat);
try {
ApiContext apiContext = EbayStoreHelper.getApiContext(productStoreId, locale, delegator);
ebayProductStorePref = EntityQuery.use(delegator).from("EbayProductStorePref").where("productStoreId", productStoreId, "autoPrefEnumId", "EBAY_AUTO_FB_RMD").queryOne();
if (UtilValidate.isNotEmpty(ebayProductStorePref) && UtilValidate.isNotEmpty(ebayProductStorePref.getString("autoPrefJobId"))) {
isAutoFeedbackReminder = ebayProductStorePref.getString("enabled");
// if isAutoPositiveFeedback is N that means not start this job run service
if ("Y".equals(isAutoFeedbackReminder) && jobId.equals(ebayProductStorePref.getString("autoPrefJobId"))) {
afterDays = Integer.parseInt(ebayProductStorePref.getString("condition1"));
// start getting sold item list from ebay follow your site
GetSellingManagerSoldListingsCall sellingManagerSoldListings = new GetSellingManagerSoldListingsCall(apiContext);
List<SellingManagerSoldOrderType> items = new LinkedList<SellingManagerSoldOrderType>();
SellingManagerSoldOrderType[] sellingManagerSoldOrders = sellingManagerSoldListings.getSellingManagerSoldListings();
if (UtilValidate.isNotEmpty(sellingManagerSoldOrders)) {
for (SellingManagerSoldOrderType solditem : sellingManagerSoldOrders) {
SellingManagerOrderStatusType orderStatus = solditem.getOrderStatus();
if (orderStatus != null) {
SellingManagerPaidStatusCodeType paidStatus = orderStatus.getPaidStatus();
SellingManagerShippedStatusCodeType shippedStatus = orderStatus.getShippedStatus();
//Buyer has paid for this item. && Seller shipped items but feedback has not been received from buyer more than days condition
if (SellingManagerPaidStatusCodeType.PAID.equals(paidStatus) && SellingManagerShippedStatusCodeType.SHIPPED.equals(shippedStatus)) {
Calendar right_now = Calendar.getInstance();
Calendar shippedTime = orderStatus.getShippedTime();
Calendar afterShippedTime = orderStatus.getShippedTime();
afterShippedTime.add(Calendar.DAY_OF_MONTH, afterDays);
Debug.logInfo("Verify date for send reminder feedback eamil by auto service: buyer " + solditem.getBuyerID() + " seller shippedTime "
+ "" + formatter.format(shippedTime) + " codition days " + afterDays + " after shippedTime :" + formatter.format(afterShippedTime) + " now date" + formatter.format(right_now), MODULE);
// if now date is after shipped time follow after days condition would be send reminder email to buyer
if (right_now.after(afterShippedTime)) {
items.add(solditem);
}
}
}
}
// call service send email (get template follow productStoreId)
for (SellingManagerSoldOrderType item : items) {
// call send
Map<String, Object> sendMap = new HashMap<>();
GenericValue productStoreEmail = EntityQuery.use(delegator).from("ProductStoreEmailSetting").where("productStoreId", productStoreId, "emailType", "EBAY_FEEBACK_REMIN").queryOne();
String bodyScreenLocation = productStoreEmail.getString("bodyScreenLocation");
sendMap.put("bodyScreenUri", bodyScreenLocation);
String subjectString = productStoreEmail.getString("subject");
sendMap.put("userLogin", userLogin);
sendMap.put("subject", subjectString);
sendMap.put("contentType", productStoreEmail.get("contentType"));
sendMap.put("sendFrom", productStoreEmail.get("fromAddress"));
sendMap.put("sendCc", productStoreEmail.get("ccAddress"));
sendMap.put("sendBcc", productStoreEmail.get("bccAddress"));
sendMap.put("sendTo", item.getBuyerEmail());
Map<String, Object> bodyParameters = new HashMap<>();
bodyParameters.put("buyerUserId", item.getBuyerID());
sendMap.put("bodyParameters", bodyParameters);
try {
dispatcher.runAsync("sendMailFromScreen", sendMap);
} catch (GenericServiceException e) {
Debug.logError(e, MODULE);
return ServiceUtil.returnError(e.getMessage());
}
}
}
}
}
} catch (Exception e) {
return ServiceUtil.returnFailure(UtilProperties.getMessage(RESOURCE, "EbayStoreProblemConnectingToEbaySite", locale) + e);
}
return ServiceUtil.returnSuccess();
}