def search_family_data():
    try:
        args = request.json
        data = []
        log = {}
        log['request'] = args
        if not args['phone_no'] and not args['husband_name'] and not args['name']:
            sql = """
            SELECT * FROM rch_users ORDER BY time_created DESC LIMIT 5;
            """
            rch_recs = session.query(RCHUser).from_statement(text(sql)).all()
        else:
            sql = """
            SELECT *
            FROM rch_users
            WHERE (phone_no_1 LIKE :phone_no OR name LIKE :name OR husband_name LIKE :husband_name)
            """
            rch_recs = session.query(RCHUser).from_statement(text(sql)).params(args).all()

        for rch_rec in rch_recs:
            data_obj = {}
            data_obj["record_unique_id"] = rch_rec.uid
            data_obj["pregnant_woman_name"] = rch_rec.name
            data_obj["husband_name"] = rch_rec.husband_name
            data_obj["address"] = rch_rec.address
            data_obj["pregnant_woman_dob"] =  date_to_string(rch_rec.dob)
            data_obj["phone_number"] = rch_rec.phone_no_1
            data.append(data_obj)
        record = {'status_code': 200,'status_msg': "Success","family_details":data}
    except Exception as e:
        error_email.send_email({'error':str(e),'url':request.url})
        record = {'status_code': 500, "status_msg": str(e)}
    log['response'] = record
    ml_search_family_data.insert_one(log)
    return jsonify(record)
def children_data():
    args = request.json
    log = {}
    log['request'] = args
    try:
        unique_id = args['data']['record_unique_id']
        rch_user = session.query(RCHUser).filter(RCHUser.uid == unique_id).first()
        if rch_user:
            child_recs = session.query(Child).filter(Child.rch_user_id == rch_user.id,Child.deleted==False).all()
            response_data = []
            for child_rec in child_recs:
                preg_rec = session.query(PregnancyDetail).filter(PregnancyDetail.id == child_rec.pregnancy_detail_id).first()
                rec = {}
                rec['name'] = child_rec.name
                rec['dob'] = date_to_string(child_rec.date_of_birth)
                rec['rch_id'] = child_rec.rch_id
                rec['deleted'] = child_rec.deleted
                rec['woman_name'] = rch_user.name
                rec['record_pregnancy_id'] = preg_rec.pregnancy_id
                response_data.append(rec)

            record = {'status_code': 200, "status_msg": "Success","data":response_data}
        else:
            record = {'status_code': 404, "status_msg": "Mother record not found."}
    except Exception as e:
        error_email.send_email({'error':str(e),'url':request.url})
        record = {'status_code': 500, "status_msg": str(e)}
    log['response'] = record
    ml_children_data.insert_one(log)
    return jsonify(record)
def start_scheduler():
    try:
        logger.info("Automation has started...")
        scheduler = SafeScheduler()
        scheduler.every().day.do(save_to_canada)
        scheduler.every().day.do(save_to_australia)
        scheduler.every().day.do(save_to_new_zealand)
        scheduler.every().day.do(save_to_UK)
        scheduler.every().day.do(find_all_ireland)
        scheduler.every().day.do(save_to_united_states)
        scheduler.every().day.do(save_to_SG)
        scheduler.every().day.do(save_to_MU)
        scheduler.every().day.do(save_to_central_america)
        scheduler.every().day.do(save_to_caribbea)
        scheduler.every().day.do(save_to_unsafe_areas)
        scheduler.every().day.do(save_drug_law)
        scheduler.every().day.do(parse_all_countries_vaccine)

        while True:
            scheduler.run_pending()
            time.sleep(1)

    except:
        scheduler.keep_running = False
        e = traceback.format_exc()
        send_email(e)
        logger.error(
            "Automation has stopped running due to the following reason: \n %s",
            e)
def beneficiary_data():
    try:
        data = []
        log = {}
        log['request'] = {}
        rch_recs  = session.query(RCHUser).all()
        for rch_rec in rch_recs:
            data_obj = {}
            data_obj["record_unique_id"] = rch_rec.uid
            data_obj["pregnant_woman_name"] = rch_rec.name
            data_obj["husband_name"] = rch_rec.husband_name
            data_obj["address"] = rch_rec.address
            data_obj["pregnant_woman_dob"] =  date_to_string(rch_rec.dob)
            data_obj["phone_number"] = rch_rec.phone_no_1
            data.append(data_obj)

        if data:
            record = {'status_code': 200,'status_msg': "Success","data":data}
        else:
            record = {'status_code': 200,'status_msg': "No records found","data":[]}
    except Exception as e:
        error_email.send_email({'error':str(e),'url':request.url})
        record = {'status_code': 500, "status_msg": str(e)}
    log['response'] = record
    ml_beneficiary_data.insert_one(log)
    return jsonify(record)
def male_female_count():
    try:
        args = request.json
        log = {}
        log['request'] = args
        station_id = args['station_id']
        from_str = custom_functions.obj_to_date(
            args['date_from']).split(" ")[0]
        to_str = custom_functions.obj_to_date(args['date_to'],
                                              extra_day=1).split(" ")[0]
        select_query = "SELECT beneficiary_id,vaccine_dose_id FROM kba.immunisation_log WHERE \
        station_id='{}' AND current_date >= '{}' AND current_date <= '{}' allow filtering;"

        vaccine_doses = session.query(VaccineDose).all()
        vd_obj = {}
        for vd in vaccine_doses:
            vd_obj[vd.id] = vd.name

        sub_logs = cassandra_client.session.execute(
            select_query.format(station_id, from_str, to_str))
        result = {}
        for sub_log in sub_logs:
            r = session.query(Child).filter(
                Child.rch_id == sub_log.beneficiary_id).first()
            if r:
                if not vd_obj[sub_log.vaccine_dose_id] in result:
                    result[vd_obj[sub_log.vaccine_dose_id]] = {}
                    result[vd_obj[sub_log.vaccine_dose_id]]['male'] = 0
                    result[vd_obj[sub_log.vaccine_dose_id]]['female'] = 0
                    result[vd_obj[sub_log.vaccine_dose_id]]['total'] = 0
                    result[vd_obj[sub_log.vaccine_dose_id]][
                        'dose_name'] = vd_obj[sub_log.vaccine_dose_id]

                result[vd_obj[sub_log.vaccine_dose_id]]['total'] = result[
                    vd_obj[sub_log.vaccine_dose_id]]['total'] + 1
                if r.gender.lower() == 'm':
                    result[vd_obj[sub_log.vaccine_dose_id]]['male'] = result[
                        vd_obj[sub_log.vaccine_dose_id]]['male'] + 1
                elif r.gender.lower() == 'f':
                    result[vd_obj[sub_log.vaccine_dose_id]]['female'] = result[
                        vd_obj[sub_log.vaccine_dose_id]]['female'] + 1

        result_list = list(result.values())
        sorted(result_list, key=lambda i: i['dose_name'])
        if result_list:
            record = {'status_code': 200, 'data': result_list}
        else:
            record = {
                'status_code': 404,
                "status_msg": "No data found.",
                'data': result_list
            }
    except Exception as e:
        session.rollback()
        error_email.send_email({'error': str(e), 'url': request.url})
        record = {'status_code': 500, "status_msg": str(e)}
    log['response'] = record
    ml_male_female_count.insert_one(log)
    return jsonify(record)
def beneficiary_report():
    try:
        args = request.json
        log = {}
        log['request'] = args
        station_id = args['station_id']
        from_str = custom_functions.obj_to_date(
            args['date_from']).split(" ")[0]
        to_str = custom_functions.obj_to_date(args['date_to'],
                                              extra_day=1).split(" ")[0]
        select_query = "SELECT beneficiary_id,vaccine_dose_id FROM kba.immunisation_log WHERE \
        station_id='{}' AND current_date >= '{}' AND current_date <= '{}' allow filtering;"

        vaccine_doses = session.query(VaccineDose).all()
        vd_obj = {}
        for vd in vaccine_doses:
            vd_obj[vd.id] = vd.name

        sub_logs = cassandra_client.session.execute(
            select_query.format(station_id, from_str, to_str))
        obj = {}
        for sub_log in sub_logs:
            r = session.query(Child).filter(
                Child.rch_id == sub_log.beneficiary_id).first()
            rch_user = session.query(RCHUser).filter(
                RCHUser.id == r.rch_user_id).first()
            if r and rch_user:
                if not sub_log.beneficiary_id in obj:
                    obj[sub_log.beneficiary_id] = {}
                obj[sub_log.beneficiary_id]['child_name'] = r.name
                obj[sub_log.beneficiary_id]['mother_name'] = rch_user.name
                obj[sub_log.
                    beneficiary_id]['dob'] = custom_functions.date_to_string(
                        r.date_of_birth)
                obj[sub_log.beneficiary_id]['address'] = rch_user.address
                obj[sub_log.beneficiary_id]['gender'] = r.gender.upper()
                obj[sub_log.beneficiary_id]['vaccine'] = vd_obj[
                    sub_log.vaccine_dose_id] if (not (
                        'vaccine' in obj[sub_log.beneficiary_id])) else obj[
                            sub_log.beneficiary_id]['vaccine'] + ", " + vd_obj[
                                sub_log.vaccine_dose_id]

        result_list = list(obj.values())
        if result_list:
            record = {'status_code': 200, 'data': result_list}
        else:
            record = {
                'status_code': 404,
                "status_msg": "No data found.",
                'data': result_list
            }
    except Exception as e:
        session.rollback()
        error_email.send_email({'error': str(e), 'url': request.url})
        record = {'status_code': 500, "status_msg": str(e)}
    log['response'] = record
    ml_beneficiary_report.insert_one(log)
    return jsonify(record)
def edit_beneficiary_pregnancy():
    try:
        args = request.json
        log = {}
        log['request'] = args
        preg_rec = session.query(PregnancyDetail).filter(PregnancyDetail.pregnancy_id == args["data"]["record_pregnancy_id"]).first()
        if preg_rec:
            rch_rec  = session.query(RCHUser).filter(RCHUser.id == preg_rec.rch_user_id).first()
            child_recs = session.query(Child).filter(Child.pregnancy_detail_id == preg_rec.id,Child.deleted==False).all()
            data = {}
            data["phone_no"]=preg_rec.phone_no
            data["drivers_number"] =preg_rec.drivers_number
            data["menstruation_date"]=date_to_string(preg_rec.menstruation_date)
            data["expected_delivery_date"]=date_to_string(preg_rec.expected_delivery_date)
            data["blood_group"]=preg_rec.blood_group
            data["last_delivery_date"]=date_to_string(preg_rec.last_delivery_date)
            data["rsby_reg_number"] =preg_rec.rsby_reg_number
            data["jsy_reg_number"] =preg_rec.jsy_reg_number
            data["gravida"]=preg_rec.gravida
            data["para"]=preg_rec.para
            data["no_of_live_children"]=preg_rec.no_of_live_children
            data["no_of_abortions"]=preg_rec.no_of_abortions
            data["tt1_date"]=date_to_string(preg_rec.tt1_date)
            data["tt2_date"]=date_to_string(preg_rec.tt2_date)
            data["usg1_date"]=date_to_string(preg_rec.usg1_date)
            data["usg2_date"]=date_to_string(preg_rec.usg2_date)
            data["usg3_date"]=date_to_string(preg_rec.usg3_date)
            data["important_findings"] =preg_rec.important_findings
            data["complication_details"] =preg_rec.complication_details
            data["heart_complications"] =preg_rec.heart_complications
            data["child_data"] = []
            for cr in child_recs:
                obj = {}
                obj["rch_id"] = cr.rch_id
                obj["name"] = cr.name
                obj["gender"] = cr.gender
                obj["deleted"] = cr.deleted
                obj["dob"] = date_to_string(cr.date_of_birth)
                data["child_data"].append(obj)
            data["advice"] =preg_rec.advice
            data["referrals"] =preg_rec.referrals
            data["contraceptive_methods_used"] =preg_rec.contraceptive_methods_used
            data["rh_category"] =preg_rec.rh_category
            data["previous_delivery"]=preg_rec.previous_delivery
            data["record_unique_id"] = rch_rec.uid

            record = {'status_code': 200,'status_msg': "Success","pregnancy_details":data}
        else:
            record = {'status_code': 200,'status_msg': "No records found","data":[]}
    except Exception as e:
        error_email.send_email({'error':str(e),'url':request.url})
        record = {'status_code': 500, "status_msg": str(e)}
    log['response'] = record
    ml_edit_beneficiary_pregnancy.insert_one(log)
    return jsonify(record)
Esempio n. 8
0
    def get(self):
        """
            Documentation

            Params:
                var1: required
                var2: required

            Returns:
                JSON dict
        """
        parser = reqparse.RequestParser()
        parser.add_argument('vaccine_batch_id', type=str, required=True,
                            help="Package ID is required")
        args = parser.parse_args()
        try:
            log = {}
            log['request'] = args
            package_id = args['vaccine_batch_id']
            select_query = "SELECT * FROM kba.vaccine_sub_log WHERE id={};"
            data_rec = cassandra_client.session.execute(select_query.format(package_id))
            if data_rec:
                if data_rec[0].dose_count > 0:
                    data = {}
                    data['uuid'] = str(data_rec[0].id)
                    data['date_time'] = custom_functions.date_to_string(data_rec[0].date_time)
                    data['dose_count'] = data_rec[0].dose_count
                    data['from_station'] = dict(data_rec[0].previous_station)
                    data['to_station'] = dict(data_rec[0].current_station)
                    data['manufacturer_info'] = data_rec[0].manufacturer_info
                    data['comments'] = data_rec[0].comments
                    data['adjustments'] = {'doses': data_rec[0].transit_loss, 'remarks': data_rec[0].transit_remark}
                    data['manufacturing_date'] = custom_functions.date_to_string(data_rec[0].manufacturing_date)
                    data['expiry_date'] = custom_functions.date_to_string(data_rec[0].expiry_date)
                    data['name'] = data_rec[0].name
                    data['package_id'] = data_rec[0].package_id
                    data['package_type_id'] = '1'#data_rec[0].package_type_id
                    data['previous_uuid'] = str(data_rec[0].previous_uuid)
                    data['status'] = data_rec[0].status
                    data['validation'] = True#data_rec[0].status
                    record = {'status_code': 200,'status_msg': "Success", 'data':data}
                else:
                    record = {'status_code': 404, 'status_msg': "Vaccine Count for this package is 0."}
            else:
                record = {'status_code': 404,'status_msg': "Vaccine not found."}
        except Exception as e:
            error_email.send_email({'error':str(e),'url':'/immunization/get'})
            record = {'status_code': 500,'status_msg': "API Failed.", 'msg':str(e)}
        log['response'] = record
        ml_immunisation_get.insert_one(log)
        return record
def edit_beneficiary_family():
    try:
        args = request.json
        log = {}
        log['request'] = args
        rch_rec  = session.query(RCHUser).filter(RCHUser.uid == args["data"]["record_unique_id"]).first()
        if rch_rec:
           preg_recs  = session.query(PregnancyDetail).filter(PregnancyDetail.rch_user_id == rch_rec.id).all()
           record_pregnancy_ids = []
           for p in preg_recs:
               record_pregnancy_ids.append(p.pregnancy_id)
           data = {}
           data["woman_name"]= rch_rec.name
           data["woman_dob"]= date_to_string(rch_rec.dob)
           data["woman_age"]= rch_rec.age
           data["husband_name"]= rch_rec.husband_name
           data["husband_dob"]= date_to_string(rch_rec.husband_dob)
           data["husband_age"]= rch_rec.husband_age
           data["address"]= rch_rec.address
           data["phone_no"]= rch_rec.phone_no_1
           data["phone_no_1"]= rch_rec.phone_no_2
           data["family_registration_number"]= rch_rec.family_reg_no
           data["mother_education"]= rch_rec.mother_education
           data["unique_id"]= rch_rec.unique_id
           data["aadhar_id"]= rch_rec.aadhar_id
           data["income"]= rch_rec.income
           data["caste"]= rch_rec.caste
           data["ec_no"]= rch_rec.ec_no
           data["apl_bpl"]= rch_rec.apl_bpl
           data["bank_account_number"]= rch_rec.bank_account_number
           data["ifsc_code"]= rch_rec.ifsc_code
           data["category"]= rch_rec.category
           data["record_pregnancy_ids"] = record_pregnancy_ids
           data["record_unique_id"] = rch_rec.uid
           record = {'status_code': 200,'status_msg': "Success","family_details":data}
        else:
            record = {'status_code': 200,'status_msg': "No records found","data":[]}
    except Exception as e:
        error_email.send_email({'error':str(e),'url':request.url})
        record = {'status_code': 500, "status_msg": str(e)}
    log['response'] = record
    ml_edit_beneficiary_family.insert_one(log)
    return jsonify(record)
def all_time_vaccine_count():
    try:
        args = request.json
        log = {}
        log['request'] = args
        vaccine_doses = session.query(VaccineDose).filter(
            VaccineDose.vaccine_id.in_(tuple(args['data']))).all()
        vaccine = {}
        for vd in vaccine_doses:
            v = vd.vaccine
            str_id = str(v.name)
            if str_id in vaccine:
                vaccine[str_id]['id'].append(vd.id)
            else:
                vaccine[str_id] = {}
                vaccine[str_id]['id'] = [vd.id]
                vaccine[str_id]['name'] = v.name
                vaccine[str_id]['count'] = 0

        for vacc in vaccine.keys():
            for v_id in vaccine[vacc]['id']:
                sub_select_query = "SELECT COUNT(*) FROM immunisation_log WHERE vaccine_dose_id=" + str(
                    v_id) + " allow filtering;"
                sub_log = cassandra_client.session.execute(sub_select_query)
                vaccine[vacc][
                    'count'] = vaccine[vacc]['count'] + sub_log[0].count

        list_data = list(vaccine.values())
        if list_data:
            record = {'status_code': 200, 'data': list_data}
        else:
            record = {
                'status_code': 404,
                "status_msg": "No data found.",
                'data': list_data
            }
    except Exception as e:
        error_email.send_email({'error': str(e), 'url': request.url})
        record = {'status_code': 500, "status_msg": str(e)}
    log['response'] = record
    ml_all_time_vaccine_count.insert_one(log)
    return jsonify(record)
def edit_service_provider():
    try:
        args = request.json
        log = {}
        log['request'] = args
        preg_rec = session.query(PregnancyDetail).filter(PregnancyDetail.pregnancy_id == args["data"]["record_pregnancy_id"]).first()
        ser_rec  = session.query(ServiceProvider).filter(ServiceProvider.pregnancy_detail_id == preg_rec.id).first()
        if ser_rec:
           data = {}
           data["icds"]= ser_rec.icds
           data["anganwadi_centre"]= ser_rec.anganwadi_centre
           data["anganwadi_worker"]= ser_rec.anganwadi_worker
           data["anganwadi_phone"]= ser_rec.anganwadi_phone
           data["health_centre"]= ser_rec.health_centre
           data["sub_centre"]= ser_rec.sub_centre
           data["asha"]= ser_rec.asha
           data["asha_phone"]= ser_rec.asha_phone
           data["jphn"]= ser_rec.jphn
           data["jphn_phone"]= ser_rec.jphn_phone
           data["hospital_for_delivery"]= ser_rec.hospital_for_delivery
           data["hospital_address"] = ser_rec.hospital_address
           data["birth_companion"]= ser_rec.birth_companion
           data["transportation_arrangement"]= ser_rec.transportation_arrangement
           data["registered_for_pmmvy"]= ser_rec.registered_for_pmmvy
           data["first_financial_aid"]= ser_rec.first_financial_aid
           data["second_financial_aid"]= ser_rec.second_financial_aid
           data["third_financial_aid"]= ser_rec.third_financial_aid
           data["anganwadi_registration_number"]= ser_rec.anganwadi_registration_number
           data["sub_centre_registration_number"]= ser_rec.sub_centre_registration_number
           data["date_of_first_registration"]= date_to_string(ser_rec.date_of_first_registration)
           data["record_service_id"] = ser_rec.id
           data["nearest_station"] = ser_rec.get_station_object()
           record = {'status_code': 200,'status_msg': "Success","service_provider_details":data}
        else:
            record = {'status_code': 200,'status_msg': "No records found","data":[]}
    except Exception as e:
        error_email.send_email({'error':str(e),'url':request.url})
        record = {'status_code': 500, "status_msg": str(e)}
    log['response'] = record
    ml_edit_service_provider.insert_one(log)
    return jsonify(record)
def detailed_immunization_register():
    try:
        args = request.json
        log = {}
        log['request'] = args
        station_ids = args['station']
        csv = args['csv'] == "y"
        from_str = custom_functions.obj_to_date(
            args['date_from']).split(" ")[0]
        to_str = custom_functions.obj_to_date(args['date_to'],
                                              extra_day=1).split(" ")[0]
        data = {}
        for station_id in station_ids:
            sub_select_query = "SELECT beneficiary_id,vaccine_details,beneficiary_details FROM kba.immunisation_log WHERE \
            station_id='{}' AND current_date >= '{}' AND current_date <= '{}' allow filtering;"

            sub_logs = cassandra_client.session.execute(
                sub_select_query.format(station_id, from_str, to_str))
            for sub_log in sub_logs:
                if sub_log.beneficiary_id in data:
                    data[sub_log.beneficiary_id]['vaccines_given'].append(
                        sub_log.vaccine_details['vaccine_dose_name'])
                else:
                    if check_filter(args, sub_log):
                        data[sub_log.beneficiary_id] = {}
                        data[sub_log.beneficiary_id][
                            'child_name'] = sub_log.beneficiary_details[
                                'child_name']
                        data[sub_log.beneficiary_id][
                            'father_name'] = sub_log.beneficiary_details[
                                'father_name']
                        data[sub_log.beneficiary_id][
                            'mother_name'] = sub_log.beneficiary_details[
                                'mother_name']
                        data[sub_log.beneficiary_id][
                            'address'] = sub_log.beneficiary_details['address']
                        data[sub_log.beneficiary_id][
                            'sex'] = sub_log.beneficiary_details['sex']
                        if not csv:
                            dat = custom_functions.date_to_string(sub_log.beneficiary_details['date_of_birth'],False) if 'date_of_birth' in sub_log.beneficiary_details else {}
                        else:
                            try:
                                format = custom_functions.date_to_string(
                                    sub_log.
                                    beneficiary_details['date_of_birth'], False
                                ) if 'date_of_birth' in sub_log.beneficiary_details else {
                                    'dd': "0",
                                    'mm': "0",
                                    'yyyy': "0000"
                                }
                                dat = str(format['dd']) + "/" + str(
                                    format['mm']) + "/" + str(format['yyyy'])
                            except:
                                dat = ""
                        data[sub_log.beneficiary_id]['date_of_birth'] = dat
                        data[sub_log.beneficiary_id]['vaccines_given'] = [
                            sub_log.vaccine_details['vaccine_dose_name']
                        ]
        detailed_data = data.values()
        if csv:
            file_name = generate_csv(list(detailed_data))
            record = {
                'status_code': 200,
                'status_msg': "Posted successfully",
                "file_name": file_name
            }
        else:
            list_data = list(detailed_data)
            if list_data:
                record = {'status_code': 200, 'data': list_data}
            else:
                record = {
                    'status_code': 404,
                    "status_msg": "No data found.",
                    'data': list_data
                }
    except Exception as e:
        error_email.send_email({'error': str(e), 'url': request.url})
        record = {'status_code': 500, "status_msg": str(e)}
    log['response'] = record
    ml_detailed_immunization_register.insert_one(log)
    return jsonify(record)
def station_vaccination_analytics():
    args = request.json
    log = {}
    log['request'] = args
    csv = args['csv'] == "y"
    from_str = custom_functions.obj_to_date(args['date_from']).split(" ")[0]
    to_str = custom_functions.obj_to_date(args['date_to'],
                                          extra_day=1).split(" ")[0]
    station_ids = args['station']
    vaccine_name = args['vaccine_name'] if 'vaccine_name' in args else None
    batch_id = args['batch_id'] if 'batch_id' in args else None
    return_obj = {}
    main_obj = []
    csv_query = "AND name='{}' " if vaccine_name else ""
    csv_query = csv_query + ("AND package_id='{}' " if batch_id else "")
    sub_select_query = "SELECT package_id,name,date_rec,beneficiary_no,vaccine_no,station_other FROM kba.batch_immunisation_log WHERE \
         station_id='{}' AND date_rec >= '{}' AND date_rec <= '{}' " + csv_query + "allow filtering;"
    try:
        for station in station_ids:
            if vaccine_name:
                sub_logs = cassandra_client.session.execute(
                    sub_select_query.format(str(station), from_str, to_str,
                                            vaccine_name, batch_id))
            else:
                sub_logs = cassandra_client.session.execute(
                    sub_select_query.format(str(station), from_str, to_str,
                                            batch_id))
            for sub_log in sub_logs:
                datestr = str(sub_log.date_rec)
                if sub_log.package_id in return_obj:
                    if datestr in return_obj[sub_log.package_id]:
                        obj = {}
                        obj['batch_id'] = sub_log.package_id
                        obj['vaccine_name'] = sub_log.name
                        if csv:
                            dat = custom_functions.date_to_string(
                                datestr, False)
                        else:
                            try:
                                format = custom_functions.date_to_string(
                                    datestr, False)
                                dat = str(format['dd']) + "/" + str(
                                    format['mm']) + "/" + str(format['yyyy'])
                            except:
                                dat = ""
                        obj['date_of_administration'] = dat
                        obj['no_of_doses_administered'] = sub_log.vaccine_no
                        obj['no_of_beneficiaries_administered'] = sub_log.beneficiary_no
                        main_obj.append(obj)

                    else:
                        return_obj[sub_log.package_id][datestr] = []
                        obj = {}
                        obj['batch_id'] = sub_log.package_id
                        obj['vaccine_name'] = sub_log.name
                        if csv:
                            dat = custom_functions.date_to_string(
                                datestr, False)
                        else:
                            try:
                                format = custom_functions.date_to_string(
                                    datestr, False)
                                dat = str(format['dd']) + "/" + str(
                                    format['mm']) + "/" + str(format['yyyy'])
                            except:
                                dat = ""
                        obj['date_of_administration'] = dat
                        obj['no_of_doses_administered'] = sub_log.vaccine_no
                        obj['no_of_beneficiaries_administered'] = sub_log.beneficiary_no
                        main_obj.append(obj)
                else:
                    return_obj[sub_log.package_id] = {}
                    return_obj[sub_log.package_id][datestr] = []
                    obj = {}
                    obj['batch_id'] = sub_log.package_id
                    obj['vaccine_name'] = sub_log.name
                    if not csv:
                        dat = custom_functions.date_to_string(datestr, False)
                    else:
                        try:
                            format = custom_functions.date_to_string(
                                datestr, False)
                            dat = str(format['dd']) + "/" + str(
                                format['mm']) + "/" + str(format['yyyy'])
                        except:
                            dat = ""
                    obj['date_of_administration'] = dat
                    obj['no_of_doses_administered'] = sub_log.vaccine_no
                    obj['no_of_beneficiaries_administered'] = sub_log.beneficiary_no
                    main_obj.append(obj)
        if main_obj:
            if csv:
                file_name = generate_csv(main_obj)
                record = {
                    'status_code': 200,
                    'status_msg': "Posted successfully",
                    "file_name": file_name
                }
            else:
                record = {
                    'status_code': 200,
                    'status_msg': "Posted successfully",
                    "data": main_obj
                }
        else:
            record = {
                'status_code': 404,
                'status_msg': "No records found",
                "data": []
            }
    except Exception as e:
        error_email.send_email({'error': str(e), 'url': request.url})
        record = {'status_code': 500, "status_msg": str(e)}
    log['response'] = record
    ml_station_vaccination_analytics.insert_one(log)
    return jsonify(record)
def show():
    try:
        args = request.json
        log = {}
        log['request'] = args
        return_data = []
        if False:  ## TO DO LATER.
            from_obj = args['date']
            from_time = custom_functions.obj_to_date(from_obj)
            args['date']['HH'] = 23
            args['date']['MM'] = 59
            to_obj = args['date']
            to_time = custom_functions.obj_to_date(to_obj)
            sub_select_query = "SELECT id,name,dose_count,package_id,manufacturing_date,manufacturer_info,date_time FROM kba.vaccine_sub_log WHERE status='received' \
            AND date_time >= '{}' AND date_time <= '{}'   \
            AND station_id={} allow filtering;"

        else:
            sub_select_query = "SELECT * FROM kba.vaccine_sub_log WHERE \
            current_station_id={} allow filtering;"

        for station_id in args['station_id']:
            station_obj = {}
            station_obj["station_id"] = station_id
            station_obj["vaccines"] = {}
            sub_logs = cassandra_client.session.execute(
                sub_select_query.format(station_id))
            for sub_log in sub_logs:
                vaccine_name = sub_log.name
                if vaccine_name in station_obj["vaccines"]:
                    if sub_log.status == "send":
                        station_obj["vaccines"][vaccine_name][
                            'transit_count'] = station_obj["vaccines"][
                                vaccine_name][
                                    'transit_count'] + sub_log.dose_count
                    else:
                        station_obj["vaccines"][vaccine_name][
                            'received_count'] = station_obj["vaccines"][
                                vaccine_name][
                                    'received_count'] + sub_log.dose_count
                    count_obj = {}
                    count_obj['count'] = sub_log.dose_count
                    count_obj['vaccine_sub_id'] = str(sub_log.id)
                    count_obj['package_id'] = sub_log.package_id
                    count_obj['previous_station'] = dict(
                        sub_log.previous_station)
                    count_obj[
                        'status'] = "In-Transit" if sub_log.status == "send" else "Received"
                    count_obj[
                        'date_checked_in'] = custom_functions.date_to_string(
                            sub_log.date_time)
                    count_obj[
                        'manufacturing_date'] = custom_functions.date_to_string(
                            sub_log.manufacturing_date)
                    count_obj['expiry_date'] = custom_functions.date_to_string(
                        sub_log.expiry_date)
                    count_obj['manufacturer_info'] = sub_log.manufacturer_info
                    station_obj["vaccines"][vaccine_name]['batches'].append(
                        count_obj)
                else:
                    station_obj["vaccines"][vaccine_name] = {}
                    if sub_log.status == "send":
                        station_obj["vaccines"][vaccine_name][
                            'transit_count'] = sub_log.dose_count
                        station_obj["vaccines"][vaccine_name][
                            'received_count'] = 0
                    else:
                        station_obj["vaccines"][vaccine_name][
                            'transit_count'] = 0
                        station_obj["vaccines"][vaccine_name][
                            'received_count'] = sub_log.dose_count
                    station_obj["vaccines"][vaccine_name]['batches'] = []
                    count_obj = {}
                    count_obj['count'] = sub_log.dose_count
                    count_obj['vaccine_sub_id'] = str(sub_log.id)
                    count_obj['package_id'] = sub_log.package_id
                    count_obj[
                        'status'] = "In-Transit" if sub_log.status == "send" else "Received"
                    count_obj['previous_station'] = dict(
                        sub_log.previous_station)
                    count_obj[
                        'date_checked_in'] = custom_functions.date_to_string(
                            sub_log.date_time)
                    count_obj[
                        'manufacturing_date'] = custom_functions.date_to_string(
                            sub_log.manufacturing_date)
                    count_obj['expiry_date'] = custom_functions.date_to_string(
                        sub_log.expiry_date)
                    count_obj['manufacturer_info'] = sub_log.manufacturer_info
                    if (station_obj["vaccines"][vaccine_name]['transit_count']
                            + station_obj["vaccines"][vaccine_name]
                        ['received_count']) > 0:
                        station_obj["vaccines"][vaccine_name][
                            'batches'].append(count_obj)
            return_data.append(station_obj)
        if return_data:
            record = {
                'status_code': 200,
                'status_msg': "Posted successfully",
                "data": return_data
            }
        else:
            record = {
                'status_code': 404,
                'status_msg': "No records found",
                "data": []
            }
    except Exception as e:
        error_email.send_email({'error': str(e), 'url': request.url})
        record = {'status_code': 500, "status_msg": str(e)}
    log['response'] = record
    ml_station_vaccine_analytics.insert_one(log)
    return jsonify(record)
Esempio n. 15
0
    def post(self):
        """
            Documentation

            Params:
                Specified below.

            Returns:
                JSON dict
            Sample Request: requests.post(url='http://192.168.1.22:5000/api/immunization', params={"beneficiary_id":"8992KOKOK","batch_id":"34232DDW","batch_type_id":"qqq","beneficiary_type_id":"898HBBJ","station_id":"werwer1113","medicine_id":"2","vile_image":"base encoded string"})
        """
        parser = reqparse.RequestParser()
        parser.add_argument('Age', type=dict, required=True,
                            help="vaccination_dict")
        parser.add_argument('edited', type=dict, required=True,
                            help="discarded_dict")
        parser.add_argument('BeneficiaryId', type=str, required=True,
                            help="benefeciary id")
        parser.add_argument('nextDate', type=dict, required=True,
                            help="next date")
        parser.add_argument('BeneficiaryIdType', type=str, required=True,
                            help="beneficiary type not defined")
        parser.add_argument('station_other', type=dict, required=True)
        parser.add_argument('GeoLocation', type=dict,required=True,
                            help="geo location not detailed")
        parser.add_argument('currentDate', type=dict)
        '''
        parser.add_argument('comment', type=str,required=False)
        '''
        args = parser.parse_args()
        fields = "(id,vaccine_id, vaccine_dose_id, current_date, next_date, beneficiary_id, beneficiary_details,vaccine_details,beneficiary_type, age, station_id, station_other, geo_location)"
        try:
            log = {}
            log['request'] = args
            age_object = {}
            age_vaccine_data = args["Age"]
            ages = age_vaccine_data.keys()
            child_rec = session.query(Child).filter(Child.rch_id == args["BeneficiaryId"]).first()
            rch_user = session.query(RCHUser).filter(RCHUser.id == child_rec.rch_user_id).first()
            if bool(args["currentDate"]):
                current_time = custom_functions.obj_to_date(args["currentDate"],False)
            else:
                current_time = datetime.now()

            if bool(args["nextDate"]):
                nd = custom_functions.obj_to_date(args["nextDate"]['date'],False)
            else:
                nd = None

            if not bool(args['station_other']):
                    args['station_other'] = call_et()

            if args["edited"].keys():
                self.discard_taken_vaccination(args["edited"],args['BeneficiaryId'],args["station_other"])

            if child_rec:
                cassandra_client.set_table("immunisation_log",fields)
                for age in ages:
                        age_object[age] = {}
                        vaccines = age_vaccine_data[age]
                        vaccines_keys = vaccines.keys()
                        for vaccine_name in vaccines_keys:
                            vaccine_object = vaccines[vaccine_name]
                            if bool(vaccine_object):
                                vaccine_id = vaccine_object["vaccine_package_id"] if "vaccine_package_id" in vaccine_object else None

                                vd = session.query(VaccineDose).filter(VaccineDose.name == vaccine_name).first()

                                vacc_exists = session.query(Vaccination) \
                                .filter(Vaccination.beneficiary_id==args["BeneficiaryId"]) \
                                .filter(Vaccination.vaccine_batch_id==vaccine_id)\
                                .filter(Vaccination.vaccine_dose_id==vd.id).first()

                                if vacc_exists:
                                    continue

                                if bool(args["currentDate"]) and not vaccine_id:
                                    vaccine_id = "ExternalPackageID"
                                vaccine_current_date = str(current_time)
                                vaccine_next_date = vaccine_object["next_date"] if "next_date" in vaccine_object else ""

                                age_object[age][vaccine_name] ={}


                                mv = session.query(MissedVaccination) \
                                .filter(MissedVaccination.beneficiary_id == args["BeneficiaryId"]) \
                                .filter(MissedVaccination.vaccine_dose_id == vd.id) \
                                .filter(MissedVaccination.age == age)
                                if vaccine_id:
                                    beneficiary_details = {}
                                    beneficiary_details['child_name'] = child_rec.name
                                    beneficiary_details['mother_name'] = rch_user.name
                                    beneficiary_details['date_of_birth'] = child_rec.date_of_birth.strftime("%Y-%m-%d %H:%M:%S")
                                    beneficiary_details['father_name'] = rch_user.husband_name
                                    beneficiary_details['address'] = rch_user.address
                                    beneficiary_details['sex'] = child_rec.gender

                                    vaccine_details = {}
                                    vac = vd.vaccine
                                    vaccine_details['vaccine_id'] = str(vac.id)
                                    vaccine_details['vaccine_name'] = vac.name
                                    vaccine_details['vaccine_dose_id'] = str(vd.id)
                                    vaccine_details['vaccine_dose_name'] = vd.name

                                    age_object[age][vaccine_name]['vaccine_id'] = vac.id
                                    age_object[age][vaccine_name]['vaccine_name'] = vac.name
                                    age_object[age][vaccine_name]['vaccine_dose_id'] = vd.id
                                    age_object[age][vaccine_name]['vaccine_dose_name'] = vd.name
                                    age_object[age][vaccine_name]['package_id'] = vaccine_id
                                    age_object[age][vaccine_name]['vaccination_date'] = current_time.strftime("%Y-%m-%d")


                                    cassandra_client.insert_data(uuid.uuid4(), str(vaccine_id), vd.id, vaccine_current_date,  \
                                     vaccine_next_date, args["BeneficiaryId"],beneficiary_details,\
                                     vaccine_details, args["BeneficiaryIdType"], age, str(args["station_other"]['station_id']), \
                                    eval(json.dumps(args["station_other"])),args["GeoLocation"])
                                    mvd = mv.filter(MissedVaccination.active == True).first()
                                    if mvd:
                                        mvd.active = False
                                        session.add(mvd)
                                        session.commit()

                                    v = Vaccination(
                                    beneficiary_id=args["BeneficiaryId"],
                                    beneficiary_id_type =args["BeneficiaryIdType"],
                                    age =age,
                                    vaccine_batch_id = vaccine_id,
                                    current_date=current_time,
                                    next_date= nd,
                                    station_id = int(args["station_other"]['station_id']),
                                    vaccine_dose_id = vd.id)

                                    session.add(v)
                                    session.commit()
                                else:
                                    v = session.query(Vaccination) \
                                    .filter(Vaccination.beneficiary_id==args["BeneficiaryId"]) \
                                    .filter(Vaccination.age ==age) \
                                    .filter(Vaccination.vaccine_dose_id == vd.id)
                                    if not v.first():
                                        mv = MissedVaccination(
                                        beneficiary_id=args["BeneficiaryId"],
                                        beneficiary_id_type =args["BeneficiaryIdType"],
                                        age=age,
                                        reason = vaccine_object["reason"] if "reason" in vaccine_object and vaccine_object['reason'] else "Automated Reason",
                                        current_date=current_time,
                                        next_date= nd,
                                        station_id = int(args["station_other"]['station_id']),
                                        vaccine_dose_id = vd.id)

                                        nxt = custom_functions.obj_to_date(vaccine_object["next_vaccine_date"],False)

                                        age_object[age][vaccine_name]['expected_date'] = nxt.strftime("%Y-%m-%d")

                                        session.add(mv)
                                        session.commit()
                                if "vaccine_batch_id" in vaccine_object and vaccine_object['vaccine_batch_id']:#.replace('{"','{').replace(', "',',').replace('":',':')
                                    beneficiary_dict = {"beneficiary_id":args["BeneficiaryId"],"vaccine_dose_id":vd.id,"age":age,"time_rec":current_time.strftime("%H:%M:%S")}
                                    vaccine_dict = {"vaccine_id":str(vaccine_object["vaccine_batch_id"]),"time_rec":current_time.strftime("%H:%M:%S")}
                                    batch_imm_log = "UPDATE kba.batch_immunisation_log SET name='{}',              \
                                    beneficiary_no={}, vaccine_no={}, station_other={},   \
                                    beneficiary_list=beneficiary_list+[{}],  vaccine_list=vaccine_list+[{}]     \
                                    WHERE package_id='{}' AND date_rec='{}' AND station_id='{}';"

                                    vaccine_sub_log_rec = cassandra_client.session.execute("SELECT beneficiary_no,vaccine_no FROM kba.batch_immunisation_log WHERE package_id='{}' AND date_rec='{}' AND station_id='{}';"\
                                    .format(vaccine_id, current_time.strftime("%Y-%m-%d"), args["station_other"]['station_id']))

                                    if vaccine_sub_log_rec:
                                        beneficiary_no = vaccine_sub_log_rec[0].beneficiary_no + 1
                                        vaccine_no = vaccine_sub_log_rec[0].vaccine_no + 1
                                    else:
                                        beneficiary_no = 1
                                        vaccine_no = 1

                                    beneficiary_obj_replica = json.dumps(beneficiary_dict).replace('{"','{').replace(', "',',').replace('":',':').replace('"',"'")
                                    vaccine_obj_replica = json.dumps(vaccine_dict).replace('{"','{').replace(', "',',').replace('":',':').replace('"',"'")

                                    vaccine_sub_log_rec = cassandra_client.session.execute('SELECT * FROM kba.vaccine_sub_log WHERE id='+str(vaccine_object["vaccine_batch_id"])+';')
                                    new_count = vaccine_sub_log_rec[0].dose_count - 1
                                    cassandra_client.session.execute('UPDATE kba.vaccine_sub_log SET dose_count ='+str(new_count)+' WHERE id='+str(vaccine_object["vaccine_batch_id"])+';')


                                    cassandra_client.session.execute(batch_imm_log.format(vd.vaccine.name,str(beneficiary_no),str(vaccine_no),\
                                    eval(json.dumps(args["station_other"])), beneficiary_obj_replica, vaccine_obj_replica\
                                     ,vaccine_id, current_time.strftime("%Y-%m-%d"), args["station_other"]['station_id']))

                self.update_beneficiary_immunisation_tracking(child_rec.rch_id, age_object,args["nextDate"])
                record = {'status_code': 200,'status_msg': "API is successfully posted."}
            else:
                record = {'status_code': 404,'status_msg': "Child Record Not found."}
        except Exception as e:
            error_email.send_email({'error':str(e),'url':'/immunization/post'})
            record = {'status_code': 500, "status_msg": str(e)}
        log['response'] = record
        ml_immunisation_post.insert_one(log)
        return record
def pregnancy_children_data():
    args = request.args
    log = {'request':args}
    try:
        pregnancy_id = args['record_pregnancy_id']
        preg_rec = session.query(PregnancyDetail).filter(PregnancyDetail.pregnancy_id == pregnancy_id).first()
        if preg_rec:
            rch_rec = session.query(RCHUser).filter(RCHUser.id == preg_rec.rch_user_id).first()
            child_recs = session.query(Child).filter(Child.pregnancy_detail_id == preg_rec.id,Child.deleted==False).all()
            response_data = []
            for child_rec in child_recs:
                    rec = {}
                    record = cassandra_client.session.execute("SELECT JSON * FROM kba.beneficiary_immunisation_tracking WHERE beneficiary_id='"+child_rec.rch_id+"';")[0]
                    vaccination_object = json.loads(record.json)['vaccination_object']
                    ages = session.execute("SELECT * FROM ages ORDER BY weeks;")
                    ages_obj = []
                    for age in ages:
                        o = {}
                        o['name'] = age.code
                        ages_obj.append(o)
                    ages_obj.reverse()
                    main_vaccined = False
                    vaccines = []
                    for _age in ages_obj:
                        vaccine_obj = {}
                        vaccined =False
                        vaccine_obj['age'] = _age['name']
                        vaccine_obj['missed'] = []
                        vaccine_obj['vaccines'] = []
                        current_age_v_objects = vaccination_object[_age['name']]
                        if main_vaccined:
                            for current_age_v_objects_key in current_age_v_objects.keys():
                                current_age_v_object = current_age_v_objects[current_age_v_objects_key]
                                if not current_age_v_object['vaccine_id']:
                                    vaccine_obj['missed'].append({
                                        'age':_age['name'],
                                        'vaccine':current_age_v_objects_key,
                                        'eligible_date': date_to_string(current_age_v_object['expected_date'],False)
                                        })
                        else:
                            for current_age_v_objects_key in current_age_v_objects.keys():
                                current_age_v_object = current_age_v_objects[current_age_v_objects_key]
                                if current_age_v_object['vaccine_id']:
                                    main_vaccined = True
                                    vaccined = True

                            for current_age_v_objects_key in current_age_v_objects.keys():
                                current_age_v_object = current_age_v_objects[current_age_v_objects_key]
                                if vaccined:
                                    if not current_age_v_object['vaccine_id']:
                                        vaccine_obj['missed'].append({
                                            'age':_age['name'],
                                            'vaccine': current_age_v_objects_key,
                                            'eligible_date': date_to_string(current_age_v_object['expected_date'],False)
                                            })
                                else:
                                    vaccine_obj['vaccines'].append({
                                        'age':_age['name'],
                                        'vaccine': current_age_v_objects_key,
                                        'eligible_date': date_to_string(current_age_v_object['expected_date'],False)
                                        })
                        vaccines.append(vaccine_obj)
                    vaccines.reverse()
                    rec['dob'] = date_to_string(child_rec.date_of_birth)
                    rec['rch_id'] = child_rec.rch_id
                    rec['child_name'] = child_rec.name
                    rec['deleted'] = child_rec.deleted
                    rec['gender'] = child_rec.gender
                    rec['child_age'] = '1'
                    rec['woman_name'] = rch_rec.name
                    rec['husband_name'] = rch_rec.husband_name
                    rec['phone_no'] = rch_rec.phone_no_1
                    rec['address'] = rch_rec.address
                    rec['husband_name'] = rch_rec.husband_name
                    rec['vaccines'] = vaccines
                    response_data.append(rec)
            record = {'status_code': 200, "status_msg": "Success","data":response_data}
        else:
            record = {'status_code': 404, "status_msg": "Mother record not found."}
    except Exception as e:
        error_email.send_email({'error':str(e),'url':request.url})
        record = {'status_code': 500, "status_msg": str(e)}
    log['response'] = record
    ml_pregnancy_children_data.insert_one(log)
    return jsonify(record)
Esempio n. 17
0
def get_wb_content(bs, userid, type):
    global ERROR_INFO
    get_user_info(bs, userid, type)
    wb_num = db.query(
        "select weibo_num from users where user_id={};".format(userid))[0][0]
    if wb_num == 0:
        print("weibo_num: 0.")
    elif wb_num < 11:
        bs.get('https://weibo.cn/' + userid)
        time.sleep(2)
        pagesource = bs.page_source.encode('utf-8').decode('utf-8')
        if '还没发过微博.' in pagesource:
            ERROR_INFO += '{} 首页显示未发过微博,需要核实\n'.format(userid)
            error_email.send_email('{} 首页显示未发过微博,需要核实\n'.format(userid))
            return
        else:
            soup = BeautifulSoup(pagesource, 'html.parser')
            class_c = soup.select(".c")
            get_weibo_info(bs, class_c, userid)
    else:
        flag = 3  # 防止页面打开失败,并限制重试次数
        while flag > 0:
            bs.get('https://weibo.cn/' + userid)
            time.sleep(2)
            pagesource = bs.page_source.encode('utf-8').decode('utf-8')
            if '她还没发过微博.' in pagesource:
                flag -= 1
                continue
            elif '如果没有自动跳转,请' in pagesource:
                flag -= 1
                continue
            elif not re.search(r'1/\d+页</div>', pagesource):  # 防止首页没有页码数
                ERROR_INFO += '{}首页无法显示用户页码\n'.format(userid)
                flag -= 1
                print(ERROR_INFO)
                continue
            elif '<title>我的首页</title>' in pagesource:
                flag -= 1
                continue
            else:
                soup = BeautifulSoup(pagesource, 'html.parser')
                class_c = soup.select('.c')
                if len(class_c) == 3:
                    flag -= 1
                    continue
                else:
                    flag = -1
        with open('test.txt', 'w', encoding='utf-8') as file:
            file.write(pagesource)
        if flag == 0:
            ERROR_INFO += '{}首页重试次数超限\n'.format(userid)
            error_email.send_email('{}首页重试次数超限\n'.format(userid))
        else:
            soup = BeautifulSoup(pagesource, 'html.parser')
            page_num = int(
                re.findall(r'1/(\d+)页',
                           soup.select(".pa")[0].text)[0])
            page_num = page_num if page_num < 8 else 8
            class_c = soup.select(".c")
            get_weibo_info(bs, class_c, userid)  # 获取第一页微博内容
            for num in range(2, page_num + 1):
                flag = 3  # 防止页面打开失败
                while flag > 0:
                    bs.get('https://weibo.cn/' + userid + '?page=' + str(num))
                    time.sleep(2)
                    pagesource = bs.page_source.encode('utf-8').decode('utf-8')
                    if '还没发过微博.' in pagesource:
                        flag -= 1
                        continue
                    elif '如果没有自动跳转,请' in pagesource:
                        flag -= 1
                        continue
                    elif '<title>我的首页</title>' in pagesource:
                        flag -= 1
                        continue
                    else:
                        soup = BeautifulSoup(pagesource, 'html.parser')
                        class_c = soup.select('.c')
                        if len(class_c) == 3:
                            flag -= 1
                            continue
                        else:
                            flag = -1
                print('current page: {}/{}'.format(num, page_num))
                # 测试代码
                with open('test.txt', 'w', encoding='utf-8') as file:
                    file.write(pagesource)
                if flag == 0:
                    ERROR_INFO += '{}用户重试次数超限,当前错误页面{}/{}\n'.format(
                        userid, num, page_num)
                    error_email.send_email('{}用户重试次数超限,当前错误页面{}/{}\n'.format(
                        userid, num, page_num))
                else:
                    get_weibo_info(bs, class_c, userid)
def lookup_data():
    try:
        log = {}
        languages = session.query(Language).all()
        lang_obj = []
        for language in languages:
            obj = {}
            obj['name'] = language.name
            obj['id'] = language.code
            lang_obj.append(obj)

        ages = session.query(Age).all()
        vac_obj = {}
        vac_obj['vaccine'] = []
        vaccine_names_id = {}
        vaccine_names = {}
        for age in ages:
            age_vaccines = session.query(AgeVaccine).filter(AgeVaccine.age_id == age.id).all()
            obj = {}
            obj['age'] = age.code
            obj['vaccines'] = []
            for age_vaccine in age_vaccines:
                vaccine_dose = session.query(VaccineDose).filter(VaccineDose.id == age_vaccine.vaccine_dose_id).first()
                vaccine = vaccine_dose.vaccine
                if vaccine.name in vaccine_names:
                    vaccine_names[vaccine.name].append(vaccine_dose.name)
                    vaccine_names_id[vaccine.name] = vaccine.id
                else:
                    vaccine_names[vaccine.name] = []
                    vaccine_names_id[vaccine.name] = vaccine.id
                    vaccine_names[vaccine.name].append(vaccine_dose.name)
                obj['vaccines'].append(vaccine_dose.name)#{"name":vaccine_dose.name,"parent_name":vaccine.name})
            vac_obj['vaccine'].append(obj)

        stations_obj = {}
        stations_obj['stations_list'] = []
        stations = session.query(Station).all()
        for station in stations:
            if station.code != "ET1":
                obj = {}
                obj['station_name'] = station.name
                obj['station_code'] = station.code
                obj['station_id'] = str(station.id)
                location = session.query(Location).filter(Location.id == station.location_id).first()
                obj['station_address'] = location.name
                stations_obj['stations_list'].append(obj)

        roles = session.query(Role).all()
        roles_obj = []
        for role in roles:
            if not role.role_name in ['admin','rch_user']:
                roles_obj.append({'id':role.id,'name':role.role_name})

        record = {
                    'status_code': 200,
                    'status_msg': "Success",
                    "languages":lang_obj,
                    'vaccines':vac_obj,
                    'vaccine_names':vaccine_names,
                    'vaccine_names_id':vaccine_names_id,
                    'stations':stations_obj,
                    'roles':roles_obj
                }
    except Exception as e:
        error_email.send_email({'error':str(e),'url':request.url})
        record = {'status_code': 500, "status_msg": str(e)}
    log['response'] = record
    ml_lookup_data.insert_one(log)
    return jsonify(record)
Esempio n. 19
0
def login(username, psw):
    try:
        rec = session.query(User).filter(User.username == username).first()
        if rec:
            check = check_password(psw, rec.password)
            if check:
                id = rec.id
                user_roles = session.query(UserRole).filter(
                    UserRole.user_id == id).all()
                station_users = session.query(StationUser).filter(
                    StationUser.user_id == id).all()
                ur = []
                for user_r in user_roles:
                    role_rec = session.query(Role).filter(
                        Role.id == user_r.role_id).first()
                    ur.append(role_rec.role_name)

                st = []
                for station_user in station_users:
                    station_rec = session.query(Station).filter(
                        Station.id == station_user.station_id).first()
                    location = session.query(Location).filter(
                        Location.id == station_rec.location_id).first()
                    st.append({
                        'station_id': station_rec.id,
                        'station_name': station_rec.name,
                        'station_code': station_rec.code,
                        'station_address': location.name
                    })
                access_token = create_access_token(
                    identity=id,
                    expires_delta=timedelta(
                        seconds=server_config.
                        Config["ACCESS_TOKEN_EXPIRY_TIME"]))
                refresh_token = create_refresh_token(
                    identity=id,
                    expires_delta=timedelta(
                        seconds=server_config.
                        Config["REFRESH_TOKEN_EXPIRY_TIME"]))
                rec.refresh_token = refresh_token
                session.commit()
                response = {
                    'code': 200,
                    'result': True,
                    'username': rec.name,
                    'message': "User logged in.",
                    "roles": ur,
                    "stations": st,
                    'access_token': access_token,
                    'refresh_token': refresh_token
                }
            else:
                id = None
                response = {
                    'code': 404,
                    'result': False,
                    'message': "Username or Password is Wrong."
                }
        else:
            id = None
            response = {
                'code': 404,
                'result': False,
                'message': "Username not found."
            }
    except Exception as e:
        session.rollback()
        id = None
        error_email.send_email({'error': str(e), 'url': '/login'})
        response = {'code': 500, 'result': False, "message": str(e)}
    return response, id
Esempio n. 20
0
            '2635172317', '5607072131'
        ]
        u2 = [
            '5224178651', '5292093513', '5543871990', '3514150117',
            '5573225406', '2122149263', '5608624080', '1973593033',
            '2978842514'
        ]
        pool = Pool(2)
        arr = [u1, u2]
        sep_time = 0  # 设置登录间隔,防止登录卡死
        res = list()
        for item in arr:
            res.append(pool.apply_async(func, args=(item, sep_time, 'normal')))
            sep_time = 4
        pool.close()
        pool.join()
        for item in res:
            item.get(11)
        print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))
        # 保存错误日志
        with open('error.log', 'w+', encoding='utf-8') as f:
            f.writelines(ERROR_INFO)
            print(ERROR_INFO)
            error_email.send_email('本次任务完成。\n' + ERROR_INFO)
    except Exception as e:
        error_email.send_email(traceback.format_exc() + '\n' + '本次任务信息:\n' +
                               ERROR_INFO)
        print(ERROR_INFO)
        with open('error.log', 'w+', encoding='utf-8') as f:
            f.writelines(ERROR_INFO)
Esempio n. 21
0
def get_weibo_info(bs, source, userid):
    global ERROR_INFO
    for i in range(1, len(source) - 2):
        # bug检测
        if len(source[i].select(".ct")) < 1:
            ERROR_INFO += source[i].text
            break
        posttime = source[i].select(".ct")[0].text
        text = source[i].text
        like, repost, comment = re.findall(
            r'赞\[(\d+)\]\s转发\[(\d+)\]\s评论\[(\d+)\]', text)[0]
        wb_content = source[i].select('div')[0].text
        if '转发了' in wb_content and len(source[i].select('div')) > 1:
            wb_content += source[i].select('div')[-1].text
        if '...全文' in wb_content:
            fulltext_link = source[i].select('div')[0].select('a')
            for item in fulltext_link:
                if '全文' in item.text:
                    new_url = base_url + item['href']
                    flag = 3  # 防止页面打开失败, 并设置重试次数
                    while flag > 0:
                        bs.get(new_url)
                        time.sleep(2)
                        tmp_pagesource = bs.page_source.encode('utf-8').decode(
                            'utf-8')
                        if '她还没发过微博.' in tmp_pagesource:
                            flag -= 1
                            continue
                        elif '如果没有自动跳转,请' in tmp_pagesource:
                            flag -= 1
                            continue
                        elif '<title>我的首页</title>' in tmp_pagesource:
                            flag -= 1
                            continue
                        else:
                            soup = BeautifulSoup(tmp_pagesource, 'html.parser')
                            tmp_select = soup.select('.c')
                            if len(tmp_select) == 3:
                                flag -= 1
                                continue
                            else:
                                flag = -1

                    with open('test.txt', 'w', encoding='utf-8') as file:
                        file.write(tmp_pagesource)

                    if flag == 0:
                        error_email.send_email(
                            '{}用户全文显示时出现异常,{} Source code:{}\n'.format(
                                userid, new_url, tmp_pagesource))

                        ERROR_INFO += '{}用户全文显示时出现异常, Source code:{}\n'.format(
                            userid, tmp_pagesource)
                    else:
                        # 检查是否数组越界
                        if len(tmp_select) < 2:
                            ERROR_INFO += tmp_pagesource + '\n'
                            error_email.send_email(userid + '数组越界: ' +
                                                   tmp_pagesource)
                        else:
                            wb_content = tmp_select[1].select('div')[0].text if len(tmp_select[1].select('div')) > 0 else \
                            tmp_select[2].select('div')[0].text
                            lt = [
                                userid, wb_content, posttime, repost, comment,
                                like
                            ]
                            lt = [mysql.pymysql.escape_string(i)
                                  for i in lt]  # 转义特殊sql字符
                            sql = "insert into wb(user_id, content, post_time, repost_num, comment_num, like_num) " \
                                  "values('{}','{}','{}',{},{},{});".format(*lt)
                            db.insert(sql)
                        # wb_content = soup.select('.c')[1].select('div')[0].text
        else:
            lt = [userid, wb_content, posttime, repost, comment, like]
            lt = [mysql.pymysql.escape_string(i) for i in lt]  # 转义特殊sql字符
            sql = "insert into wb(user_id, content, post_time, repost_num, comment_num, like_num) values('{}','{}'," \
                  "'{}',{},{},{});".format(*lt)
            db.insert(sql)
    def get(self):
        """
            Documentation

            Params:
                var1: required
                var2: required

            Returns:
                JSON dict
        """
        parser = reqparse.RequestParser()
        parser.add_argument('station_id',
                            type=int,
                            required=True,
                            location='args',
                            help="Station ID is required.")
        parser.add_argument('request_type',
                            type=str,
                            required=True,
                            location='args',
                            help="Send whether it is sent or confirmed data")
        args = parser.parse_args()
        try:
            data = []
            log = {}
            log['request'] = args
            sub_select_query = "SELECT * FROM kba.vaccine_sub_log WHERE status='{}' AND current_station_id={} AND dose_count > 0 allow filtering;"
            if args['request_type'] == 'send':  #STOCK OUT
                sub_logs = cassandra_client.session.execute(
                    sub_select_query.format('received',
                                            str(args['station_id'])))
            elif args[
                    'request_type'] == 'confirm':  #STOCK IN   :     When registered the first status is this.
                sub_logs = cassandra_client.session.execute(
                    sub_select_query.format('send', str(args['station_id'])))
            for sub_log in sub_logs:
                obj = {}
                obj['status'] = sub_log.status
                obj['datetime'] = custom_functions.date_to_string(
                    sub_log.date_time)
                obj['uuid'] = str(sub_log.id)
                obj['previous_uuid'] = str(
                    sub_log.previous_uuid) if sub_log.previous_uuid else None
                obj['dose_count'] = sub_log.dose_count
                obj['package_id'] = sub_log.package_id
                obj['comments'] = sub_log.comments
                obj['adjustments'] = {
                    'doses': sub_log.transit_loss,
                    'remarks': sub_log.transit_remark
                }
                obj['from_station'] = dict(sub_log.previous_station)
                obj['to_station'] = dict(sub_log.current_station)
                vaccine_select_query = "SELECT package_type_id,name,manufacturing_date,expiry_date,manufacturer_info FROM vaccine_log WHERE package_id='{}' LIMIT 1;"
                vaccine_log = cassandra_client.session.execute(
                    vaccine_select_query.format(str(sub_log.package_id)))[0]
                obj['package_type_id'] = vaccine_log.package_type_id
                obj['name'] = vaccine_log.name
                obj['manufacturing_date'] = custom_functions.date_to_string(
                    vaccine_log.manufacturing_date)
                obj['expiry_date'] = custom_functions.date_to_string(
                    vaccine_log.expiry_date)
                obj['manufacturer_info'] = vaccine_log.manufacturer_info
                data.append(obj)

            record = {
                'status_code': 200,
                'status_message': 'Success',
                'station_vaccine': data
            }

        except Exception as e:
            error_email.send_email({'error': str(e), 'url': '/vaccine/get'})
            record = {
                'status_code': 500,
                'status_message': 'API failed: Internal Server Error',
                'msg': str(e)
            }
        log['response'] = record
        ml_vaccine_get.insert_one(log)
        return record
def creation():
    args = request.json
    log = {}
    log['request'] = args
    if not "phone_no" in args:
        log['response'] = {"status_code":400, "status_msg": "Bad Request. Phone Number not found."}
        ml_register_rch_user.insert_one(log)
        return jsonify({"status_code":400, "status_msg": "Bad Request. Phone Number not found."})
    if args["phone_no"] == "":
        log['response'] = {"status_code": 400, "status_msg": "Bad Request. Phone Number not valid."}
        ml_register_rch_user.insert_one(log)
        return jsonify({"status_code":400, "status_msg": "Bad Request. Phone Number not valid."})
    try:
        if "record_unique_id" in args:
            r = session.query(RCHUser).filter(RCHUser.phone_no_1 == args["phone_no"])
            rch_rec_phone = r.count()
            rch_rec =r.first()
            if rch_rec_phone > 0 and args['record_unique_id'] != rch_rec.uid:
                log['response'] ={"status_code":400, "record_unique_id":rch_rec.uid, "status_msg": "Phone number is already taken for another user."}
                ml_register_rch_user.insert_one(log)
                return jsonify(log['response'])

            rch_rec = session.query(RCHUser).filter(RCHUser.uid == args["record_unique_id"]).first()
            woman_dob = obj_to_date(args["woman_dob"],False)
            husband_dob = obj_to_date(args["husband_dob"],False)
            preg_rec = session.query(PregnancyDetail).filter(PregnancyDetail.rch_user_id == rch_rec.id).all()
            record_pregnancy_ids = []
            for p in preg_rec:
                record_pregnancy_ids.append(p.pregnancy_id)
            rch_rec.name = args["woman_name"]
            rch_rec.dob = woman_dob,
            rch_rec.address = args["address"]
            rch_rec.phone_no_1 = str(args["phone_no"])
            rch_rec.phone_no_2 = args["phone_no_1"]
            rch_rec.age = args["woman_age"]
            rch_rec.husband_name = args["husband_name"]
            rch_rec.husband_dob = husband_dob,
            rch_rec.husband_age = args["husband_age"]
            rch_rec.family_reg_no = args["family_registration_number"]
            rch_rec.mother_education = args["mother_education"]
            rch_rec.unique_id = args["unique_id"]
            rch_rec.aadhar_id = args["aadhar_id"]
            rch_rec.income = args["income"]
            rch_rec.caste = args["caste"]
            rch_rec.ec_no = args["ec_no"]
            rch_rec.apl_bpl = args["apl_bpl"]
            rch_rec.bank_account_number = args["bank_account_number"]
            rch_rec.ifsc_code = args["ifsc_code"]
            rch_rec.category = args["category"]
            session.commit()
            record = {'status_code': 200, "woman_name":rch_rec.name,"record_unique_id":rch_rec.uid ,"record_pregnancy_ids":record_pregnancy_ids,"status_msg": "Details have been successfully edited."}
        else:
            rec = session.query(User).filter(User.username == str(args["phone_no"])).first()
            role = session.query(Role).filter(Role.role_name == "rch_user").first()
            uid = get_random_id()
            if rec:
                user = rec
            else:
                passwd = create_hash(args["unique_id"])
                user=User(
                    username=str(args["phone_no"]),
                    password=passwd,
                    unique_id=uid
                )
                session.add(user)
                session.commit()
                user_role = UserRole(role_id=role.id,user_id=user.id)
                session.add(user_role)
                session.commit()
            rch_rec = session.query(RCHUser).filter(RCHUser.user_id == user.id).first()

            if rch_rec:
                preg_recs = session.query(PregnancyDetail).filter(PregnancyDetail.rch_user_id == rch_rec.id).all()
                preg_dates = {}
                for preg_rec in preg_recs:
                    children = session.query(Child).filter(Child.pregnancy_detail_id == preg_rec.id).all()
                    child_arr = []
                    for child in children:
                        child_arr.append(child.date_of_birth)
                    child_arr.sort()
                    preg_dates[preg_rec.pregnancy_id] = date_to_string(child_arr[-1])
                return jsonify({"status_code":401,"record_unique_id":rch_rec.uid, "pregnancy_dates":preg_dates, "status_msg": "RCH User already exists"})
            else:
                woman_dob = obj_to_date(args["woman_dob"], False)
                husband_dob = obj_to_date(args["husband_dob"], False)
                rch_user=RCHUser(
                    user_id = user.id,
                    name = args["woman_name"],
                    dob = woman_dob,
                    address = args["address"],
                    phone_no_1 = str(args["phone_no"]),
                    phone_no_2 = args["phone_no_1"],
                    age = args["woman_age"],
                    husband_name = args["husband_name"],
                    husband_dob = husband_dob,
                    husband_age = args["husband_age"],
                    family_reg_no = args["family_registration_number"],
                    mother_education = args["mother_education"],
                    unique_id = args["unique_id"],
                    aadhar_id = args["aadhar_id"],
                    income = args["income"],
                    uid= uid,
                    caste = args["caste"],
                    ec_no = args["ec_no"],
                    apl_bpl = args["apl_bpl"],
                    bank_account_number = args["bank_account_number"],
                    ifsc_code = args["ifsc_code"],
                    category = args["category"]
                )
                session.add(rch_user)
                session.commit()

            record = {'status_code': 200, "woman_name":rch_user.name, "record_unique_id":rch_user.uid ,"status_msg": "Details have been successfully created."}
    except Exception as e:
        session.rollback()
        error_email.send_email({'error':str(e),'url':request.url})
        record = {'status_code': 500, "status_msg": str(e)}
    log['response'] = record
    ml_register_rch_user.insert_one(log)
    return jsonify(record)
def create_service_provider():
    args = request.json
    log = {}
    log['request'] = args
    if not "record_pregnancy_id" in args:
        log['response'] = {"status_code":400, "status_msg": "Bad Request. RCH ID not found."}
        ml_register_service_provider.insert_one(log)
        return jsonify({"status_code":400, "status_msg": "Bad Request. RCH ID not found."})
    if args["record_pregnancy_id"] == "":
        log['response'] = {"status_code": 400, "status_msg": "Bad Request. RCH ID not valid."}
        ml_register_service_provider.insert_one(log)
        return jsonify({"status_code":400, "status_msg": "Bad Request. RCH ID not valid."})
    try:
        if ("record_pregnancy_id" in args) and ("record_service_id" in args):
            date_of_first_registration =obj_to_date(args["date_of_first_registration"], False)
            serv_rec = session.query(ServiceProvider).filter(ServiceProvider.id == args["record_service_id"]).first()
            if serv_rec:
                serv_rec.health_centre = args["health_centre"]
                serv_rec.sub_centre = args["sub_centre"]
                serv_rec.asha = args["asha"]
                serv_rec.asha_phone = args["asha_phone"]
                serv_rec.jphn = args["jphn"]
                serv_rec.jphn_phone = args["jphn_phone"]
                serv_rec.hospital_for_delivery = args["hospital_for_delivery"]
                serv_rec.hospital_address = args["hospital_address"]
                serv_rec.birth_companion = args["birth_companion"]
                serv_rec.transportation_arrangement = args["transportation_arrangement"]
                serv_rec.registered_for_pmmvy = False#args["registered_for_pmmvy"]
                serv_rec.first_financial_aid = False#args["first_financial_aid"]
                serv_rec.second_financial_aid = False#args["second_financial_aid"]
                serv_rec.third_financial_aid = False#args["third_financial_aid"]
                serv_rec.anganwadi_worker = args["anganwadi_worker"]
                serv_rec.anganwadi_registration_number = args["anganwadi_registration_number"]
                serv_rec.anganwadi_centre = args["anganwadi_centre"]
                serv_rec.anganwadi_phone = args["anganwadi_phone"]
                serv_rec.icds = args["icds"]
                serv_rec.sub_centre_registration_number = args["sub_centre_registration_number"]
                serv_rec.date_of_first_registration = date_of_first_registration
                serv_rec.nearest_station_id = int(args["nearest_station"]["station_id"] if "station_id" in args["nearest_station"] else 0)
                session.commit()
                record = {'status_code': 200, "record_service_id":serv_rec.id ,"status_msg": "Successfully updated."}
            else:
                jsonify({"status_code":404, "status_msg": "Record Service Provider Not Found."})
        else:
            preg_detail = session.query(PregnancyDetail).filter(PregnancyDetail.pregnancy_id == args["record_pregnancy_id"]).first()
            if preg_detail:
                date_of_first_registration =obj_to_date(args["date_of_first_registration"], False)
                serv_rec = ServiceProvider(
                    pregnancy_detail_id = preg_detail.id,
                    health_centre = args["health_centre"],
                    sub_centre = args["sub_centre"],
                    asha = args["asha"],
                    asha_phone = args["asha_phone"],
                    jphn = args["jphn"],
                    jphn_phone = args["jphn_phone"],
                    hospital_for_delivery = args["hospital_for_delivery"],
                    hospital_address = args["hospital_address"],
                    birth_companion = args["birth_companion"],
                    transportation_arrangement = args["transportation_arrangement"],
                    registered_for_pmmvy = False,#args["registered_for_pmmvy"],
                    first_financial_aid = False,#args["first_financial_aid"],
                    second_financial_aid = False,#args["second_financial_aid"],
                    third_financial_aid = False,#args["third_financial_aid"],
                    anganwadi_worker = args["anganwadi_worker"],
                    anganwadi_registration_number = args["anganwadi_registration_number"],
                    anganwadi_centre = args["anganwadi_centre"],
                    anganwadi_phone = args["anganwadi_phone"],
                    icds = args["icds"],
                    sub_centre_registration_number = args["sub_centre_registration_number"],
                    date_of_first_registration = date_of_first_registration,
                    nearest_station_id = int(args["nearest_station"]["station_id"] if "station_id" in args["nearest_station"] else 0)
                )
                session.add(serv_rec)
                session.commit()
                record = {'status_code': 200, "record_service_id":serv_rec.id ,"status_msg": "Successfully created."}
    except Exception as e:
        session.rollback()
        error_email.send_email({'error':str(e),'url':request.url})
        record = {'status_code': 500, "status_msg": str(e)}
    log['response'] = record
    ml_register_service_provider.insert_one(log)
    return jsonify(record)
def create_pregnancy():
    args = request.json
    log = {}
    log['request'] = args
    if not "record_unique_id" in args:
        log['response'] = {"status_code":400, "status_msg": "Bad Request. Unique ID not found."}
        ml_register_pregnancy.insert_one(log)
        return jsonify({"status_code":400, "status_msg": "Bad Request. Unique ID not found."})
    if args["record_unique_id"] == "":
        log['response'] = {"status_code": 400, "status_msg": "Bad Request. Unique ID not valid."}
        ml_register_pregnancy.insert_one(log)
        return jsonify({"status_code":400, "status_msg": "Bad Request. Unique ID is not  valid."})
    try:
        if "record_pregnancy_id" in args:
            preg_rec = session.query(PregnancyDetail).filter(PregnancyDetail.pregnancy_id == args["record_pregnancy_id"]).first()
            rec = session.query(RCHUser).filter(RCHUser.uid == args["record_unique_id"]).first()
            menstruation_date = obj_to_date(args["menstruation_date"], False)
            expected_delivery_date = obj_to_date(args["expected_delivery_date"], False)
            last_delivery_date = obj_to_date(args["last_delivery_date"], False)
            serv_rec = session.query(ServiceProvider).filter(ServiceProvider.pregnancy_detail_id == preg_rec.id).first()
            tt1_date = obj_to_date(args["tt1_date"], False)
            tt2_date = obj_to_date(args["tt2_date"], False)
            usg1_date = obj_to_date(args["usg1_date"], False)
            usg2_date = obj_to_date(args["usg2_date"], False)
            usg3_date = obj_to_date(args["usg3_date"], False)
            preg_rec.rch_user_id = rec.id,
            preg_rec.phone_no=args["phone_no"]
            preg_rec.drivers_number=args["drivers_number"]
            preg_rec.menstruation_date=menstruation_date,
            preg_rec.expected_delivery_date=expected_delivery_date,
            preg_rec.blood_group=args["blood_group"]
            preg_rec.last_delivery_date=last_delivery_date,
            preg_rec.rsby_reg_number=args["rsby_reg_number"]
            preg_rec.jsy_reg_number=args["jsy_reg_number"]
            preg_rec.gravida=int(args["gravida"]),
            preg_rec.para=int(args["para"]),
            preg_rec.no_of_live_children=int(args["no_of_live_children"]),
            preg_rec.no_of_abortions=int(args["no_of_abortions"]),
            preg_rec.tt1_date=tt1_date,
            preg_rec.tt2_date=tt2_date,
            preg_rec.usg1_date=usg1_date,
            preg_rec.usg2_date=usg2_date,
            preg_rec.usg3_date=usg3_date,
            preg_rec.important_findings=args["important_findings"]
            preg_rec.complication_details=args["complication_details"]
            preg_rec.heart_complications=args["heart_complications"]
            preg_rec.advice=args["advice"]
            preg_rec.referrals=args["referrals"]
            preg_rec.contraceptive_methods_used=args["contraceptive_methods_used"]
            preg_rec.rh_category=args["rh_category"]
            preg_rec.previous_delivery=args["previous_delivery"]
            child_rch_data = []
            for child_record in args["child_data"]:
                if child_record['rch_id']:
                    child_rec = session.query(Child).filter(Child.rch_id == child_record['rch_id'],Child.deleted==False).first()
                    dob = obj_to_date(child_record['dob'], False)
                    child_rec.name = child_record['name']
                    child_rec.gender = child_record['gender']
                    child_rec.deleted = True if child_record['deleted'] == "true"  else False
                    child_rec.date_of_birth = dob
                    update_beneficiary_immunisation_tracking(child_rec.rch_id,dob)
                    child_rch_data.append(child_rec.rch_id)
                    session.commit()
                else:
                    dob = obj_to_date(child_record['dob'], False) if child_record['dob'] else datetime.now()
                    child_rec = Child(
                        name=child_record['name'] if child_record['name'] else "Baby" + rec.name,
                        gender=child_record['gender'],
                        pregnancy_detail_id=preg_rec.id,
                        rch_user_id=rec.id,
                        date_of_birth=dob ,
                        rch_id = child_record['dup_rch_id'] if 'dup_rch_id' in child_record else "",
                        deleted = True if child_record['deleted'] == "true"  else False
                    )

                    session.add(child_rec)
                    session.commit()
                    create_beneficiary_immunisation_tracking(child_rec.rch_id,dob)
                    child_rch_data.append(child_rec.rch_id)
                    add_to_cassandra(child_rec.rch_id, '3')
                    producer.ProduceBeneficiaryData('Add_Beneficiary', '3', child_rec.rch_id)

            record = {'status_code': 200,
            'woman_name':rec.name ,
            "record_pregnancy_id": preg_rec.pregnancy_id,
            "record_service_id":serv_rec.id if serv_rec else None ,
            "record_rch_ids": child_rch_data,
            "status_msg": "Pregnancy edited successfully."}
        else:
            rec = session.query(RCHUser).filter(RCHUser.uid == args["record_unique_id"]).first()
            if rec:
                menstruation_date = obj_to_date(args["menstruation_date"], False)
                expected_delivery_date = obj_to_date(args["expected_delivery_date"], False)
                last_delivery_date = obj_to_date(args["last_delivery_date"], False)

                tt1_date = obj_to_date(args["tt1_date"], False)
                tt2_date = obj_to_date(args["tt2_date"], False)
                usg1_date = obj_to_date(args["usg1_date"], False)
                usg2_date = obj_to_date(args["usg2_date"], False)
                usg3_date = obj_to_date(args["usg3_date"], False)

                preg_rec=PregnancyDetail(
                    rch_user_id = rec.id,
                    phone_no=args["phone_no"],
                    drivers_number=args["drivers_number"],
                    menstruation_date=menstruation_date,
                    expected_delivery_date=expected_delivery_date,
                    blood_group=args["blood_group"],
                    last_delivery_date=last_delivery_date,
                    rsby_reg_number=args["rsby_reg_number"],
                    jsy_reg_number=args["jsy_reg_number"],
                    gravida=int(args["gravida"]),
                    para=int(args["para"]),
                    no_of_live_children=int(args["no_of_live_children"]),
                    no_of_abortions=int(args["no_of_abortions"]),
                    tt1_date=tt1_date,
                    tt2_date=tt2_date,
                    usg1_date=usg1_date,
                    usg2_date=usg2_date,
                    usg3_date=usg3_date,
                    important_findings=args["important_findings"],
                    complication_details=args["complication_details"],
                    heart_complications=args["heart_complications"],
                    advice=args["advice"],
                    referrals=args["referrals"],
                    contraceptive_methods_used=args["contraceptive_methods_used"],
                    rh_category=args["rh_category"],
                    previous_delivery=args["previous_delivery"],
                    pregnancy_id=args["pregnancy_id"] if "pregnancy_id" in args else ""
                )
                session.add(preg_rec)
                session.commit()
                child_rch_data = []
                if args["child_data"]:
                    for child_record in args["child_data"]:
                        dob = obj_to_date(child_record['dob'], False) if child_record['dob'] else datetime.now()
                        child_rec = Child(
                            name=child_record['name'] if child_record['name'] else "Baby" + rec.name,
                            gender=child_record['gender'],
                            pregnancy_detail_id=preg_rec.id,
                            rch_user_id=rec.id,
                            deleted = True if child_record['deleted'] == "true"  else False,
                            rch_id = child_record['dup_rch_id'] if 'dup_rch_id' in child_record else "",
                            date_of_birth=dob
                        )
                        session.add(child_rec)
                        session.commit()
                        create_beneficiary_immunisation_tracking(child_rec.rch_id,dob)
                        child_rch_data.append(child_rec.rch_id)
                        add_to_cassandra(child_rec.rch_id, '3');
                        producer.ProduceBeneficiaryData('Add_Beneficiary', '3', child_rec.rch_id)
                else:
                    child_rec = Child(
                        name= "Baby" + rec.name,
                        gender= "m",
                        pregnancy_detail_id= preg_rec.id,
                        rch_user_id= rec.id,
                        rch_id =  "",
                        date_of_birth= datetime.now()
                    )
                    session.add(child_rec)
                    session.commit()
                    create_beneficiary_immunisation_tracking(child_rec.rch_id,datetime.now())
                    child_rch_data.append(child_rec.rch_id)
                    add_to_cassandra(child_rec.rch_id, '3');
                    producer.ProduceBeneficiaryData('Add_Beneficiary', '3', child_rec.rch_id)
            record = {'status_code': 200,'woman_name':rec.name ,"record_pregnancy_id": preg_rec.pregnancy_id,"record_rch_ids":child_rch_data ,"status_msg": "Pregnancy created Successfully."}
    except Exception as e:
        session.rollback()
        error_email.send_email({'error':str(e),'url':request.url})
        record = {'status_code': 500, "status_msg": str(e)}
    log['response'] = record
    ml_register_pregnancy.insert_one(log)
    return jsonify(record)
    def post(self):
        """
            Documentation

            Params:
                Specified below.

            Returns:
                JSON dict
            Sample Request: requests.post(url='http://192.168.1.22:5000/api/vaccine', params={"batch_id":"8992KOKOK","batch_type_id":"qqq","comment":"some random comment"})
        """
        parser = reqparse.RequestParser()
        parser.add_argument('package_id',
                            type=str,
                            required=True,
                            help="package_id required")
        parser.add_argument('package_type_id',
                            type=str,
                            required=True,
                            help="package_type_id required")
        parser.add_argument('uuid',
                            type=str,
                            required=True,
                            help="uuid required")
        parser.add_argument('dose_count',
                            type=str,
                            required=True,
                            help="dose_count required")
        parser.add_argument('name',
                            type=str,
                            required=True,
                            help="name required")
        parser.add_argument('manufacturing_date',
                            type=dict,
                            required=True,
                            help="manufacturing_date required")
        parser.add_argument('expiry_date',
                            type=dict,
                            required=True,
                            help="expiry_date required")
        parser.add_argument('manufacturer_info',
                            type=str,
                            required=True,
                            help="manufacturer_info required")
        parser.add_argument('from_station',
                            type=dict,
                            required=True,
                            help="from_station required")
        parser.add_argument('to_station',
                            type=dict,
                            required=True,
                            help="to_station required")
        parser.add_argument('adjustments', type=dict)
        parser.add_argument('comments', type=str)
        parser.add_argument('previous_uuid', type=str)
        parser.add_argument('status',
                            type=str,
                            required=True,
                            help="status is required")
        args = parser.parse_args()

        try:

            log = {}
            log['request'] = args
            current_user = get_jwt_identity()
            now = datetime.now()
            data = {
                'uuid': args['uuid'],
                'package_id': args['package_id'],
                'package_type_id': args['package_type_id'],
                'name': args['name'],
                'manufacturing_date': args['manufacturing_date'],
                'manufacturer_info': args['manufacturer_info'],
                'expiry_date': args['expiry_date'],
                'to_station': json.dumps(args['to_station']),
                'from_station': json.dumps(args['from_station']),
                'previous_uuid': args['previous_uuid'],
                'dose_count': args['dose_count'],
                'user_id': str(current_user),
                'adjustments':
                args['adjustments'] if args['adjustments'] else {
                    'doses': 0,
                    'remarks': 'auto_generated'
                },
                'comments': args['comments'] if args['comments'] else "nil",
                'date_time': now.strftime("%m/%d/%Y, %H:%M:%S"),
                'status': args['status']
            }
            if args['adjustments']:
                if (int(args['adjustments']['doses']) > int(
                        data['dose_count'])):
                    return {
                        'status_code':
                        400,
                        "status_msg":
                        "Lost count seems to be greater than dose count."
                    }

            if args['previous_uuid'] and args['status'] == "send":
                status = self.reduce_dose_count(data)
                if status != "Success":
                    return {'status_code': 400, "status_msg": status}

            self.insert_to_cassandra(data, now)

            producer.ProduceVaccineData('Add_Vaccine', data)
            record = {
                'status_code': 200,
                'status_msg': "API is successfully posted."
            }
        except Exception as e:
            error_email.send_email({'error': str(e), 'url': '/vaccine/post'})
            record = {'status_code': 500, "status_msg": str(e)}
        log['response'] = record
        ml_vaccine_post.insert_one(log)
        return record
Esempio n. 27
0
def discard_vaccine():
    try:
        args = request.json
        log = {}
        current_user = get_jwt_identity()
        log['request'] = args
        loss = int(args['discard_vaccine']['count'])
        loss_reason = args['discard_vaccine']['reason']
        sub_select_query = "SELECT * FROM kba.vaccine_sub_log WHERE id=" + args[
            'batch_id'] + ";"
        sub_log = cassandra_client.session.execute(sub_select_query)[0]
        if sub_log:
            old_count = sub_log.dose_count
            if old_count >= loss:
                new_count = old_count - loss
                update_query = "UPDATE kba.vaccine_sub_log SET dose_count=" + str(
                    new_count) + " WHERE id=" + args['batch_id'] + ";"
                cassandra_client.session.execute(update_query)

                now = datetime.now()
                dict_previous_station = dict(sub_log.previous_station)
                dict_current_station = dict(sub_log.current_station)
                data = {
                    'uuid': args['batch_id'],
                    'package_id': str(sub_log.package_id),
                    'package_type_id': 't',
                    'name': sub_log.name,
                    'manufacturing_date': str(sub_log.manufacturing_date),
                    'manufacturer_info': sub_log.manufacturer_info,
                    'expiry_date': str(sub_log.expiry_date),
                    'to_station': str(dict_previous_station),
                    'from_station': str(dict_current_station),
                    'previous_uuid': str(sub_log.previous_uuid),
                    'dose_count': str(new_count),
                    'user_id': str(current_user),
                    'adjustments': {
                        'doses': 0,
                        'remarks': 'auto_generated'
                    },
                    'comments': loss_reason,
                    'date_time': now.strftime("%m/%d/%Y, %H:%M:%S"),
                    'status': "received"
                }

                VacTransferLogDB.insert_data(
                    uuid.uuid4(), uuid.UUID(args['batch_id']),
                    int(sub_log.previous_station_id), dict_previous_station,
                    int(sub_log.current_station_id),
                    dict_current_station, "Discard Transaction", loss_reason,
                    str(current_user), "received", now)
                producer.ProduceVaccineData('Add_Vaccine', data)
                record = {
                    'status_code': 200,
                    "status_msg": "API Posted Successfully"
                }
            else:
                record = {
                    'status_code': 400,
                    "status_msg": "Loss is greater than current count."
                }
        else:
            record = {
                'status_code': 404,
                "status_msg": "No Vaccine found for this ID."
            }
    except Exception as e:
        error_email.send_email({'error': str(e), 'url': request.url})
        record = {'status_code': 500, "status_msg": str(e)}
    log['response'] = record
    ml_discard_vaccine.insert_one(log)
    return jsonify(record)