Exemple #1
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_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)
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 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 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 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_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 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 vaccination_coverage():
    try:
        args = request.json
        log = {}
        log['request'] = args
        year = args['year']
        vaccines = args['vaccine_doses']

        sub_select_query = "SELECT * FROM kba.beneficiary_immunisation_tracking allow filtering;"
        sub_logs = cassandra_client.session.execute(sub_select_query)
        age_vaccines = session.query(AgeVaccine).all()
        ages = session.query(Age).all()
        response_data = {}
        age_object = {}
        for age in ages:
            age_vaccines = session.query(AgeVaccine).filter(
                AgeVaccine.age_id == age.id).all()
            for age_vaccine in age_vaccines:
                vaccine_dose = session.query(VaccineDose).filter(
                    VaccineDose.id == age_vaccine.vaccine_dose_id).first()
                if vaccine_dose.id in vaccines:
                    if age.code in age_object:
                        age_object[age.code].append(
                            {'name': vaccine_dose.name})
                        response_data[vaccine_dose.name] = {
                            "beneficiaries_deserved": 0,
                            "beneficiaries_administered": 0
                        }
                    else:
                        age_object[age.code] = []
                        age_object[age.code].append(
                            {'name': vaccine_dose.name})
                        response_data[vaccine_dose.name] = {
                            "beneficiaries_deserved": 0,
                            "beneficiaries_administered": 0
                        }

        for sub_log in sub_logs:
            cassandra_vaccination_object = sub_log.vaccination_object
            for age in age_object.keys():
                age_vaccine_object = cassandra_vaccination_object[age]
                for vaccine_obj in age_object[age]:
                    vaccination_object = age_vaccine_object[
                        vaccine_obj['name']]
                    vaccination_date_object = custom_functions.date_to_string(
                        str(vaccination_object.expected_date), False)
                    if vaccination_date_object['yyyy'] in year:
                        response_data[vaccine_obj['name']][
                            'beneficiaries_deserved'] = response_data[
                                vaccine_obj['name']][
                                    'beneficiaries_deserved'] + 1
                        if vaccination_object.vaccine_id:
                            response_data[vaccine_obj['name']][
                                'beneficiaries_administered'] = response_data[
                                    vaccine_obj['name']][
                                        'beneficiaries_administered'] + 1
        response = []
        for vdname in response_data.keys():
            obj = {}
            obj['name'] = vdname
            obj['beneficiaries_deserved'] = response_data[vdname][
                'beneficiaries_deserved']
            obj['beneficiaries_administered'] = response_data[vdname][
                'beneficiaries_administered']
            response.append(obj)

        if response:
            record = {'status_code': 200, 'data': response}
        else:
            record = {
                'status_code': 404,
                "status_msg": "No data found.",
                'data': response
            }

    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_vaccination_coverage.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 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)
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 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)
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 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