コード例 #1
0
ファイル: views.py プロジェクト: lwyszomi/rapidsms-logistics
def input_stock(request,
                facility_code,
                context={},
                template="logistics/input_stock.html"):
    # TODO: replace this with something that depends on the current user
    # QUESTION: is it possible to make a dynamic form?
    errors = ''
    rms = get_object_or_404(SupplyPoint, code=facility_code)
    productstocks = [
        p for p in rms.stocked_productstocks().order_by('product__name')
    ]
    if request.method == "POST":
        # we need to use the helper/aggregator so that when we update
        # the supervisor on resolved stockouts we can do it all in a
        # single message
        prh = ProductReportsHelper(rms, Reports.SOH)
        for stock in productstocks:
            try:
                if stock.product.sms_code in request.POST:
                    quantity = request.POST[stock.product.sms_code].strip()
                    if quantity:
                        if not quantity.isdigit():
                            errors = ", ".join([errors, stock.product.name])
                            continue
                        prh.add_product_stock(stock.product.sms_code,
                                              quantity,
                                              save=False)
                if "%s_receipt" % stock.product.sms_code in request.POST:
                    receipt = request.POST["%s_receipt" %
                                           stock.product.sms_code].strip()
                    if not receipt.isdigit():
                        errors = ", ".join([errors, stock.product.name])
                        continue
                    if int(receipt) != 0:
                        prh.add_product_receipt(stock.product.sms_code,
                                                receipt,
                                                save=False)
                if "%s_consumption" % stock.product.sms_code in request.POST:
                    consumption = request.POST["%s_consumption" %
                                               stock.product.sms_code].strip()
                    if consumption:
                        if not consumption.isdigit():
                            errors = ", ".join([errors, stock.product.name])
                            continue
                        prh.add_product_consumption(stock.product, consumption)
                if "%s_use_auto_consumption" % stock.product.sms_code in request.POST:
                    rms.activate_auto_consumption(stock.product)
                else:
                    rms.deactivate_auto_consumption(stock.product)
            except ValueError, e:
                errors = errors + unicode(e)
        if not errors:
            prh.save()
            return HttpResponseRedirect(
                reverse(stockonhand_facility, args=(rms.code, )))
        errors = "Please enter all stock on hand and consumption as integers, for example:'100'. " + \
                 "The following fields had problems: " + errors.strip(', ')
コード例 #2
0
def input_stock(request, facility_code, context={}, template="logistics/input_stock.html"):
    # TODO: replace this with something that depends on the current user
    # QUESTION: is it possible to make a dynamic form?
    errors = ''
    rms = get_object_or_404(SupplyPoint, code=facility_code)
    productstocks = [p for p in ProductStock.objects.filter(supply_point=rms).order_by('product__name')]
    if request.method == "POST":
        # we need to use the helper/aggregator so that when we update
        # the supervisor on resolved stockouts we can do it all in a
        # single message
        prh = ProductReportsHelper(rms, Reports.SOH)
        for stock in productstocks:
            try:
                if stock.product.sms_code in request.POST:
                    quantity = request.POST[stock.product.sms_code].strip()
                    if quantity:
                        if not quantity.isdigit():
                            errors = ", ".join([errors, stock.product.name])
                            continue
                        prh.add_product_stock(stock.product.sms_code, quantity, save=False)
                if "%s_receipt" % stock.product.sms_code in request.POST:
                    receipt = request.POST["%s_receipt" % stock.product.sms_code].strip()
                    if not receipt.isdigit():
                        errors = ", ".join([errors, stock.product.name])
                        continue
                    if int(receipt) != 0:
                        prh.add_product_receipt(stock.product.sms_code, receipt, save=False)
                if "%s_consumption" % stock.product.sms_code in request.POST:
                    consumption = request.POST["%s_consumption" % stock.product.sms_code].strip()
                    if consumption:
                        if not consumption.isdigit():
                            errors = ", ".join([errors, stock.product.name])
                            continue
                        prh.add_product_consumption(stock.product, consumption)
                if "%s_use_auto_consumption" % stock.product.sms_code in request.POST:
                    rms.activate_auto_consumption(stock.product)
                else:
                    rms.deactivate_auto_consumption(stock.product)
            except ValueError, e:
                errors = errors + unicode(e)
        if not errors:
            prh.save()
            return HttpResponseRedirect(reverse(stockonhand_facility, args=(rms.code,)))
        errors = "Please enter all stock on hand and consumption as integers, for example:'100'. " + \
                 "The following fields had problems: " + errors.strip(', ')
コード例 #3
0
def process_xform(submission):
    from logistics.models import ProductReportsHelper
    from logistics.util import config
    from logistics import const
    try:
        health_provider = submission.connection.contact.healthproviderbase.healthprovider
    except:
        logging.error('%s contact is not a health provider' % submission.connection.identity)
        return
    if not submission.message:
        logging.error('%s sent an empty message' % submission.connection.identity)
        return
    if health_provider.facility is None:
        logging.error('%s has no associated facility' % submission.connection.identity)
        return

    values_count = len(submission.submission_values())
    try:
        if submission.xform.keyword == stock_reports[0]:
            stock_report = ProductReportsHelper(health_provider.facility.supply_point,
                                                const.Reports.SOH,
                                                submission.message)
            if values_count > 0:
                stock_report.add_product_receipt(config.Products.SIX_PACK, submission.eav.act_spd)
            if values_count > 1:
                stock_report.add_product_stock(config.Products.SIX_PACK, submission.eav.act_sps)
            if values_count > 2:
                stock_report.add_product_receipt(config.Products.TWELVE_PACK, submission.eav.act_tpd)
            if values_count > 3:
                stock_report.add_product_stock(config.Products.TWELVE_PACK, submission.eav.act_tps)
            if values_count > 4:
                stock_report.add_product_receipt(config.Products.EIGHTEEN_PACK, submission.eav.act_epd)
            if values_count > 5:
                stock_report.add_product_stock(config.Products.EIGHTEEN_PACK, submission.eav.act_eps)
            if values_count > 6:
                stock_report.add_product_receipt(config.Products.TWENTY_FOUR_PACK, submission.eav.act_fpd)
            if values_count > 7:
                stock_report.add_product_stock(config.Products.TWENTY_FOUR_PACK, submission.eav.act_fps)
            stock_report.save()
        elif submission.xform.keyword == stock_reports[1]:
            stock_report = ProductReportsHelper(health_provider.facility.supply_point,
                                                const.Reports.SOH,
                                                submission.message)
    
            if values_count > 0:
                stock_report.add_product_receipt(config.Products.OTHER_ACT_STOCK, submission.eav.qun_oad)
            if values_count > 1:
                stock_report.add_product_stock(config.Products.OTHER_ACT_STOCK, submission.eav.qun_oas)
            if values_count > 2:
                stock_report.add_product_receipt(config.Products.QUININE, submission.eav.qun_qud)
            if values_count > 3:
                stock_report.add_product_stock(config.Products.QUININE, submission.eav.qun_qus)
            stock_report.save()
    
        elif submission.xform.keyword == stock_reports[2]:
            stock_report = ProductReportsHelper(health_provider.facility.supply_point,
                                                const.Reports.SOH,
                                                submission.message)
            if values_count > 0:
                stock_report.add_product_receipt(config.Products.RAPID_DIAGNOSTIC_TEST, submission.eav.rdt_rdd)
            if values_count > 1:
                stock_report.add_product_stock(config.Products.RAPID_DIAGNOSTIC_TEST, submission.eav.rdt_rds)
            stock_report.save()
    except Exception, e:
        if submission.xform.keyword in stock_reports:
            submission.response = unicode(e)
            submission.has_errors = True
            submission.save()
        return