Example #1
0
def save_in_db(submission):
    xml_string = submission.xml_data
    xml_parse = minidom.parseString(xml_string)
    status = error_list['SUCCESS']
    msg = "No error."
    if xml_parse.getElementsByTagName('data'):
        data = xml_parse.getElementsByTagName('data')
        try:
            if data[0].attributes["name"].value.lower(
            ) == 'screening form' or data[0].attributes["name"].value.lower(
            ) == 'screening form [en]':
                status, msg = save_mobile_data.save_screening_data(xml_parse)
            elif data[0].attributes["name"].value.lower(
            ) == 'adoption form' or data[0].attributes["name"].value.lower(
            ) == 'adoption form [en]':
                status, msg = save_mobile_data.save_adoption_data(xml_parse)
            else:
                status = error_list['UNIDENTIFIED_FORM']
                msg = 'Unidentified form. Data Tag with some other form name.'
        except Exception as ex:
            error = "Error in saving submission in save_in_db function " + str(
                ex)
            sendmail("Exception in Mobile COCO", error)
    elif xml_parse.getElementsByTagName('device_report'):
        status = error_list['DEVICE_REPORT']
        msg = 'device_report'
    else:
        status = error_list['UNIDENTIFIED_FORM']
        msg = 'Unidentified form. No data tag.'
    return status, msg
Example #2
0
File: views.py Project: xuan6/dg
def save_in_db(submission):
    xml_string = submission.xml_data
    xml_parse = minidom.parseString(xml_string)
    status = error_list['SUCCESS']
    msg = "No error."
    if xml_parse.getElementsByTagName('data'):
        data = xml_parse.getElementsByTagName('data')
        try:
            if data[0].attributes["name"].value.lower() == 'screening form' or data[0].attributes["name"].value.lower() == 'screening form [en]':
                status, msg = save_mobile_data.save_screening_data(xml_parse)
            elif data[0].attributes["name"].value.lower() == 'adoption form' or data[0].attributes["name"].value.lower() == 'adoption form [en]':
                status, msg = save_mobile_data.save_adoption_data(xml_parse)
            else:
                status = error_list['UNIDENTIFIED_FORM']
                msg = 'Unidentified form. Data Tag with some other form name.'
        except Exception as ex:
            error = "Error in saving submission in save_in_db function " + str(ex)
            sendmail("Exception in Mobile COCO", error)
    elif xml_parse.getElementsByTagName('device_report'):
        status = error_list['DEVICE_REPORT']
        msg = 'device_report'
    else:
        status = error_list['UNIDENTIFIED_FORM']
        msg = 'Unidentified form. No data tag.'
    return status, msg
Example #3
0
def save_pma(pma_record, Sid, status):
    for person in pma_record:
        try:
            PersonExisting = PersonMeetingAttendance.objects.filter(screening_id=Sid, person_id=person['person_id'])
            if not(len(PersonExisting)):
                pma = PersonMeetingAttendance(screening_id=Sid,
                                              person_id=person['person_id'])
                pma.full_clean()
                pma.save()
                status = 1
        except ValidationError, e:
            status = error_list['PMA_SAVE_ERROR'] 
            error = "Error in Saving PMA : " + str(e)
            sendmail("Exception in Mobile COCO. Error in Saving PMA {Line 164)", error)
Example #4
0
 def handle(self, *args, **options):
     xml_data = XMLSubmission.objects.filter(error_code=-3)
     print len(xml_data)
     length = 0
     for obj in xml_data:
         length = length + 1
         xml_string = obj.xml_data
         xml_parse = minidom.parseString(xml_string)
         print "#" + str(obj.id)
         old_msg = obj.error_message
         old_code = obj.error_code
         status = error_list['SUCCESS']
         msg = "success"
         if xml_parse.getElementsByTagName('data'):
             data = xml_parse.getElementsByTagName('data')
             try:
                 if data[0].attributes["name"].value.lower(
                 ) == 'screening form' or data[0].attributes[
                         "name"].value.lower() == 'screening form [en]':
                     status, msg = save_mobile_data.save_screening_data(
                         xml_parse)
                 elif data[0].attributes["name"].value.lower(
                 ) == 'adoption form' or data[0].attributes[
                         "name"].value.lower() == 'adoption form [en]':
                     status, msg = save_mobile_data.save_adoption_data(
                         xml_parse)
                 else:
                     status = error_list['UNIDENTIFIED_FORM']
                     msg = 'Unidentified form. Data Tag with some other form name.'
             except Exception as ex:
                 error = "Error in update_screening_xml : " + str(ex)
                 sendmail("Exception in update_screening_xml", error)
         elif xml_parse.getElementsByTagName('device_report'):
             status = error_list['DEVICE_REPORT']
             msg = 'device_report'
         else:
             status = error_list['UNIDENTIFIED_FORM']
             msg = 'Unidentified form. No data tag.'
         try:
             obj.error_code = status
             obj.error_message = msg
             obj.save()
         except Exception as ex:
             error = "Error in Updating XML Submission : " + str(ex)
             sendmail("Exception in update_screening_xml", error)
         print old_msg, old_code, obj.error_message, obj.error_code
     print length
Example #5
0
 def handle(self, *args, **options):
     xml_data = XMLSubmission.objects.filter(error_code=-3)
     print len(xml_data)
     length = 0
     for obj in xml_data:
         length = length + 1
         xml_string = obj.xml_data
         xml_parse = minidom.parseString(xml_string)
         print "#" + str(obj.id)
         old_msg = obj.error_message
         old_code = obj.error_code
         status = error_list["SUCCESS"]
         msg = "success"
         if xml_parse.getElementsByTagName("data"):
             data = xml_parse.getElementsByTagName("data")
             try:
                 if (
                     data[0].attributes["name"].value.lower() == "screening form"
                     or data[0].attributes["name"].value.lower() == "screening form [en]"
                 ):
                     status, msg = save_mobile_data.save_screening_data(xml_parse)
                 elif (
                     data[0].attributes["name"].value.lower() == "adoption form"
                     or data[0].attributes["name"].value.lower() == "adoption form [en]"
                 ):
                     status, msg = save_mobile_data.save_adoption_data(xml_parse)
                 else:
                     status = error_list["UNIDENTIFIED_FORM"]
                     msg = "Unidentified form. Data Tag with some other form name."
             except Exception as ex:
                 error = "Error in update_screening_xml : " + str(ex)
                 sendmail("Exception in update_screening_xml", error)
         elif xml_parse.getElementsByTagName("device_report"):
             status = error_list["DEVICE_REPORT"]
             msg = "device_report"
         else:
             status = error_list["UNIDENTIFIED_FORM"]
             msg = "Unidentified form. No data tag."
         try:
             obj.error_code = status
             obj.error_message = msg
             obj.save()
         except Exception as ex:
             error = "Error in Updating XML Submission : " + str(ex)
             sendmail("Exception in update_screening_xml", error)
         print old_msg, old_code, obj.error_message, obj.error_code
     print length
Example #6
0
def update_case(cases, filename, project_name):
    file = codecs.open(filename, "w",'utf-8')
    PersonMeetingAttendance = get_model('activities','PersonMeetingAttendance')
    PersonAdoptPractice = get_model('activities','PersonAdoptPractice')
    Person = get_model('people','Person')
    count = 0
    content_array = []
    for case in cases:
        case_id = case.guid
        owner_id = case.user.guid

        url = "".join(["https://www.commcarehq.org/a/", project_name, "/api/v0.5/case/", case_id, "/?type=json"])
        person = Person.objects.get(id=case.person_id)
        vids = PersonMeetingAttendance.objects.filter(person=person).values_list('screening__videoes_screened', flat = True).distinct()

        videos_seen = " ".join([unicode(v) for v in vids])

        # Getting list of videos adopted
        adopts = PersonAdoptPractice.objects.filter(person=person).values_list('video', flat = True).distinct()
        videos_adopted = " ".join([unicode(a) for a in adopts])

        #check for changes in the cases in dimagi

        try:
            r = requests.get(url, auth=HTTPDigestAuth(DIMAGI_USERNAME, DIMAGI_PASSWORD))
            data = json.loads(r.content)
        except Exception as e:
            error = "Person Name: "+str(person.person_name)+" Person ID: "+str(person.id)+" Case ID: "+str(case_id)+" Error: "+str(e)
            sendmail("Error in Uploading Cases", error)

        video_seen_in_case = sorted(data['properties']['videos_seen'].split())
        video_seen_in_db = sorted(videos_seen.split())
        print cmp(video_seen_in_case, video_seen_in_db)
        video_adopt_in_case = sorted(data['properties']['videos_adopted'].split())
        video_adopt_in_db = sorted(videos_adopted.split())
        print cmp(video_adopt_in_case, video_adopt_in_db)

        # Write xml for a particular person
        if (cmp(video_seen_in_case, video_seen_in_db) != 0 or cmp(video_adopt_in_case, video_adopt_in_db) != 0):
            write_person_update_content(content_array, count, case_id, owner_id, person, videos_seen, videos_adopted)
            count += 1
    write_opening_meta(file, count)
    for content in content_array:
        file.write(content)
    write_closing_meta(file, owner_id, count)
    file.close()
Example #7
0
def save_pma(pma_record, Sid, status):
    for person in pma_record:
        try:
            PersonExisting = PersonMeetingAttendance.objects.filter(
                screening_id=Sid, person_id=person['person_id'])
            if not (len(PersonExisting)):
                pma = PersonMeetingAttendance(screening_id=Sid,
                                              person_id=person['person_id'])
                pma.full_clean()
                pma.save()
                status = 1
        except ValidationError, e:
            status = error_list['PMA_SAVE_ERROR']
            error = "Error in Saving PMA : " + str(e)
            sendmail(
                "Exception in Mobile COCO. Error in Saving PMA {Line 164)",
                error)
Example #8
0
File: views.py Project: xuan6/dg
def save_submission(request):
    submission = XMLSubmission()
    ##For a test ping from Dimagi
    try:
        if not request.body:
            return HttpResponse(status=201)
        submission.xml_data = request.body
        submission.submission_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        submission.save()
        status, msg = save_in_db(submission)
        submission.error_code = status
        submission.error_message = msg
        update_submission(submission)
        submission.save()
        return HttpResponse(status=201)
    except Exception as ex:
        error = "Error in save_submission " + str(ex)
        sendmail("Exception in Mobile COCO", error)
        return HttpResponse(status=201)
Example #9
0
def save_submission(request):
    submission = XMLSubmission()
    ##For a test ping from Dimagi
    try:
        if not request.body:
            return HttpResponse(status=201)
        submission.xml_data = request.body
        submission.submission_time = datetime.datetime.now().strftime(
            "%Y-%m-%d %H:%M:%S")
        submission.save()
        status, msg = save_in_db(submission)
        submission.error_code = status
        submission.error_message = msg
        update_submission(submission)
        submission.save()
        return HttpResponse(status=201)
    except Exception as ex:
        error = "Error in save_submission " + str(ex)
        sendmail("Exception in Mobile COCO", error)
        return HttpResponse(status=201)
Example #10
0
def save_adoption_data(xml_tree):
    error_msg = ''
    try:
        xml_data = xml_tree.getElementsByTagName('data')
        commcare_user = CommCareUser.objects.get(guid = str(xml_tree.getElementsByTagName('n0:userID')[0].childNodes[0].nodeValue))
        cocouser = commcare_user.coco_user
        for record in xml_data:
            try:
                adoption_data = {}
                adoption_data['date'] = record.getElementsByTagName('selected_date')[0].firstChild.data
                adoption_data['selected_person'] = record.getElementsByTagName('selected_person')[0].firstChild.data
                adoption_data['selected_video'] = record.getElementsByTagName('selected_video')[0].firstChild.data
                try:
                    AdoptionExisting = PersonAdoptPractice.objects.filter(person_id=adoption_data['selected_person'], video_id=adoption_data['selected_video'], date_of_adoption=adoption_data['date'])
                    status = error_list['DUPLICATE_ADOPTION']
                    error_msg = 'Duplicate Adoption'
                    if not(len(AdoptionExisting)):
                        pap = PersonAdoptPractice(person_id=adoption_data['selected_person'],
                                                  date_of_adoption=adoption_data['date'],
                                                  video_id=adoption_data['selected_video'],
                                                  partner=cocouser.partner,
                                                  user_created=cocouser.user)

                        pap.full_clean()
                        pap.save()
                        status = 1
                        error_msg = 'Successful'
                except ValidationError, e:
                    status = error_list['ADOPTION_SAVE_ERROR']
                    error_msg = 'adoption_save_error'
                    error = "Error in Saving Adoption : " + str(e)
                    sendmail("Exception in Mobile COCO. Adoption save error (Line 168)", error)
            except Exception as ex:
                status = error_list['ADOPTION_READ_ERROR']
                error_msg = 'adoption_read_error'
                error = "Error in Reading Adoption : " + str(ex)
                sendmail("Exception in Mobile COCO. Adoption read error (Line 152)", error) 

    except Exception as e:
        status = error_list['USER_NOT_FOUND']
        error_msg = 'user_read_error'
        error = "Error in Reading User : "******"Exception in Mobile COCO. User read error (Line 147)", error)
    return status, error_msg
Example #11
0
def save_screening_data(xml_tree):
    status = {}
    error_msg = ''
    try:
        xml_data = xml_tree.getElementsByTagName('data')
        commcare_user = CommCareUser.objects.get(guid=str(xml_tree.getElementsByTagName('n0:userID')[0].childNodes[0].nodeValue))
        cocouser = commcare_user.coco_user
        if commcare_user.mediator.id:
            mediator = commcare_user.mediator.id
        for record in xml_data:
            try:
                screening_data = {}
                screening_data['date'] = record.getElementsByTagName('date')[0].firstChild.data
                screening_data['time'] = record.getElementsByTagName('time')[0].firstChild.data
                screening_data['selected_village'] = record.getElementsByTagName('selected_village')[0].firstChild.data
                screening_data['selected_group'] = record.getElementsByTagName('selected_group')[0].firstChild.data
                if record.getElementsByTagName('selected_mediator'):
                    screening_data['selected_mediator'] = record.getElementsByTagName('selected_mediator')[0].firstChild.data
                else:
                    screening_data['selected_mediator'] = mediator
                screening_data['selected_video'] = record.getElementsByTagName('selected_video')[0].firstChild.data
                if  screening_data['selected_video'] == '0' :
                    screening_data['selected_video'] = record.getElementsByTagName('additional_selected_video')[0].firstChild.data
                if record.getElementsByTagName('Feedback')[0].firstChild:
                    screening_data['question_asked'] = record.getElementsByTagName('Feedback')[0].firstChild.data
                else:
                    screening_data['question_asked'] = ""
                
                #Check if 'attendance_record' or 'attended' tag
                pma_record =[]
                if record.getElementsByTagName('attendance_record'):                
                    screening_data['attendance_record'] = record.getElementsByTagName('attendance_record')
                    for person in screening_data['attendance_record']:
                        if int(person.getElementsByTagName('attended')[0].firstChild.data) == 1:
                            pma = {}
                            pma['person_id'] = person.getElementsByTagName('attendee_id')[0].firstChild.data
                            pma_record.append(pma)
                    error_msg = 'Successful'
                else:
                    attendance_list =  str(record.getElementsByTagName('attended')[0].firstChild.data)
                    screening_data['attendance_record'] = map(int, str.split(attendance_list))
                    #if empty: 'NoneType' object has no attribute 'data' error in email. Not Using if statement here.
                    for person in screening_data['attendance_record']:
                        pma = {}
                        pma['person_id'] = person
                        pma_record.append(pma)
                    error_msg = 'Successful'

                # time is returned as string, doing funky things to retrieve it in time format  
                temp_time = screening_data['time'].split('.')
                temp_time = time.strptime(temp_time[0], "%H:%M:%S")
                temp_time = datetime(*temp_time[:6])
                screening_data['start_time'] = temp_time.time()

                try:
                    ScreeningObject = Screening.objects.get(animator_id=screening_data['selected_mediator'], date=screening_data['date'], start_time=screening_data['start_time'], village_id=screening_data['selected_village'])
                    status['screening'] = 1
                    # add only if group doesn't exist
                    for group in screening_data['selected_group'].split(" "):
                        GroupExisting = Screening.objects.filter(farmer_groups_targeted=group, id=ScreeningObject.id)
                        if not(len(GroupExisting)):
                            GroupObject = PersonGroup.objects.get(id=group)
                            ScreeningObject.farmer_groups_targeted.add(GroupObject)
                            ScreeningObject.save()
                            status['screening'] = 1
                            error_msg = 'Successful'
                        else:
                            status['screening'] = error_list['DUPLICATE_SCREENING']
                            error_msg = 'Duplicate Screening'

                    status['pma'] = save_pma(pma_record, ScreeningObject.id, status['screening'])
                    if status['pma'] == error_list['PMA_SAVE_ERROR']:
                        status['screening'] = error_list['PMA_SAVE_ERROR']
                        error_msg = 'pma_save_error'
                
                except Screening.DoesNotExist as e:
                    screening = Screening(date=screening_data['date'],
                                          start_time=screening_data['start_time'],
                                          location='Mobile',
                                          village_id=screening_data['selected_village'],
                                          animator_id=screening_data['selected_mediator'],
                                          questions_asked=screening_data['question_asked'],
                                          partner=cocouser.partner,
                                          user_created=cocouser.user)

                    try:
                        screening.full_clean()
                        screening.save()
                        status['screening'] = 1
   
                        try:
                            screening.farmer_groups_targeted = screening_data['selected_group'].split(" ") 
                            screening.videoes_screened = screening_data['selected_video'].split(" ")
                            screening.save()
                     
                        except Exception as e:
                            error = "Error in Saving Groups and Videos : " + str(e)
                            status['screening'] = error_list['SCREENING_SAVE_ERROR'] 
                            error_msg = 'screening_save_error'
                            sendmail("Exception in Mobile COCO. Error in saving groups and videos (Line 120)", error)

                        status['pma'] = save_pma(pma_record, screening.id, status['screening'])
                        if status['pma'] == error_list['PMA_SAVE_ERROR']:
                            status['screening'] = error_list['PMA_SAVE_ERROR']
                            error_msg = 'pma_save_error'

                    except ValidationError as err:
                        status['screening'] = error_list['SCREENING_SAVE_ERROR'] 
                        error_msg = 'screening_save_error'
                        error = "Error in Saving Screening : " + str(err)
                        sendmail("Exception in Mobile COCO. Screening save error (Line 114)", error)

            except Exception as ex:
                status['screening'] = error_list['SCREENING_READ_ERROR']
                error_msg = 'screening_read_error'
                error = "Error in Reading Screening : " + str(ex)
                sendmail("Exception in Mobile COCO. Error in reading XML.", error)

    except Exception as e:
        status['screening'] = error_list['USER_NOT_FOUND']
        error_msg = 'user_read_error'
        error = "Error in Reading User : "******"Exception in Mobile COCO. User not found (Line 17)", error)

    return status['screening'], error_msg
Example #12
0
def save_adoption_data(xml_tree):
    error_msg = ''
    try:
        xml_data = xml_tree.getElementsByTagName('data')
        commcare_user = CommCareUser.objects.get(guid=str(
            xml_tree.getElementsByTagName('n0:userID')
            [0].childNodes[0].nodeValue))
        cocouser = commcare_user.coco_user
        for record in xml_data:
            try:
                adoption_data = {}
                adoption_data['date'] = record.getElementsByTagName(
                    'selected_date')[0].firstChild.data
                adoption_data['selected_person'] = record.getElementsByTagName(
                    'selected_person')[0].firstChild.data
                adoption_data['selected_video'] = record.getElementsByTagName(
                    'selected_video')[0].firstChild.data
                try:
                    adoption_data[
                        'verification_date'] = record.getElementsByTagName(
                            'verification_date')[0].firstChild.data
                except Exception:
                    adoption_data['verification_date'] = None
                try:
                    AdoptionExisting = PersonAdoptPractice.objects.filter(
                        person_id=adoption_data['selected_person'],
                        video_id=adoption_data['selected_video'],
                        date_of_adoption=adoption_data['date'])
                    status = error_list['DUPLICATE_ADOPTION']
                    error_msg = 'Duplicate Adoption'
                    if not (len(AdoptionExisting)):
                        pap = PersonAdoptPractice(
                            person_id=adoption_data['selected_person'],
                            date_of_adoption=adoption_data['date'],
                            video_id=adoption_data['selected_video'],
                            partner=cocouser.partner,
                            user_created=cocouser.user,
                            date_of_verification=adoption_data[
                                'verification_date'])

                        pap.full_clean()
                        pap.save()
                        status = 1
                        error_msg = 'Successful'
                except ValidationError, e:
                    status = error_list['ADOPTION_SAVE_ERROR']
                    error_msg = 'adoption_save_error'
                    error = "Error in Saving Adoption : " + str(e)
                    sendmail(
                        "Exception in Mobile COCO. Adoption save error (Line 168)",
                        error)
            except Exception as ex:
                status = error_list['ADOPTION_READ_ERROR']
                error_msg = 'adoption_read_error'
                error = "Error in Reading Adoption : " + str(ex)
                sendmail(
                    "Exception in Mobile COCO. Adoption read error (Line 152)",
                    error)

    except Exception as e:
        status = error_list['USER_NOT_FOUND']
        error_msg = 'user_read_error'
        error = "Error in Reading User : "******"Exception in Mobile COCO. User read error (Line 147)", error)
    return status, error_msg
Example #13
0
def save_screening_data(xml_tree):
    status = {}
    error_msg = ''
    try:
        xml_data = xml_tree.getElementsByTagName('data')
        commcare_user = CommCareUser.objects.get(guid=str(
            xml_tree.getElementsByTagName('n0:userID')
            [0].childNodes[0].nodeValue))
        cocouser = commcare_user.coco_user
        if commcare_user.mediator.id:
            mediator = commcare_user.mediator.id
        for record in xml_data:
            try:
                screening_data = {}
                screening_data['date'] = record.getElementsByTagName(
                    'date')[0].firstChild.data
                screening_data['time'] = record.getElementsByTagName(
                    'time')[0].firstChild.data
                screening_data[
                    'selected_village'] = record.getElementsByTagName(
                        'selected_village')[0].firstChild.data
                screening_data['selected_group'] = record.getElementsByTagName(
                    'selected_group')[0].firstChild.data
                if record.getElementsByTagName('selected_mediator'):
                    screening_data[
                        'selected_mediator'] = record.getElementsByTagName(
                            'selected_mediator')[0].firstChild.data
                else:
                    screening_data['selected_mediator'] = mediator
                screening_data['selected_video'] = record.getElementsByTagName(
                    'selected_video')[0].firstChild.data
                if screening_data['selected_video'] == '0':
                    screening_data[
                        'selected_video'] = record.getElementsByTagName(
                            'additional_selected_video')[0].firstChild.data
                if record.getElementsByTagName('Feedback')[0].firstChild:
                    screening_data[
                        'question_asked'] = record.getElementsByTagName(
                            'Feedback')[0].firstChild.data
                else:
                    screening_data['question_asked'] = ""

                #Check if 'attendance_record' or 'attended' tag
                pma_record = []
                if record.getElementsByTagName('attendance_record'):
                    screening_data[
                        'attendance_record'] = record.getElementsByTagName(
                            'attendance_record')
                    for person in screening_data['attendance_record']:
                        if int(
                                person.getElementsByTagName('attended')
                            [0].firstChild.data) == 1:
                            pma = {}
                            pma['person_id'] = person.getElementsByTagName(
                                'attendee_id')[0].firstChild.data
                            pma_record.append(pma)
                    error_msg = 'Successful'
                else:
                    attendance_list = str(
                        record.getElementsByTagName('attended')
                        [0].firstChild.data)
                    screening_data['attendance_record'] = map(
                        int, str.split(attendance_list))
                    #if empty: 'NoneType' object has no attribute 'data' error in email. Not Using if statement here.
                    for person in screening_data['attendance_record']:
                        pma = {}
                        pma['person_id'] = person
                        pma_record.append(pma)
                    error_msg = 'Successful'

                # time is returned as string, doing funky things to retrieve it in time format
                temp_time = screening_data['time'].split('.')
                temp_time = time.strptime(temp_time[0], "%H:%M:%S")
                temp_time = datetime(*temp_time[:6])
                screening_data['start_time'] = temp_time.time()

                try:
                    ScreeningObject = Screening.objects.get(
                        animator_id=screening_data['selected_mediator'],
                        date=screening_data['date'],
                        start_time=screening_data['start_time'],
                        village_id=screening_data['selected_village'])
                    status['screening'] = 1
                    # add only if group doesn't exist
                    for group in screening_data['selected_group'].split(" "):
                        GroupExisting = Screening.objects.filter(
                            farmer_groups_targeted=group,
                            id=ScreeningObject.id)
                        if not (len(GroupExisting)):
                            GroupObject = PersonGroup.objects.get(id=group)
                            ScreeningObject.farmer_groups_targeted.add(
                                GroupObject)
                            ScreeningObject.save()
                            status['screening'] = 1
                            error_msg = 'Successful'
                        else:
                            status['screening'] = error_list[
                                'DUPLICATE_SCREENING']
                            error_msg = 'Duplicate Screening'

                    status['pma'] = save_pma(pma_record, ScreeningObject.id,
                                             status['screening'])
                    if status['pma'] == error_list['PMA_SAVE_ERROR']:
                        status['screening'] = error_list['PMA_SAVE_ERROR']
                        error_msg = 'pma_save_error'

                except Screening.DoesNotExist as e:
                    screening = Screening(
                        date=screening_data['date'],
                        start_time=screening_data['start_time'],
                        location='Mobile',
                        village_id=screening_data['selected_village'],
                        animator_id=screening_data['selected_mediator'],
                        questions_asked=screening_data['question_asked'],
                        partner=cocouser.partner,
                        user_created=cocouser.user)

                    try:
                        screening.full_clean()
                        screening.save()
                        status['screening'] = 1

                        try:
                            screening.farmer_groups_targeted = screening_data[
                                'selected_group'].split(" ")
                            screening.videoes_screened = screening_data[
                                'selected_video'].split(" ")
                            screening.save()

                        except Exception as e:
                            error = "Error in Saving Groups and Videos : " + str(
                                e)
                            status['screening'] = error_list[
                                'SCREENING_SAVE_ERROR']
                            error_msg = 'screening_save_error'
                            sendmail(
                                "Exception in Mobile COCO. Error in saving groups and videos (Line 120)",
                                error)

                        status['pma'] = save_pma(pma_record, screening.id,
                                                 status['screening'])
                        if status['pma'] == error_list['PMA_SAVE_ERROR']:
                            status['screening'] = error_list['PMA_SAVE_ERROR']
                            error_msg = 'pma_save_error'

                    except ValidationError as err:
                        status['screening'] = error_list[
                            'SCREENING_SAVE_ERROR']
                        error_msg = 'screening_save_error'
                        error = "Error in Saving Screening : " + str(err)
                        sendmail(
                            "Exception in Mobile COCO. Screening save error (Line 114)",
                            error)

            except Exception as ex:
                status['screening'] = error_list['SCREENING_READ_ERROR']
                error_msg = 'screening_read_error'
                error = "Error in Reading Screening : " + str(ex)
                sendmail("Exception in Mobile COCO. Error in reading XML.",
                         error)

    except Exception as e:
        status['screening'] = error_list['USER_NOT_FOUND']
        error_msg = 'user_read_error'
        error = "Error in Reading User : "******"Exception in Mobile COCO. User not found (Line 17)", error)

    return status['screening'], error_msg
Example #14
0
def update_case(cases, filename, project_name):
    file = codecs.open(filename, "w", 'utf-8')
    PersonMeetingAttendance = get_model('activities',
                                        'PersonMeetingAttendance')
    PersonAdoptPractice = get_model('activities', 'PersonAdoptPractice')
    Person = get_model('people', 'Person')
    count = 0
    content_array = []
    for case in cases:
        case_id = case.guid
        owner_id = case.user.guid

        url = "".join([
            "https://www.commcarehq.org/a/", project_name, "/api/v0.5/case/",
            case_id, "/?type=json"
        ])
        person = Person.objects.get(id=case.person_id)
        vids = PersonMeetingAttendance.objects.filter(
            person=person).values_list('screening__videoes_screened',
                                       flat=True).distinct()

        videos_seen = " ".join([unicode(v) for v in vids])

        # Getting list of videos adopted
        adopts = PersonAdoptPractice.objects.filter(person=person).values_list(
            'video', flat=True).distinct()
        videos_adopted = " ".join([unicode(a) for a in adopts])

        #check for changes in the cases in dimagi

        try:
            r = requests.get(url,
                             auth=HTTPDigestAuth(DIMAGI_USERNAME,
                                                 DIMAGI_PASSWORD))
            data = json.loads(r.content)
        except Exception as e:
            error = "Person Name: " + str(
                person.person_name) + " Person ID: " + str(
                    person.id) + " Case ID: " + str(
                        case_id) + " Error: " + str(e)
            sendmail("Error in Uploading Cases", error)

        video_seen_in_case = sorted(data['properties']['videos_seen'].split())
        video_seen_in_db = sorted(videos_seen.split())
        print cmp(video_seen_in_case, video_seen_in_db)
        video_adopt_in_case = sorted(
            data['properties']['videos_adopted'].split())
        video_adopt_in_db = sorted(videos_adopted.split())
        print cmp(video_adopt_in_case, video_adopt_in_db)

        # Write xml for a particular person
        if (cmp(video_seen_in_case, video_seen_in_db) != 0
                or cmp(video_adopt_in_case, video_adopt_in_db) != 0):
            write_person_update_content(content_array, count, case_id,
                                        owner_id, person, videos_seen,
                                        videos_adopted)
            count += 1
    write_opening_meta(file, count)
    for content in content_array:
        file.write(content)
    write_closing_meta(file, owner_id, count)
    file.close()