//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 };
            }
        }
Пример #2
0
        /// <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;
        }
Пример #3
0
 public ZuoraException WithZuoraError(ResponseHolder response)
 {
     if (!response.Success)
     {
         ZuoraErrorCode = response.ErrorCode;
         ZuoraErrorMessage = response.Message;
     }
     return this;
 }
Пример #4
0
        //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;
        }
Пример #5
0
        //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;
        }
Пример #6
0
        //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;
        }
Пример #7
0
        //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;
        }
Пример #8
0
        //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;
        }