def sync_stock_transaction(domain, endpoint, facility, xform, checkpoint, date, limit=100, offset=0): has_next = True next_url = "" while has_next: supply_point = facility case = SupplyPointCase.view('hqcase/by_domain_external_id', key=[domain, str(supply_point)], reduce=False, include_docs=True, limit=1).first() if not case: break meta, stocktransactions = endpoint.get_stocktransactions(next_url_params=next_url, limit=limit, offset=offset, filters=(dict(supply_point=supply_point, date__gte=date, order_by='date'))) save_stock_data_checkpoint(checkpoint, 'stock_transaction', meta.get('limit') or limit, meta.get('offset') or offset, date, facility, True) transactions_to_add = [] with transaction.commit_on_success(): for stocktransaction in stocktransactions: if case: product = Product.get_by_code(domain, stocktransaction.product) report = StockReport( form_id=xform._id, date=force_to_datetime(stocktransaction.date), type='balance', domain=domain ) report.save() try: sql_product = SQLProduct.objects.get(product_id=product._id) except SQLProduct.DoesNotExist: continue transactions_to_add.append(StockTransaction( case_id=case._id, product_id=product._id, sql_product=sql_product, section_id='stock', type='stockonhand', stock_on_hand=Decimal(stocktransaction.ending_balance), report=report )) # Doesn't send signal StockTransaction.objects.bulk_create(transactions_to_add) if not meta.get('next', False): has_next = False else: next_url = meta['next'].split('?')[1]
def _create_stock_state(self, product, consumption): xform = XFormInstance.get('test-xform') loc = Location.by_site_code(TEST_DOMAIN, 'garms') now = datetime.datetime.utcnow() report = StockReport(form_id=xform._id, date=(now - datetime.timedelta(days=10)).replace( second=0, microsecond=0), type='balance', domain=TEST_DOMAIN) report.save() stock_transaction = StockTransaction( case_id=loc.linked_supply_point().get_id, product_id=product.get_id, sql_product=SQLProduct.objects.get(product_id=product.get_id), section_id='stock', type='stockonhand', stock_on_hand=2 * consumption, report=report) stock_transaction.save() report = StockReport(form_id=xform._id, date=now.replace(second=0, microsecond=0), type='balance', domain=TEST_DOMAIN) report.save() stock_transaction = StockTransaction( case_id=loc.linked_supply_point().get_id, product_id=product.get_id, sql_product=SQLProduct.objects.get(product_id=product.get_id), section_id='stock', type='stockonhand', stock_on_hand=consumption, report=report) stock_transaction.save()
def _get_model_for_stock_report(domain, stock_report_helper): return StockReport( form_id=stock_report_helper.form_id, date=stock_report_helper.timestamp, type=stock_report_helper.report_type, domain=domain, server_date=stock_report_helper.server_date, )
def _create_stock_state(self, product, consumption): xform = XFormInstance.get('test-xform') loc = Location.by_site_code(TEST_DOMAIN, 'garms') now = datetime.datetime.utcnow() report = StockReport( form_id=xform._id, date=(now - datetime.timedelta(days=10)).replace(second=0, microsecond=0), type='balance', domain=TEST_DOMAIN ) report.save() stock_transaction = StockTransaction( case_id=loc.linked_supply_point().get_id, product_id=product.get_id, sql_product=SQLProduct.objects.get(product_id=product.get_id), section_id='stock', type='stockonhand', stock_on_hand=2 * consumption, report=report ) stock_transaction.save()