def json_estimates(request): client = get_qbo_client(get_callback_url(request)) # get recent estimates query = "SELECT * FROM Estimate WHERE TxnDate >= '%s' ORDERBY TxnDate ASC MAXRESULTS %s" % ( (datetime.now() - timedelta(weeks=settings.ESTIMATE_AGE_WEEKS)).date().isoformat(), settings.QBO_MAX_RESULTS) # remove "Closed" estimates without a "Tag #" which indicates the bike has been serviced and picked up results = [json.loads(e.to_json()) for e in Estimate.query(query, qb=client)] results = [e for e in results if not (e['TxnStatus'] == 'Closed' and not estimate_has_tag_number(e))] return JsonResponse({'success': True, 'estimates': results})
def purge_orders(request): client = get_qbo_client(get_callback_url(request)) # get recent estimates query = "SELECT * FROM Estimate WHERE TxnDate >= '%s' ORDERBY TxnDate DESC MAXRESULTS %s" % ( (datetime.now() - timedelta(weeks=settings.ESTIMATE_AGE_WEEKS)).date().isoformat(), settings.QBO_MAX_RESULTS) # filter to "Closed" and "Accepted" results = [json.loads(e.to_json()) for e in Estimate.query(query, qb=client)] results = [e for e in results if e['TxnStatus'] in ['Closed', 'Accepted']] orders_to_purge = [] parts_to_purge = [] for result in results: # verify the DocNumber is an integer if not result['DocNumber'] or not result['DocNumber'].isdigit(): continue # delete all parts for this "DocNumber" (i.e estimate_id) order_parts = OrderPart.objects.filter(estimate_id=result['DocNumber']) order_ids = set() for part in order_parts: order_ids.add(part.order.id) parts_to_purge.append({ "qbo_estimate_id": result['Id'], "part_id": part.id, "order_id": part.order.id, "qbo_DocNumber": part.estimate_id, }) part.delete() # delete all orders without any associated parts orders = Order.objects.filter(order_id__in=order_ids) for order in orders: if not order.orderpart_set.exists(): orders_to_purge.append({ "order_id": order.id, }) order.delete() return JsonResponse({ 'parts_to_purge': parts_to_purge, 'orders_to_purge': orders_to_purge, })