Skip to content

Commit 65f798f

Browse files
authored
Merge pull request #7 from truehostcloud/purchase_multiple_products
Purchase multiple products
2 parents b9c2d4b + 2b8510a commit 65f798f

File tree

2 files changed

+51
-5
lines changed

2 files changed

+51
-5
lines changed

olittwhmcs/serializer.py

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,17 @@ def update_client_request_parameters(**kwargs):
7373
"""
7474
parameters = get_default_parameters()
7575
parameters.update({'action': 'UpdateClient'})
76-
param_map = {'first_name': 'firstname', 'last_name': 'lastname', 'email': 'clientemail', 'country': 'country',
77-
'state': 'state', 'city': 'city', 'postcode': 'postcode', 'address': 'address1', 'phone': 'phonenumber',
78-
'password': 'password2'}
76+
param_map = {
77+
'first_name': 'firstname',
78+
'last_name': 'lastname',
79+
'email': 'clientemail',
80+
'country': 'country',
81+
'state': 'state',
82+
'city': 'city',
83+
'postcode': 'postcode',
84+
'address': 'address1',
85+
'phone': 'phonenumber',
86+
'password': 'password2'}
7987
for param, value in kwargs.items():
8088
parameters.update({param_map[param]: value})
8189
return parameters
@@ -188,6 +196,20 @@ def order_domain_request_parameters(client_id, domain, payment_method,
188196
return parameters
189197

190198

199+
def order_bulk_products_request_parameters(parameters, **kwargs):
200+
"""
201+
Retrieve parameters for the domain order request.
202+
:param parameters: dict of the order placed.
203+
:param kwargs: (Optional) Other parameters to add to the order payload.
204+
Eg promo_code, affiliate_id, price (override), ...
205+
:return: payload for the order product request
206+
:rtype: Dictionary
207+
"""
208+
default_parameters = get_default_parameters()
209+
parameters.update(default_parameters )
210+
return parameters
211+
212+
191213
def upgrade_product_request_parameters(service_id, payment_method, billing_cycle=None,
192214
package_id=None):
193215
"""Retrieve parameters for the product upgrade request.

olittwhmcs/whmcs.py

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
"""This module contains the api surface for consuming this package."""
22

3+
from datetime import datetime
34
import hashlib
45
import os
56
import time
6-
from datetime import datetime
77

88
from olittwhmcs import serializer, models
99
from olittwhmcs.exceptions import WhmcsException
@@ -14,7 +14,7 @@
1414
create_user_request_parameters, get_client_product_request_parameters, \
1515
upgrade_product_request_parameters, prepare_get_invoices_request, \
1616
prepare_get_orders_request, prepare_cancel_order_request, \
17-
order_domain_request_parameters
17+
order_domain_request_parameters, order_bulk_products_request_parameters
1818

1919

2020
##########
@@ -81,6 +81,7 @@ def update_client(**kwargs):
8181
default_error = "Unable to update client details"
8282
raise WhmcsException(response_or_error if response_or_error else default_error)
8383

84+
8485
###########
8586
# PRODUCT #
8687
###########
@@ -175,6 +176,29 @@ def order_product(client_id, payment_method, billing_cycle, product_id=None,
175176
raise WhmcsException(response_or_error if response_or_error else default_error)
176177

177178

179+
def order_bulk_products(parameters=None, **kwargs):
180+
"""
181+
Place a multiple products order in WHMCS.
182+
:param parameters: dict of the order placed.
183+
:param product_id: Integer, id of the product to order.
184+
:param kwargs: (Optional) Other parameters to add to the order payload.
185+
Eg promo_code, affiliate_id, price (override), ...
186+
:return: id of placed order, id of corresponding invoice
187+
:rtype: int, int
188+
:raises WhmcsException: If an error occurs.
189+
"""
190+
if not parameters:
191+
parameters = {}
192+
updated_parameters = order_bulk_products_request_parameters(parameters)
193+
is_successful, response_or_error = get_whmcs_response(updated_parameters)
194+
if is_successful and response_or_error:
195+
order_id = response_or_error.get('orderid')
196+
invoice_id = response_or_error.get('invoiceid')
197+
return order_id, invoice_id
198+
default_error = "Unable to fetch products"
199+
raise WhmcsException(response_or_error if response_or_error else default_error)
200+
201+
178202
def upgrade_client_product(service_id, payment_method, billing_cycle=None,
179203
package_id=None):
180204
"""Upgrade a product in WHMCS.

0 commit comments

Comments
 (0)