From dc11d7b412547d0a585519a12cef5e71d923d590 Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Wed, 28 Jan 2026 14:28:45 +0000 Subject: [PATCH] S --- core/__pycache__/admin.cpython-311.pyc | Bin 212 -> 1148 bytes core/__pycache__/models.cpython-311.pyc | Bin 209 -> 2971 bytes core/__pycache__/views.cpython-311.pyc | Bin 1364 -> 1838 bytes core/admin.py | 13 +- core/migrations/0001_initial.py | 40 +++ .../__pycache__/0001_initial.cpython-311.pyc | Bin 0 -> 2681 bytes core/models.py | 53 +++- core/templates/base.html | 95 +++++- core/templates/core/index.html | 277 +++++++++--------- core/views.py | 38 ++- 10 files changed, 352 insertions(+), 164 deletions(-) create mode 100644 core/migrations/0001_initial.py create mode 100644 core/migrations/__pycache__/0001_initial.cpython-311.pyc diff --git a/core/__pycache__/admin.cpython-311.pyc b/core/__pycache__/admin.cpython-311.pyc index a5ed392d6714413db63120e4233d2e96cbadb5de..e3f99b304db7651b99fbad29a59fa5507b87853c 100644 GIT binary patch literal 1148 zcmbVL&rcIU6n?Wm%C@xBNQr`IN`i-tLJ!8+gCQ|$G*P&C+skIznbO7mQD?W&dg_5c zfE)e=HH1II#50&4nmLhp;#PtuPR`r1RVWAJ?9R7uI&Z%B-uI?oOQizH@ni9`cTNC) z;vyTl3*+p&H1>c3B|ZeiA_S;HRbL5IOARzjBcK2y+j@48sXfVcAm?Z(@CvB515}q@ z87uTu=_BW8^yKFtTYxong;BePF((;VIdP_PtAER`yjMpa9vnv9~0Qbza;!v7Zx$ZKJDgi-K(j5pDZu7j64P+wm`UioO>o zHud6`?{vg;x@vfS!ni2K%;9d+Zg|Y6@jjeMS~y>+HKTyl+MDe#Y1h~%=C+fF*FHx4 zecW19a-wg KvNY+R>i!$4o)W15 delta 147 zcmeyvafLBuIWI340}xFAk)LS~q#uJgFu(+5d=>&SrZc24q%h_%7fK6o7Z_^}l1sK}xHVpAA)iHfa)7g$6-E#EywWh)H8Zz(K4w-if_oy_?Ri z1F<;xz##_?9FV9~Aw@k<5LDvOV-J$mgX zyqS5k^X8lU(9scOp#0fWQU35U%->XL7EhzHa|0?58JUq;l_{|~mStSbBqO`-GO`=7 z%dTdJ$8Lss20y3d+_o17UY>V&ak4kV2)-@aNnnY$q{~P(@{K|47uQgB{({Ow1~EBS zW^%3q1oS;ir$O9uGgt`gx%)8-fxyoxId7W>huqISk0I=5tqxfx)Kyy^t z_uSt$Ptf)Vy~86c2ktVt4*SCd;lqU5qKL?0_!u3;pVEyL#gtT`Q*aSie7@WTqsAo} zX~Xls{)|l%l@<{$*p1hSH!iIqtl3%;G=x>f(c&Z&$C3v97R!!%Dh>`9m5}X_N)ca5 zDzzG+cM2JX(>Qab(mjLnH&v(i@D&}e=%rF)rt}o)NGnK2*pTwYMwj$_&l}JM!9@mPJYT8bz zN>?UdRFQE@DGaA{)i7aT+LBF`X+~#@@Rby;fV8cDKz+)RU`e_yLMR2ZxJ9@9sS6Ll zi}>z-JIpe?o$?(d;T>jUzjw2Vc?`8@ zEe$+fk2u&~ce>)@Kiy>oh?mo(5+bnzGDX9bOeD&Rv7$pJbFvVH;ol3k4E!4Mx)Nr8Ch8)J`sk)qFCu{Celd5(hK7mpMa<` zn_b-xgj)0zJl~qH`cJ&= z&LC4Ffu?Gt1&;Vdk*--3Nl+9a;<8HXVNv|1EUAr_BdZ86>IQN=SJX0=)Tay{g$eO6 z2*S~U@#j$G;b(M%sJ8w#`-GbRsPi~|PC|QHh~h8cjgM1t0tAU5=9B0SCA@Wf$AQ6UkI01%rz3oqT8n3NPLnkV>l|re|hd=!*mNR8j6YV2%UmX zipQvE#f>SYY(b|oeh0A^_O>h5?cHXYqMF|Rmybe#GFYA5jP$NA-P1QFY7wCx z5v+(%o!sVF&*^QZCA_R>kgDzCHMPAtq`_GvUEhIZX<~WDf|k8xIUL={3n2G_qg`x} z!*|+uqqHNK1B^pD?nAwU;5|rtZA>3TeW(rO0k{r=Z6FTYJ{`?i4xZ#(L=FMQqYYR` zC(w$7O(3e7C@N@4@KX?tr%7;J0{|A0p-9w{zD#`SGByB9RGmsxB2$`)G(%ZMd_uyA zS~K930aPQrW;@MPV$=z1lFH8@S;;G!?Khhw!CBBH6DxUxx=vmr!O1lZ<#kmr*qtwB ziRTi`kBK)=1EX#MT@&GgMJ6I)j8s65Y@agR4{OCd6(519977|85#C-8uP?Qx{)|r{ zN#^M?APk3~fg(~@L=#R1K1Tb02;u-fX%f(c-?<9n|KJnA+q$v$BlwZW!K#}d<|`a8 znY`e3PH#6QtK8b3CSHlZ*tlTv5X9tA)<%ncb}R3-ZE2I96dMM`PK%!Nwdni?_liIL zl0RMN&sh8!Fu?Q6@!!r^iOY^s^UvGoBQ12cGpK7KIXga=ok^y%2RRfx4@g%E+B90T zi9vjc@l0ZTB8lf=ete1w2T-PBs)z*lR!M@%lBB2(lst&m9VE5UC{D+qg6^2{BZ&Pp z3VZ-GYKj`yz1_`p4y>PN75m#z0iY;-}QgxTs~*91S8N(&A1C<+s(4(44TX@K?*b( zZ?Wa(r=;c-`)M-W;!Md(%uCPLOGzqX21>4E_zY6>OHV%|KQ~psG^sSNq*On(A~m_R zB)>?%JijQrxF9h(RX;huC{-U~j9x+IFAf_ZyEG@&u80Guoe_wOWr4&8W=2NF8w@fR Ku%RM0pb7xLi8T)Z diff --git a/core/__pycache__/views.cpython-311.pyc b/core/__pycache__/views.cpython-311.pyc index 2a36fd69370b38a98d8b01bf8eb9817c42f16ed6..a4ac4419e5f5b836bd0d7cb7d5054b4904fab418 100644 GIT binary patch literal 1838 zcma)6&2Jk;6rc6lYbW-`cnu8+jbuucVwJ=|)uf0(R9w?SX;U>h`C?q}INq=y?(Dcp zEC>0(p+ZPhQKfL;;8O@n4jd~k{0nxqQdc8Yii9}yW+~#*6K~d8Cniw!?Rfk?e(&vj zZ{F-LvOJ7{+_QBpA4KR+F8CBUVh(QuvyD`w3OdU7{)M~%azGClVm>Hvov4QlDKB|^ zP!AiCd<6KAD(OSUaDLc`=A$5ozeD+$DlDONiwC`3ZY8(77RB+YlOohNwn=4sV9&8@?97B&e}QXa_pH*Y7fnqFn#*jyH2D zTEQv3XsVjIlCnz#V>7j;(MqavGpo*)MMSK{{Zrm&y zxKPkamPw16X@hFaHx~-0jqzin7ZUKp5cFuq>&cr~&03}jFHbGjD8a>2B^_q5DzR2U z=LKX^iC+bqNnQk-MUMm6EOf7i$p#y-u?`McE%Y*%`!X+~9xqu0XEeBg>oXN<=;@vi@MIFvZhl^2#f_{BTLIymUBym?DfSjvbiOu zT+Q9Sa%cHw?$)xeBYeiw5(^Uy`Pr0=a>tmLTcH=rD}x>hS6ZenzMVrycz z_Hd$;xa1@*J(m8Ef0x@|pjS@km_iBG{VO{#H;-d3e74)_c1v zo#?C+ooxqa51}7$Cs@F;S)>YQTegV7Bz3iDu2_WM8#dAt{Es$!ttZde6^l^lyX_q- ziyf(JRMTz3zf(*yEER*m=fj&P?+AWHe@Z?8k$>mxZ(-|-f*`nP rsOdc}iZ{LI0KMNHTrPU2J-A%-c6)HSXuADhs~a2_=DO(g=H>Sf(Rj?; literal 1364 zcmZ`(&1)M+6ra_{dS%J>I&SM!uH%hUh$T{~CE!96oTjQ1oHkCdQ$lozPf-Q6#oM~=1-7}AYwoe=&3h>36z}rW~~)fO5P4{-h1=r&HMPV zzfVm~BA|nRhVUX&zZ=1NEJDd#(kRMro?7~GlVKiARAFbK7y={g8`rq_)Wa;XDEltUWCmB zkq~sth&3ZeP{;A878u54V{Oaty2i>_vx<&kIwj51DaMXgGg(=)ND+pj!HI^Q9g`Br z#tzdA%!;PvWg3a1>()Z2BR!#4DWHiJ1dw>FOuS)~xge&2p-9tZ06jh%7)=`o)~k%rY>m)oo?Fy$ z*3WOp#5FJD)_FvD(?z&0py>SutcBjF^RHFyMAbU#a#vk`t*)G?D;+i6Rnx7Fo|by~ z_(Z$b)~@ZR_tUQyT0itB&pp5LYvy^Tl^e+D)6aYJ%l+g^CzEdC%omzVp>MZ5DOS%5y(&3}_q+LrZpYFuo z$;KkdP^3tiE-q4JQjp2u!X*V=nw006D?D2=A?~@VHmOhs3;)^d0bSE-A54om8k|5?wQxT-Om+jdBO;ypDA`FAEZ1 z8$0V3BqSC*6`|mj1njHH-3drS9?#^aBJZs@~8-w}P)?lYQIjvO{)pS7F)=<7&Rk5*2DwA1VHB2zfM^>{< zUO%fXuB7^z$hWnj5b^|vQY68dRY?a_O<}-<@;?_Bws-zN* zDxt3>7BM1aqTx%4ELKn=*Q5ppPlHvgHi{;GV7k7BP|sR2z+;@wvCy;z+*Ywc6t2nL zW_~^$BIezN+1B8KW@61C8#pnmP;OSr11Jysi0PICT5Lr)h-!-3bA=Bq-(;a>a7{5O zDH~ife~*Rcw=`VVRlVX&URq_oC0L&_AFeAzJ@}gw5vX>nLN4>Tjn+U}r#RJBCp|2v zYeo2mV_>(RVwG2lTL_Y=CnbkZdIfCdlEW-ebcTvW7Ah9u)8AAvwEK(2`%OjVbpt&= z(TE9^#rlCI%oDv#V3YZI!un>NQe5PR2IXIN);~ik(@>;ye8X69wyMxha~0@zn}ORa zx7=3fCJ(LCo`XP0Mf(zpSw=NQtLRKZB^GdkfzyfkXQ%VC(>H)Ty@5L?*6+egSXOxb zdAh3Cak^P*YGyNyAK)@LLDQQ$T{jv^8K*f-={F}``ts$=9~V2Jr5an5pJ0yQA2s7R zUrdZH9GO*hCMp*)cfbSRVZ2-wMLD- zQNtcJtgyKs8MUIx?GZbg+|66j%w9BOM>AIV)BVUvD>kux-i}SQ1>uS&zat;Y-*DBb zZ{-(`eC0^cM81>%$7sxoU)r9t>)=vcj4DNNjs)d+z6@-Ek{^buWI^ zj$gIHQ|$r&@xk_x5IO(L!?s5{G1xva5DdK#K)m9j9e)$+xepSn^~pVJjaaeTUaV%v zYF2oCKXTd{OK)%3V`+#kLp<-u4bLW5B_4Qy2#`PoNKV9-$06||C-LI0Va2ZP#je@0 zYgYI=Y>jm~wSC7voq9U*ENW*K?97UtDOlt_%-j^`BzT>fm%t=QFbR^I%t|gLz7VGY z#49e^W3eIm(HH!tN;gfCGK;!dnnI8 zxbD{8XB0!1|NAkxzU>i3u`LVYSxZQ`zkT6?b=0pdpA{ir-WNZH?C|&tKJe;@QOAdW E0q}nC(*OVf literal 0 HcmV?d00001 diff --git a/core/models.py b/core/models.py index 71a8362..1a527e6 100644 --- a/core/models.py +++ b/core/models.py @@ -1,3 +1,54 @@ from django.db import models -# Create your models here. +class Hospital(models.Model): + STATES_CHOICES = [ + ('BW', 'Baden-Württemberg'), + ('BY', 'Bayern'), + ('BE', 'Berlin'), + ('BB', 'Brandenburg'), + ('HB', 'Bremen'), + ('HH', 'Hamburg'), + ('HE', 'Hessen'), + ('MV', 'Mecklenburg-Vorpommern'), + ('NI', 'Niedersachsen'), + ('NW', 'Nordrhein-Westfalen'), + ('RP', 'Rheinland-Pfalz'), + ('SL', 'Saarland'), + ('SN', 'Sachsen'), + ('ST', 'Sachsen-Anhalt'), + ('SH', 'Schleswig-Holstein'), + ('TH', 'Thüringen'), + ] + + name = models.CharField(max_length=255) + state = models.CharField(max_length=2, choices=STATES_CHOICES) + city = models.CharField(max_length=100) + address = models.TextField(blank=True) + website = models.URLField(blank=True) + + def __str__(self): + return f"{self.name} ({self.get_state_display()})" + + class Meta: + verbose_name_plural = "Hospitals" + +class DepartmentChief(models.Model): + DEPARTMENT_CHOICES = [ + ('AN', 'Anesthesia'), + ('NU', 'Nursing'), + ('IC', 'Intensive Care'), + ('SU', 'Surgery'), + ('IM', 'Internal Medicine'), + ('PE', 'Pediatrics'), + ('GY', 'Gynecology'), + ('OT', 'Other'), + ] + + hospital = models.ForeignKey(Hospital, on_delete=models.CASCADE, related_name='chiefs') + name = models.CharField(max_length=255) + title = models.CharField(max_length=100, help_text="e.g. Chief of Medicine, Head Nurse") + department = models.CharField(max_length=2, choices=DEPARTMENT_CHOICES) + email = models.EmailField() + + def __str__(self): + return f"{self.name} - {self.get_department_display()} at {self.hospital.name}" \ No newline at end of file diff --git a/core/templates/base.html b/core/templates/base.html index 1e7e5fb..cfb4490 100644 --- a/core/templates/base.html +++ b/core/templates/base.html @@ -3,23 +3,96 @@ - {% block title %}Knowledge Base{% endblock %} - {% if project_description %} - - - - {% endif %} - {% if project_image_url %} - - - {% endif %} + + {% block title %}MedConnect | Medical Recruitment CRM{% endblock %} + + + + + + + + + {% load static %} + + {% if project_description %} + + {% endif %} + + + {% block head %}{% endblock %} + + {% block content %}{% endblock %} + +
+
+

© 2026 MedConnect Outreach Tool. All rights reserved.

+
+
+ + - + \ No newline at end of file diff --git a/core/templates/core/index.html b/core/templates/core/index.html index faec813..666e703 100644 --- a/core/templates/core/index.html +++ b/core/templates/core/index.html @@ -1,145 +1,148 @@ -{% extends "base.html" %} +{% extends 'base.html' %} +{% load static %} -{% block title %}{{ project_name }}{% endblock %} +{% block content %} + +
+
+
+
+

Reach the Right Department Chiefs.

+

Connect with hospital leadership across Germany. Manage your medical recruitment outreach in one streamlined dashboard.

+
+ Browse Directory + +
+
+
+
+
+
+ Active Campaigns +

12

+
+
+ Response Rate +

24%

+
+
+
+
+
+ Outreach goal for January +
+
+
+
+ +
+
+
+ + +
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+
+
+ + +
+
+
+

{{ chiefs.count }} Contacts Found

+
+ + +
+
+ +
+ {% for chief in chiefs %} +
+
+
+
+ {{ chief.get_department_display }} +
+ +
+
+
{{ chief.name }}
+

{{ chief.title }}

+
+
+ + + + + {{ chief.hospital.name }} +
+
+ + + + + {{ chief.hospital.city }}, {{ chief.hospital.get_state_display }} +
+
+ +
+
+ {% empty %} +
+
+ + + +
+

No contacts found

+

Try adjusting your filters or search terms.

+ Clear All Filters +
+ {% endfor %} +
+
+
-{% block head %} - - - {% endblock %} - -{% block content %} -
-
-

Analyzing your requirements and generating your app…

-
- Loading… -
-

AppWizzy AI is collecting your requirements and applying the first changes.

-

This page will refresh automatically as the plan is implemented.

-

- Runtime: Django {{ django_version }} · Python {{ python_version }} - — UTC {{ current_time|date:"Y-m-d H:i:s" }} -

-
-
- -{% endblock %} \ No newline at end of file diff --git a/core/views.py b/core/views.py index c9aed12..114fa9a 100644 --- a/core/views.py +++ b/core/views.py @@ -4,22 +4,32 @@ import platform from django import get_version as django_version from django.shortcuts import render from django.utils import timezone - +from .models import Hospital, DepartmentChief def home(request): - """Render the landing screen with loader and environment details.""" - host_name = request.get_host().lower() - agent_brand = "AppWizzy" if host_name == "appwizzy.com" else "Flatlogic" - now = timezone.now() + """Render the landing screen with hospital directory.""" + query = request.GET.get('q', '') + state_filter = request.GET.get('state', '') + dept_filter = request.GET.get('dept', '') + + chiefs = DepartmentChief.objects.select_related('hospital').all() + + if query: + chiefs = chiefs.filter(name__icontains=query) | chiefs.filter(hospital__name__icontains=query) + + if state_filter: + chiefs = chiefs.filter(hospital__state=state_filter) + + if dept_filter: + chiefs = chiefs.filter(department=dept_filter) context = { - "project_name": "New Style", - "agent_brand": agent_brand, - "django_version": django_version(), - "python_version": platform.python_version(), - "current_time": now, - "host_name": host_name, - "project_description": os.getenv("PROJECT_DESCRIPTION", ""), - "project_image_url": os.getenv("PROJECT_IMAGE_URL", ""), + "project_name": "MedConnect Outreach", + "chiefs": chiefs, + "states": Hospital.STATES_CHOICES, + "departments": DepartmentChief.DEPARTMENT_CHOICES, + "query": query, + "selected_state": state_filter, + "selected_dept": dept_filter, } - return render(request, "core/index.html", context) + return render(request, "core/index.html", context) \ No newline at end of file