api calls to collect historic sales orders
adding in support to be able to regenerate and return historic sales orders. Also fixed a tiny typo in the standard sales order generation. Added support for historic sales orders to client and shell, as well as come general clean up of the shell module. Change-Id: I17d8d86b35f2d5b6913af10a09c7beec6a9a4961
This commit is contained in:
parent
69db713502
commit
5913740778
@ -234,6 +234,8 @@ def generate_sales_order(draft, tenant_id):
|
||||
if tenant_query.count() == 0:
|
||||
return 400, {"errors": ["No tenant matching ID found."]}
|
||||
elif tenant_id is not None:
|
||||
return 400, {"error": ["tenant must be a unicode string."]}
|
||||
else:
|
||||
return 400, {"missing parameter": {"tenant": "Tenant id."}}
|
||||
|
||||
db = database.Database(session)
|
||||
@ -271,6 +273,46 @@ def generate_sales_order(draft, tenant_id):
|
||||
"error": "IntegrityError, existing sales_order overlap."}
|
||||
|
||||
|
||||
def regenerate_sales_order(tenant_id, target):
|
||||
session = Session()
|
||||
|
||||
db = database.Database(session)
|
||||
|
||||
if isinstance(tenant_id, unicode):
|
||||
tenant_query = session.query(Tenant).\
|
||||
filter(Tenant.id == tenant_id)
|
||||
if tenant_query.count() == 0:
|
||||
return 400, {"errors": ["No tenant matching ID found."]}
|
||||
elif tenant_id is not None:
|
||||
return 400, {"error": ["tenant must be a unicode string."]}
|
||||
else:
|
||||
return 400, {"missing parameter": {"tenant": "Tenant id."}}
|
||||
|
||||
if target is not None:
|
||||
try:
|
||||
target = datetime.strptime(target, iso_date)
|
||||
except ValueError:
|
||||
return 400, {"errors": ["date given needs to be in format: " +
|
||||
"y-m-d"]}
|
||||
else:
|
||||
return 400, {"missing parameter": {"date": "target date in format: " +
|
||||
"y-m-d"}}
|
||||
|
||||
rates = RatesFile(config.rates_config)
|
||||
try:
|
||||
sales_order = db.get_sales_order(tenant_id, target)
|
||||
except IndexError:
|
||||
return 400, {"errors": ["Given date not in existing sales orders."]}
|
||||
|
||||
usage = db.usage(sales_order.start, sales_order.end, tenant_id)
|
||||
|
||||
# Transform the query result into a billable dict.
|
||||
tenant_dict = build_tenant_dict(tenant_query[0], usage, db)
|
||||
tenant_dict = add_costs_for_tenant(tenant_dict, rates)
|
||||
|
||||
return 200, tenant_dict
|
||||
|
||||
|
||||
@app.route("sales_order", methods=["POST"])
|
||||
@json_must()
|
||||
@returns_json
|
||||
@ -287,5 +329,15 @@ def run_sales_draft_generation():
|
||||
return generate_sales_order(True, tenant_id)
|
||||
|
||||
|
||||
@app.route("sales_historic", methods=["POST"])
|
||||
@json_must()
|
||||
@returns_json
|
||||
def run_sales_historic_generation():
|
||||
tenant_id = flask.request.json.get("tenant", None)
|
||||
target = flask.request.json.get("date", None)
|
||||
|
||||
return regenerate_sales_order(tenant_id, target)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
pass
|
||||
|
@ -1,5 +1,5 @@
|
||||
from sqlalchemy import func
|
||||
from .models import Resource, UsageEntry, Tenant
|
||||
from .models import Resource, UsageEntry, Tenant, SalesOrder
|
||||
import json
|
||||
|
||||
|
||||
@ -88,3 +88,9 @@ class Database(object):
|
||||
return json.loads(info[0].info)
|
||||
except ValueError:
|
||||
return {'type': info[0].info}
|
||||
|
||||
def get_sales_order(self, tenant_id, target):
|
||||
query = self.session.query(SalesOrder).\
|
||||
filter(SalesOrder.start <= target, SalesOrder.end >= target).\
|
||||
filter(SalesOrder.tenant_id == tenant_id)
|
||||
return query[0]
|
||||
|
@ -45,3 +45,23 @@ class Client(object):
|
||||
print json.dumps(response.json(), indent=2, sort_keys=True)
|
||||
except ConnectionError as e:
|
||||
print e
|
||||
|
||||
def sales_historic(self, tenants, date):
|
||||
url = self.endpoint + "sales_historic"
|
||||
|
||||
for tenant in tenants:
|
||||
data = {"tenant": tenant, "date": date}
|
||||
try:
|
||||
response = requests.post(url,
|
||||
headers={"Content-Type":
|
||||
"application/json",
|
||||
"token": self.auth_token},
|
||||
data=json.dumps(data))
|
||||
if response.status_code != 200:
|
||||
raise AttributeError("Sales order cycle failed: " +
|
||||
response.text + " code: " +
|
||||
str(response.status_code))
|
||||
else:
|
||||
print json.dumps(response.json(), indent=2, sort_keys=True)
|
||||
except ConnectionError as e:
|
||||
print e
|
||||
|
@ -45,25 +45,37 @@ if __name__ == '__main__':
|
||||
# commands:
|
||||
subparsers = parser.add_subparsers(help='commands', dest='command')
|
||||
|
||||
usage_parser = subparsers.add_parser('usage', help=('process usage' +
|
||||
' for all tenants'))
|
||||
usage_parser = subparsers.add_parser(
|
||||
'usage', help=('process usage for all tenants'))
|
||||
|
||||
sales_parser = subparsers.add_parser('sales-order',
|
||||
help=('create sales orders for '
|
||||
'given tenants'))
|
||||
sales_parser = subparsers.add_parser(
|
||||
'sales-order',
|
||||
help=('create sales orders for given tenants'))
|
||||
sales_parser.add_argument(
|
||||
"-t", "--tenant", dest="tenants",
|
||||
help='Tenants to create sales orders for.',
|
||||
action="append", default=[])
|
||||
|
||||
draft_parser = subparsers.add_parser('sales-draft',
|
||||
help=('create sales drafts for '
|
||||
'given tenants'))
|
||||
draft_parser = subparsers.add_parser(
|
||||
'sales-draft',
|
||||
help=('create sales drafts for given tenants'))
|
||||
draft_parser.add_argument(
|
||||
"-t", "--tenant", dest="tenants",
|
||||
help='Tenants to create sales drafts for.',
|
||||
action="append", default=[])
|
||||
|
||||
historic_parser = subparsers.add_parser(
|
||||
'sales-historic',
|
||||
help=('regenerate historic sales orders for given tenants,' +
|
||||
'at given date'))
|
||||
historic_parser.add_argument(
|
||||
"-t", "--tenant", dest="tenants",
|
||||
help='Tenants to create sales drafts for.',
|
||||
action="append", default=[])
|
||||
historic_parser.add_argument(
|
||||
"-d", "--date", dest="date",
|
||||
help='target search date for sales order.')
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
conf = {'api': {'endpoint': 'http://0.0.0.0:8000/',
|
||||
@ -86,3 +98,6 @@ if __name__ == '__main__':
|
||||
|
||||
if args.command == 'sales-draft':
|
||||
client.sales_order(args.tenants, True)
|
||||
|
||||
if args.command == 'sales-historic':
|
||||
client.sales_historic(args.tenants, args.date)
|
||||
|
Loading…
x
Reference in New Issue
Block a user