amr_aly

Update_Barcode

Jun 3rd, 2021 (edited)
544
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ########## views.py
  2.  
  3. def edit_patient(request, id): # Making Update to a Patient
  4.     qs = Visits.objects.filter(patient=id).order_by('-id')
  5.  
  6.     ### we will explain the next 2 lines later on the (Django Egypt Group)
  7.     table = VisitsTable(qs, exclude='patient, addpresent')
  8.     table.paginate(page=request.GET.get("page", 1), per_page=10)
  9.  
  10.     query = Patients.objects.get(id=id)  # get(birth_date=birth_date)
  11.     patient = Patients.objects.values('id').filter(id=id).first()
  12.     barcode = Patients.objects.values('barcode').filter(id=id).first()
  13.     # patient = Patients.objects.filter(id=id)
  14.     patient_id = patient['id']
  15.     bar = barcode['barcode']
  16.     # print(query, patient)
  17.     match_pasthist = PastHistory.objects.filter(patient=id).exists()
  18.    
  19.     form = PatientsForm(request.POST or None, request.FILES or None, instance=query)
  20.     if form.is_valid():
  21.         barcode_value = request.POST.get('barurl')
  22.         if barcode_value == None or barcode_value == '':
  23.             messages.success(request, 'Create barcode without value is not valid')
  24.         elif barcode_value != None:
  25.             qr = pyqrcode.create(barcode_value)
  26.             name = request.POST.get('name')
  27.             split_name = name.split()
  28.             img_name = '-'.join(split_name)
  29.             db_name = Patients.objects.get(id=id)
  30.             file_path = 'media_root/patients/' + str(img_name) + '.png'
  31.            
  32.             if os.path.exists(file_path):
  33.                 os.remove(file_path)
  34.                 qr.png('media_root/patients/' + str(img_name) + '.png', scale=8)
  35.                 save_form = form.save(commit=False)
  36.                 save_form.barimg = 'patients/' + str(img_name) + '.png'
  37.                 save_form.barurl = barcode_value
  38.                 save_form.save()
  39.  
  40.                 patient_id = save_form.id
  41.                 name = save_form.name
  42.                 card = save_form.cardid
  43.                 dup_name = Patients.objects\
  44.                                 .values('name')\
  45.                                 .annotate(ncount=Count('name'))\
  46.                                 .filter(name=name, ncount__gt=1)
  47.                 records = Patients.objects\
  48.                                 .filter(name__in=[item['name'] for item in dup_name])
  49.                 # print('rec_edit = '+ str(records) + str(name))#(dup_name, records)
  50.                 rec = [item.name for item in records]
  51.                 reco = any(rec.count(element) > 1 for element in rec)
  52.                 # print('patname= '+str(name), 'rec_edit= '+str(rec), 'dupname_edit= ' +str(dup_name),reco)
  53.                
  54.                 # check duplicate for cardid
  55.                 dup_num = Patients.objects \
  56.                                     .values('cardid') \
  57.                                     .annotate(bcount=Count('cardid')) \
  58.                                     .filter(cardid=card, bcount__gt=1)
  59.                 records_num = Patients.objects.filter(cardid__in=[item['cardid'] for item in dup_num])
  60.                 # print('recnum_edit = '+ str(records_num) + str(num))#(dup_name, records)
  61.                 rec_num = [item.cardid for item in records_num]
  62.                 reco_num = any(rec_num.count(element) > 1 for element in rec_num)
  63.                 # print(rec_num, 'reco_num= ' + str(reco_num))
  64.                 if reco or reco_num:
  65.                     if reco:
  66.                         messages.error(request, 'Patient (' +str(name)+ ') is already exists change the name ..!')
  67.                         Patients.objects.filter(id=patient_id).update(name=db_name.name)
  68.                         return redirect(reverse('patientdata:edit_patient', kwargs={'id': id}))
  69.                     elif reco_num:
  70.                         messages.error(request, 'Card ID is already exists !, It must not be duplicated')
  71.                         return redirect(reverse('patientdata:edit_patient', kwargs={'id':id}))
  72.                 else:
  73.                     messages.success(request, 'Edit changes done successfully')
  74.                     return redirect(reverse('patientdata:edit_patient', kwargs={'id':id}))
  75.                     # return redirect(reverse('patientdata:table_patient'))
  76.             elif not os.path.exists(file_path):
  77.                 qr.png('media_root/patients/' + str(img_name) + '.png', scale=8)
  78.                 save_form = form.save(commit=False)
  79.                 save_form.barimg = 'patients/' + str(img_name) + '.png'
  80.                 save_form.barurl = barcode_value
  81.                 save_form.save()
  82.  
  83.                 name = save_form.name
  84.                 card = save_form.cardid
  85.                 dup_name = Patients.objects\
  86.                                 .values('name')\
  87.                                 .annotate(ncount=Count('name'))\
  88.                                 .filter(name=name, ncount__gt=1)
  89.                 records = Patients.objects\
  90.                                 .filter(name__in=[item['name'] for item in dup_name])
  91.                 # print('rec_edit = '+ str(records) + str(name))#(dup_name, records)
  92.                 rec = [item.name for item in records]
  93.                 reco = any(rec.count(element) > 1 for element in rec)
  94.                 # print('patname= '+str(name), 'rec_edit= '+str(rec), 'dupname_edit= ' +str(dup_name),reco)
  95.                
  96.                 # check duplicate for cardid
  97.                 dup_num = Patients.objects \
  98.                                     .values('cardid') \
  99.                                     .annotate(bcount=Count('cardid')) \
  100.                                     .filter(cardid=card, bcount__gt=1)
  101.                 records_num = Patients.objects.filter(cardid__in=[item['cardid'] for item in dup_num])
  102.                 # print('recnum_edit = '+ str(records_num) + str(num))#(dup_name, records)
  103.                 rec_num = [item.cardid for item in records_num]
  104.                 reco_num = any(rec_num.count(element) > 1 for element in rec_num)
  105.                 # print(rec_num, 'reco_num= ' + str(reco_num))
  106.                 if reco or reco_num:
  107.                     if reco:
  108.                         messages.success(request, 'Patient (' +str(name)+ ') is already exists change the name ..!')
  109.                         return redirect(reverse('patientdata:edit_patient', kwargs={'id': id}))
  110.                     elif reco_num:
  111.                         messages.success(request, 'Card ID is already exists !, It must not be duplicated')
  112.                         return redirect(reverse('patientdata:edit_patient', kwargs={'id':id}))
  113.                 else:
  114.                     messages.success(request, 'Edit changes done successfully')
  115.                     return redirect(reverse('patientdata:edit_patient', kwargs={'id':id}))
  116.                     # return redirect(reverse('patientdata:table_patient'))
  117.  
  118.     context = {
  119.         'patient': patient,
  120.         'patient_id': patient_id,
  121.         'editpatform': form,
  122.         'query': query,
  123.         'barcode': bar,
  124.         'match_pasthist': match_pasthist,
  125.         'patient_visits_table':table,
  126.     }
  127.     return render(request, 'patientdata/edit_patient.html', context)
  128.  
  129.  
  130. def patient_details(request, barcode):
  131.     qs = Patients.objects.get(barcode=barcode)
  132.     patient = Patients.objects.get(id=qs.id)
  133.  
  134.     visit_table = VisitsTable(Visits.objects.filter(patient=qs.id), exclude='patient,diagnosis,amount,addpresent,')
  135.     visit_table.paginate(page=request.GET.get("page", 1), per_page=5)
  136.  
  137.     sql_views = RawSQL('''
  138.  
  139.    ''')
  140.     # raw_query =
  141.     qs_patient = Patients.objects.filter(barcode=barcode)
  142.     qs_visit = Visits.objects.filter(patient__in=qs_patient)
  143.     qs_past = PastHistory.objects.filter(patient=qs_patient[0])
  144.     qs_present = PresentHistory.objects.filter(patient=qs_patient[0], visit=qs_visit[3])
  145.  
  146.     print(qs_patient[0],qs_visit, qs_visit[4], qs_past, qs_present)
  147.  
  148.  
  149.     context = {
  150.         'qs': qs,
  151.         'patient': patient,
  152.         'visit_table': visit_table,
  153.     }
  154.     return render(request, 'patientdata/patient_details.html', context)
  155.  
  156.  
  157. ################## edit_patient.html
  158. {% extends 'index.html' %}  
  159. {% load static %}
  160. {% load render_table from django_tables2 %}
  161. {% load widget_tweaks %}
  162. <!--  -->
  163. {% block content %}
  164.  
  165. <div class="container" style="background-color: white;" id="editPatient">
  166.     <article class="message is-{{ message.tags }}">                
  167.         <div class="message-body alert {{ message.tags }}" style="color: red;" role="alert">
  168.             {{ editpatform.non_field_errors }}
  169.         </div>
  170.     </article>
  171.  
  172.     <solid>
  173.         <h1 style="color:black">Edit Patient</h1>
  174.     </solid>
  175.     <hr>
  176.     <div class="container">
  177.         <a class="button is-dark" href="{% url 'visits:pass_patient_id' patient_id %}" role="button">
  178.             New Visit</a>
  179.         <a class="button is-dark" href="{% url 'patientdata:save_patient' %}" role="button">
  180.             New Patient</a>
  181.     </div>
  182.     <hr>
  183.    
  184.     <br><br>
  185.     <form enctype="multipart/form-data" method="POST" id="edit-pat-form">{% csrf_token %}
  186.        
  187.         <div class="float-left" style="background-color:transparent;height: 100%; width: 35%;" id="left-editpat-div">
  188.            
  189.             {{editpatform.name.label_tag}} {{editpatform.name}} <br>
  190.            
  191.             {{editpatform.address.label_tag}} {{editpatform.address}}
  192.             <br>
  193.  
  194.             {{editpatform.birth_date.label_tag}}
  195.             {% render_field editpatform.birth_date v-model="dob" id="dob" %} <br>
  196.  
  197.             {{editpatform.age.label_tag}}
  198.             {% render_field editpatform.age ::value="getAge" id="age" %} <br>
  199.            
  200.             {{editpatform.phone.label_tag}} {{editpatform.phone}} <br>
  201.        
  202.             {{editpatform.mobile.label_tag}} {{editpatform.mobile}} <br>
  203.            
  204.             {{editpatform.cardid.label_tag}}
  205.             {% render_field editpatform.cardid v-model="cardid" v-on::change="cardValue" id="cardid" %} <br>
  206.            
  207.             {{editpatform.barcode.label_tag.hidden }}
  208.             {% render_field editpatform.barcode ::value="barcodeChanged + cardValue" hidden="true" %} <br>
  209.            
  210.             {% render_field editpatform.barurl ::value="urlChanged"  hidden="true" %}
  211.            
  212.             {% if query.barimg %}
  213.                 <div>
  214.                     <a href="{% url 'patientdata:patient_details' barcode %}">
  215.                         <img class="image" src="{{ query.barimg.url }}">
  216.                     </a>
  217.                 </div> <br>
  218.             {% endif %}  
  219.             <br>
  220.             <button type="submit" class="button is-primary">Update</button>
  221.            
  222.             <hr>
  223.         </div>
  224.        
  225.         ### we will explain (how to make a designed table by django_tables2) later on the (Django Egypt Group)
  226.         <div class="float-right" style="float:right; height: 100%; width: 55%;background-color:white; border-style: outset; border-
  227.        radius: 20px; border-color: #aab5af; box-shadow: 2px 2px 4px 4px grey;" id="edit-pat-table-div">
  228.             {% render_table patient_visits_table %}
  229.         </div>
  230.        
  231.     </form>
  232. </div>
  233.  
  234. {% endblock %}
  235.  
  236. {% block scripts %}
  237.     <script>
  238.         // Using Vue.js Here
  239.         var editPatient = new Vue ({
  240.             el: '#editPatient',
  241.             delimiters: ['[[', ']]'],
  242.             // data () {
  243.             //     return
  244.             data: {
  245.                 patient_name: '' ,
  246.                 title: "Add New Patient",
  247.                 message:  '{{ non_field_errors }}' ,
  248.                 id:'{{ patient_id }}',
  249.                 name:'',
  250.                 cardid:'',
  251.                 dob: new Date(),
  252.                 age: '',
  253.                 url:'http://192.168.1.120:8000/patientdata/patient/details/by/barcode/',
  254.                 barcode:'',
  255.                 sign:'_',
  256.             },
  257.             computed: {
  258.                 cardValue(){
  259.                     this.cardid = document.getElementById('cardid').value;
  260.                     return this.cardid;
  261.                 },
  262.                 barcodeChanged(){
  263.                     this.barcode = this.id + this.sign + this.dob + this.sign ;//+ this.cardid;
  264.                     return this.barcode;
  265.                 },
  266.                 urlChanged(){
  267.                     this.barurl = this.url + this.id + this.sign + this.dob + this.sign + this.cardid;
  268.                     return this.barurl;
  269.                 },
  270.             }
  271.         })
  272.        
  273.     </script>
  274.  
  275. {% endblock %}
  276.  
  277.  
  278. ##################### patient_details.html
  279. {% extends 'index.html' %}
  280. {% load static %}
  281. {% load render_table from django_tables2 %}
  282. {% load widget_tweaks %}
  283.  
  284.  
  285. {% block content %}
  286.  
  287. <div class="container" style="position: relative; display: inline-block; height:100%; width:100%" id="dashboard">
  288.    
  289.     <h1 class="title">Details For Patient ({{ qs.name }}) </h1>
  290.        
  291.     <!-- <div class="row">   -->
  292.     <!-- card -->
  293.     <div class="column is-6 float-left" style="width: 30%; height: 100%;">
  294.         <div class="card card-link">
  295.            
  296.             <div class="card-content">
  297.        
  298.                 <div class="content float-left" style="margin:2px; padding: 2px;">
  299.                     <p class="title is-4">
  300.                     <span class="fa fa-address-book"></span>
  301.                     | Patient Data </p>
  302.                     <br>
  303.                     <hr>
  304.                    
  305.                     <p class="content is-6">
  306.                         <span class="fa fa-user"></span>
  307.                     | Patient Name: {{ qs.name }} <br><br>
  308.                         <span class="fa fa-map-marker"></span>
  309.                     | Address : {{ qs.address }} <br><br>
  310.                         <span class="fa fa-birthday-cake"></span>
  311.                     | Birth Date : {{ qs.birth_date }} <br><br>
  312.                         <span class="fa fa-hourglass-2"></span>
  313.                     | Age : {{ qs.age }} <br><br>
  314.                         <span class="fa fa-phone"></span>
  315.                     | Phone : {{ qs.phone }} <br><br>
  316.                         <span class="fa fa-mobile"></span>
  317.                     | Mobile : {{ qs.mobile }}
  318.                     </p>
  319.                 </div>
  320.             </div>
  321.  
  322.             <footer class="card-footer">
  323.                 <!-- <a class="button is-dark card-footer-item" href="{% url 'patientdata:save_patient' %}">
  324.                     New Patient</a>&nbsp;&nbsp; -->
  325.                 <a href="{% url 'patientdata:edit_patient' qs.id %}" class="card-footer-item button is-primary">
  326.                     Edit Patient</a> &nbsp;&nbsp;
  327.                     <a href="{% url 'visits:pass_patient_id' qs.id %}" class="card-footer-item button is-primary">
  328.                     New Visit</a> &nbsp;&nbsp;
  329.             </footer>
  330.         </div>
  331.     </div>
  332.  
  333.     <!-- <div class="column float-left" style="width: 60%; height: 100%; border-style: outset; border-radius: 20px; border-color: #aab5af; box-shadow: 2px 2px 4px 4px grey;">
  334.         <br>
  335.        
  336.         {% render_table visit_table %}
  337.     </div> -->
  338.     {% render_table visit_table %}
  339.  
  340. </div>
  341.  
  342.  
  343. {% endblock  %}
  344.  
  345.  
RAW Paste Data