//Change the price of a charge public List<ResponseHolder> ChangePriceForProduct(String productRatePlanChargeId, Decimal[] newPrices, String currency) { String chargeQueryString = "SELECT id, ChargeModel FROM ProductRatePlanCharge WHERE Id ='" + productRatePlanChargeId + "'"; ResponseHolder cQRes = zs.Query(chargeQueryString); ProductRatePlanCharge prpc = (ProductRatePlanCharge)cQRes.Objects[0]; String tierQueryString = "SELECT id, price, productrateplanchargeid FROM ProductRatePlanChargeTier WHERE ProductRatePlanChargeId = '" + productRatePlanChargeId + "' AND Active = true AND Currency = '" + currency + "'"; ResponseHolder tierqRes = zs.Query(tierQueryString); if (newPrices.Length == tierqRes.Objects.Count) { List<zObject> prpctList = new List<zObject>(); for (int i = 0; i < tierqRes.Objects.Count; i++) { ProductRatePlanChargeTier temp = (ProductRatePlanChargeTier)tierqRes.Objects[i]; temp.Price = newPrices[i]; prpctList.Add(temp); } return zs.Update(prpctList); } else { ResponseHolder error = new ResponseHolder(); error.Success = false; error.Message = "New Prices Count does not match # of tieres in Zuora"; return new List<ResponseHolder> { error }; } }
/// <summary> /// Create a child account, set the parent id, create the contact, update the account and increase the credit balance /// </summary> /// <param name="acc"></param> /// <param name="parentAccountId"></param> /// <param name="con"></param> /// <param name="amount"></param> /// <returns></returns> public ResponseHolder CreateChildAccountAndIncreaseCreditBalance(Account acc, String parentAccountId, Contact con, Decimal amount) { acc.ParentId = parentAccountId; acc.Status = "Draft"; //create account ResponseHolder accRes = zs.Create(new List<zObject>{acc}, false)[0]; if (!accRes.Success) { ResponseHolder error = new ResponseHolder(); error.Success = false; error.Message = accRes.Message; return error; } //set the account id on the contact con.AccountId = accRes.Id; //create contact ResponseHolder conRes = zs.Create(new List<zObject>{con}, false)[0]; if (!conRes.Success) { ResponseHolder error = new ResponseHolder(); error.Success = false; error.Message = conRes.Message; return error; } //update to active Account draftAcc = new Account(); draftAcc.Id = accRes.Id; draftAcc.Status = "Active"; draftAcc.SoldToId = conRes.Id; draftAcc.BillToId = conRes.Id; ResponseHolder createRes = zs.Update(new List<zObject>{draftAcc})[0]; if (!createRes.Success) { ResponseHolder error = new ResponseHolder(); error.Success = false; error.Message = createRes.Message; return error; } //increase credit balance ResponseHolder cRes = pm.IncreaseCreditBalance(accRes.Id, amount); if (!cRes.Success) { ResponseHolder error = new ResponseHolder(); error.Success = false; error.Message = cRes.Message; return error; } return accRes; }
public ZuoraException WithZuoraError(ResponseHolder response) { if (!response.Success) { ZuoraErrorCode = response.ErrorCode; ZuoraErrorMessage = response.Message; } return this; }
//update a list of objects in zuora public List<ResponseHolder> Update(List<zObject> input) { List<ResponseHolder> results = new List<ResponseHolder>(); SaveResult[] res = new SaveResult[]{}; bool done = false; int updateNum = 50; while (!done) { List<zObject> doWork = new List<zObject>() { }; if (input.Count > updateNum) { List<zObject> updateList = input.GetRange(0, updateNum); for (int i = 0; i < updateNum; i++) { zObject temp = updateList[i]; doWork.Add(temp); input.Remove(temp); } } else { done = true; doWork = input; } CheckTime(); try { res = svc.update(sh, doWork.ToArray()); } catch (FaultException e) { ResponseHolder error = new ResponseHolder(); error.Message = e.Message; error.Success = false; results.Add(error); return results; } foreach (SaveResult sr in res) { ResponseHolder temp = new ResponseHolder(); if (sr.Success) { temp.Id = sr.Id; temp.Success = true; } else { temp.Success = false; temp.Message = sr.Errors[0].Message; } results.Add(temp); } } return results; }
//query request to zuora public ResponseHolder Query(String queryString) { ResponseHolder res = new ResponseHolder(); List<zObject> output = new List<zObject>(); QueryResult qs = new QueryResult(); QueryOptions qo = new QueryOptions(); CheckTime(); try { qs = svc.query(qo, sh, queryString); } catch(Exception e){ res.Success = false; res.Message = e.Message; return res; } foreach (zObject zo in qs.records) { if(zo != null) output.Add(zo); } while (!qs.done) { CheckTime(); try { qs = svc.queryMore(qo, sh, qs.queryLocator); } catch (Exception e) { res.Success = false; res.Message = e.Message; return res; } foreach (zObject zo in qs.records) { if (zo != null) output.Add(zo); } } if (output.Count >= 1) { res.Success = true; res.Objects = output; } else if (output.Count == 0) { res.Success = true; res.Message = "No objects were returned by query."; res.Objects = output; } return res; }
//login to zuora public ResponseHolder Login() { ResponseHolder res = new ResponseHolder(); LoginResult loginRes = new LoginResult(); try { loginRes = svc.login(username, password); } catch (FaultException e) { res.Message = e.Message; res.Success = false; } if (loginRes.Session != null) { sh.session = loginRes.Session; res.Success = true; } return res; }
//delete a list of objects from zuora public List<ResponseHolder> Delete(List<String> input, String type) { List<ResponseHolder> results = new List<ResponseHolder>(); bool done = false; int deleteNum = 50; while (!done) { List<String> doWork = new List<String>() { }; if (input.Count > deleteNum) { List<String> delList = input.GetRange(0, deleteNum); for (int i = 0; i < deleteNum; i++) { String temp = delList[i]; doWork.Add(temp); input.Remove(temp); } } else { done = true; doWork = input; } CheckTime(); DeleteResult[] drs = new DeleteResult[] { }; try { drs = svc.delete(sh, type, doWork.ToArray()); } catch (FaultException e) { ResponseHolder error = new ResponseHolder(); error.Message = e.Message; error.Success = false; results.Add(error); return results; } foreach (DeleteResult dr in drs) { ResponseHolder res = new ResponseHolder(); if (dr.success) { res.Success = true; res.Id = dr.id; } else { res.Success = false; res.Message = dr.errors[0].Message; } results.Add(res); } } return results; }
//create a list of objects in zuora public List<ResponseHolder> Create(List<zObject> input, bool singleTransaction) { List<ResponseHolder> results = new List<ResponseHolder>(); CallOptions co = new CallOptions(); SaveResult[] sr = new SaveResult[]{}; bool done = false; int createNum = 50; if (singleTransaction) { co.useSingleTransaction = true; co.useSingleTransactionSpecified = true; } while (!done) { List<zObject> doWork = new List<zObject>() { }; if (input.Count > createNum) { List<zObject> createList = input.GetRange(0, createNum); for (int i = 0; i < createNum; i++) { zObject temp = createList[i]; doWork.Add(temp); input.Remove(temp); } } else { done = true; doWork = input; } CheckTime(); try { sr = svc.create(co, sh, doWork.ToArray()); } catch (FaultException e) { ResponseHolder error = new ResponseHolder(); error.Message = e.Message; error.Success = false; results.Add(error); return results; } foreach (SaveResult s in sr) { ResponseHolder temp = new ResponseHolder(); if (s.Success) { temp.Success = true; temp.Id = s.Id; } else { temp.Success = false; temp.Message = s.Errors[0].Message; if(s.Errors[0].CodeSpecified) { temp.ErrorCode = s.Errors[0].Code.ToString(); } } results.Add(temp); } } return results; }