/* ** Copyright [2012] [Megam Systems] ** ** Licensed under the Apache License, Version 2.0 (the "License"); ** you may not use this file except in compliance with the License. ** You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ package org.megam.deccanplato.provider.xero.handler; import static org.megam.deccanplato.provider.Constants.*; import static org.megam.deccanplato.provider.xero.Constants.*; import java.math.BigDecimal; import java.util.Calendar; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.StringTokenizer; import org.megam.deccanplato.provider.BusinessActivity; import org.megam.deccanplato.provider.core.BusinessActivityInfo; import com.rossjourdain.util.xero.ArrayOfItem; import com.rossjourdain.util.xero.ArrayOfLineItem; import com.rossjourdain.util.xero.ArrayOfReceipt; import com.rossjourdain.util.xero.Contact; import com.rossjourdain.util.xero.Item; import com.rossjourdain.util.xero.ItemPriceDetails; import com.rossjourdain.util.xero.LineItem; import com.rossjourdain.util.xero.Receipt; import com.rossjourdain.util.xero.ReceiptStatus; import com.rossjourdain.util.xero.User; import com.rossjourdain.util.xero.XeroClientException; import com.rossjourdain.util.xero.XeroClientUnexpectedException; import com.rossjourdain.util.xero.XeroPublicClient; import com.rossjourdain.util.xero.XeroXmlManager; /** * @author pandiyaraja * * This class performs xero receipts function and this class * creates and updates receipts in xero, then list all receipts and * view a receipt */ public class ReceiptsImpl implements BusinessActivity { private Map<String, String> args; private BusinessActivityInfo bizInfo; /* (non-Javadoc) * @see org.megam.deccanplato.provider.BusinessActivity#setArguments(org.megam.deccanplato.provider.core.BusinessActivityInfo, java.util.Map) */ @Override public void setArguments(BusinessActivityInfo tempBizInfo, Map<String, String> tempArgs) { this.args=tempArgs; this.bizInfo=tempBizInfo; } /* (non-Javadoc) * @see org.megam.deccanplato.provider.BusinessActivity#run() */ @Override public Map<String, String> run() { Map<String, String> outMap=null; switch(bizInfo.getActivityFunction()) { case LIST: outMap=listAll(); break; case VIEW: outMap=list(); break; case CREATE: outMap=create(); break; case UPDATE: outMap=create(); break; } return outMap; } /** * This method creates and updates a receipts in xero * update can perform by using receipts id. * @return */ private Map<String, String> create() { Map<String, String> outMap=new HashMap<>(); XeroPublicClient client=new XeroPublicClient(args); try { ArrayOfReceipt arrayOfReceipt=new ArrayOfReceipt(); List<Receipt> receipts=arrayOfReceipt.getReceipt(); Receipt receipt=new Receipt(); receipt.setDate(Calendar.getInstance()); Contact contact=new Contact(); contact.setContactID(args.get(CONTACT_ID)); receipt.setContact(contact); receipt.getLineAmountTypes().add(args.get(LINE_AMOUNT_TYPE)); ArrayOfLineItem arrayOfLineItem =new ArrayOfLineItem(); List<LineItem> lineitems=arrayOfLineItem.getLineItem(); LineItem lineItem=new LineItem(); BigDecimal qty=new BigDecimal(args.get(QUANTITY)); lineItem.setQuantity(qty); lineItem.setDescription(args.get(DESCRIPTION)); lineItem.setAccountCode(args.get(ACCOUNT_CODE)); BigDecimal amt=new BigDecimal(args.get(UNIT_AMOUNT)); lineItem.setUnitAmount(amt); lineItem.setLineAmount(qty.multiply(amt)); lineitems.add(lineItem); receipt.setLineItems(arrayOfLineItem); User user=new User(); user.setUserID(args.get(USER_ID)); receipt.setUser(user); if(args.get(RECEIPT_ID)!=null) { receipt.setReceiptID(args.get(RECEIPT_ID)); } receipts.add(receipt); String response =client.post(XeroXmlManager.receiptsToXml(arrayOfReceipt), new StringTokenizer(args.get(BIZ_FUNCTION), "#").nextToken()); outMap.put(OUTPUT, response); } catch (XeroClientException ex) { ex.printDetails(); } catch (XeroClientUnexpectedException ex) { ex.printStackTrace(); } return outMap; } /** * this method returns a particular receipt details from xero * by using receipt id. * @return */ private Map<String, String> list() { Map<String,String> outMap = new HashMap<String,String>(); try { XeroPublicClient client=new XeroPublicClient(args); String responseString =client.list(args.get(ID), new StringTokenizer(args.get(BIZ_FUNCTION), "#").nextToken()); outMap.put(OUTPUT, responseString); } catch (XeroClientException e) { e.printStackTrace(); } catch (XeroClientUnexpectedException e) { e.printStackTrace(); } return outMap; } /** * this method returns a list of receipts details from xero. * @return */ private Map<String, String> listAll() { Map<String,String> outMap = new HashMap<String,String>(); try { XeroPublicClient client=new XeroPublicClient(args); String response =client.listAll(new StringTokenizer(args.get(BIZ_FUNCTION), "#").nextToken()); outMap.put(OUTPUT, response); } catch (XeroClientException e) { e.printStackTrace(); } catch (XeroClientUnexpectedException e) { e.printStackTrace(); } return outMap; } /* (non-Javadoc) * @see org.megam.deccanplato.provider.BusinessActivity#name() */ @Override public String name() { return "receipt"; } }