Esempio n. 1
0
    def upload_report(cls, report):
        formats = ['pdf', 'xml']
        try:
            for format in formats:
                if format == 'pdf':
                    report_url = report.pdf_url
                else:
                    report_url = report.xml_url

                request = requests.get(report_url, stream=True)
                filename = "appointment_%s_report.%s" % (
                    report.integrator_response.object_id, format)
                lf = TemporaryUploadedFile(filename, 'byte', 1000, 'utf-8')

                for block in request.iter_content(1024 * 8):

                    # If no more file then stop
                    if not block:
                        break

                    # Write image block to temporary file
                    lf.write(block)

                lf.seek(0)
                lf.content_type = "application/%s" % format
                in_memory_file = InMemoryUploadedFile(lf, None, filename,
                                                      lf.content_type,
                                                      lf.tell(), None)

                lab_report, created = LabReport.objects.update_or_create(
                    appointment_id=report.integrator_response.object_id)
                if lab_report:
                    LabReportFile.objects.create(report_id=lab_report.id,
                                                 name=in_memory_file)
                    # Send Reports to Patient
                    from ondoc.notification.tasks import send_lab_reports
                    if format == 'pdf':
                        try:
                            send_lab_reports.apply_async(
                                (report.integrator_response.object_id, ),
                                countdown=1)
                        except Exception as e:
                            logger.error(str(e))
        except Exception as e:
            logger.error(str(e))
Esempio n. 2
0
 def handle(self, *args, **options):
     queryset = UserInsurance.objects.all()
     for data in queryset:
         if data.coi:
             file_path = data.coi.url
             request = requests.get(file_path, stream=True)
             if request.status_code != requests.codes.ok:
                 continue
             file_name = file_path.split('/')[-1]
             splited = file_name.split('.')
             splited = splited[0]
             file_name = str(splited) + '-' + str(uuid.uuid4().hex) + '.' + str(splited[-1])
             temp_file = TemporaryUploadedFile(file_name, 'byte', 1000, 'utf-8')
             for block in request.iter_content(1024 * 8):
                 if not block:
                     break
                 temp_file.write(block)
             data.coi = InMemoryUploadedFile(temp_file, None, file_name, 'application/pdf', temp_file.tell(), None)
             data.save()
Esempio n. 3
0
def push_mis():
    from ondoc.api.v1.utils import CustomTemporaryUploadedFile
    from ondoc.insurance.models import InsuranceMIS
    import pyminizip
    from ondoc.notification.models import EmailNotification
    from ondoc.api.v1.utils import util_absolute_url
    from ondoc.crm.admin.insurance import UserInsuranceResource, UserInsuranceDoctorResource, UserInsuranceLabResource, InsuredMemberResource
    from datetime import datetime, timedelta

    resources = [(UserInsuranceResource,
                  InsuranceMIS.AttachmentType.USER_INSURANCE_RESOURCE),
                 (UserInsuranceDoctorResource,
                  InsuranceMIS.AttachmentType.USER_INSURANCE_DOCTOR_RESOURCE),
                 (UserInsuranceLabResource,
                  InsuranceMIS.AttachmentType.USER_INSURANCE_LAB_RESOURCE),
                 (InsuredMemberResource,
                  InsuranceMIS.AttachmentType.INSURED_MEMBERS_RESOURCE)]

    from_date = str(datetime.now().date() - timedelta(days=1))
    to_date = from_date
    # arguments = {
    #     'from_date': from_date,
    #     'to_date': to_date,
    # }

    earliest_date = str(datetime(2019, 1, 1).date())
    future_date = str(datetime.now().date() + timedelta(days=1))

    date_tuple = ((from_date, to_date), (earliest_date, to_date))

    email_attachments = []
    mis_temporary_file = []
    mis_temporary_file_paths = []

    for resource in resources:
        resource_obj = resource[0]()
        for date in date_tuple:
            arguments = {
                'from_date': date[0],
                'to_date': date[1],
            }
            dataset = resource_obj.export(**arguments)
            filename = "%s_%s_%s.xls" % (resource_obj.__class__.__name__,
                                         date[0], date[1])
            filename_prefix = "%s_%s_%s_" % (resource_obj.__class__.__name__,
                                             date[0], date[1])
            filename_suffix = ".xls"
            mis_temporary_file.append(
                CustomTemporaryUploadedFile(filename, 'byte', 1000, 'utf-8',
                                            filename_prefix, filename_suffix))
            f = open(
                mis_temporary_file[len(mis_temporary_file) -
                                   1].temporary_file_path(), 'wb')
            f.write(dataset.xls)
            f.seek(0)
            mis_temporary_file_paths.append(
                mis_temporary_file[len(mis_temporary_file) -
                                   1].temporary_file_path())

    zipfilename = "All_MIS_%s.zip" % from_date
    zipfile = TemporaryUploadedFile(zipfilename, 'byte', 1000, 'utf-8')
    zf = open(zipfile.temporary_file_path(), 'wb')

    pyminizip.compress_multiple(mis_temporary_file_paths, [],
                                zipfile.temporary_file_path(),
                                settings.INSURANCE_MIS_PASSWORD, int(8))

    for tf in mis_temporary_file:
        tf.close()

    attachment = InMemoryUploadedFile(zipfile, None, zipfilename,
                                      'application/zip', zipfile.tell(), None)
    insurance_mis_obj = InsuranceMIS(
        attachment_file=attachment,
        attachment_type=InsuranceMIS.AttachmentType.ALL_MIS_ZIP)
    insurance_mis_obj.save()

    zf.close()

    email_attachments.append({
        'filename':
        zipfilename,
        'path':
        util_absolute_url(insurance_mis_obj.attachment_file.url)
    })

    EmailNotification.send_insurance_mis(email_attachments)