Pharmacy detail and well plan time table 9 to 6 class 350 Per class 1 hour

Asking for Preferences

3 month

Asking for Preferences

Pharmacist

Asking for Preferences
Reading File
Running Command

mkdir -p /tmp/workspace/pharmacist-timetable

Writing File

~/pharmacist-timetable/build_timetable.py

import openpyxl
from openpyxl.styles import (
    PatternFill, Font, Alignment, Border, Side, GradientFill
)
from openpyxl.utils import get_column_letter
from datetime import date, timedelta

# ── colour palette ──────────────────────────────────────────────────────────
HEADER_BG   = "1F4E79"   # dark blue
HEADER_FG   = "FFFFFF"
SUBHDR_BG   = "2E75B6"   # mid blue
SUBHDR_FG   = "FFFFFF"
ALT_ROW_BG  = "DEEAF1"   # very light blue
LUNCH_BG    = "FFF2CC"   # pale yellow
SUNDAY_BG   = "F2F2F2"
REVISION_BG = "E2EFDA"   # pale green
SUBJECT_COLORS = {
    "Pharmaceutics":             "C6EFCE",
    "Pharmacology":              "FFEB9C",
    "Pharmacognosy":             "BDD7EE",
    "Biochemistry":              "FCE4D6",
    "Pharmacokinetics":          "E2EFDA",
    "Clinical Pharmacy":         "D9E1F2",
    "Pharmaceutical Chemistry":  "FFF2CC",
    "Human Anatomy & Physiology":"EDE7F6",
    "Health Education":          "F4CCCC",
    "Drug Store Management":     "D0E4FF",
    "REVISION / Mock Test":      "C9E4CA",
    "LUNCH BREAK":               "FFF2CC",
}

def make_fill(hex_color):
    return PatternFill("solid", fgColor=hex_color)

def make_border(thin=True):
    s = Side(style="thin" if thin else "medium")
    return Border(left=s, right=s, top=s, bottom=s)

def hdr_font(bold=True, size=11, color="FFFFFF"):
    return Font(name="Arial", bold=bold, size=size, color=color)

def cell_font(bold=False, size=10, color="000000"):
    return Font(name="Arial", bold=bold, size=size, color=color)

# ── time slots (9 AM – 6 PM, 1 hr each, lunch at 1-2 PM) ──────────────────
TIME_SLOTS = [
    ("09:00 AM", "10:00 AM"),
    ("10:00 AM", "11:00 AM"),
    ("11:00 AM", "12:00 PM"),
    ("12:00 PM", "01:00 PM"),
    ("01:00 PM", "02:00 PM"),   # LUNCH
    ("02:00 PM", "03:00 PM"),
    ("03:00 PM", "04:00 PM"),
    ("04:00 PM", "05:00 PM"),
    ("05:00 PM", "06:00 PM"),
]
LUNCH_SLOT = 4  # 0-indexed

# ── subjects & chapter distribution ────────────────────────────────────────
# 350 teaching classes / 8 teaching slots per day
SUBJECTS = [
    ("Pharmaceutics",             45),
    ("Pharmacology",              50),
    ("Pharmacognosy",             35),
    ("Biochemistry",              30),
    ("Pharmacokinetics",          25),
    ("Clinical Pharmacy",         40),
    ("Pharmaceutical Chemistry",  45),
    ("Human Anatomy & Physiology",30),
    ("Health Education",          20),
    ("Drug Store Management",     30),
]
# Total = 350

# Build a flat list of 350 subject tokens
subject_queue = []
for subj, count in SUBJECTS:
    subject_queue.extend([subj] * count)

# ── date range: 16 Jul 2026 – 15 Oct 2026, Mon-Sat only ───────────────────
start_date = date(2026, 7, 16)
end_date   = date(2026, 10, 15)

teaching_days = []
d = start_date
while d <= end_date:
    if d.weekday() < 6:   # 0=Mon … 5=Sat, skip Sun(6)
        teaching_days.append(d)
    d += timedelta(days=1)

# 8 teaching slots per day → assign subjects
slot_schedule = {}   # date -> list of 9 items (8 subjects + lunch)
idx = 0
for day in teaching_days:
    day_slots = []
    slot_num = 0
    for i, (t_start, t_end) in enumerate(TIME_SLOTS):
        if i == LUNCH_SLOT:
            day_slots.append("LUNCH BREAK")
        else:
            if idx < len(subject_queue):
                day_slots.append(subject_queue[idx])
                idx += 1
            else:
                day_slots.append("REVISION / Mock Test")
        slot_num += 1
    slot_schedule[day] = day_slots

# ── workbook setup ──────────────────────────────────────────────────────────
wb = openpyxl.Workbook()

# ── SHEET 1: Cover / Summary ────────────────────────────────────────────────
ws_cover = wb.active
ws_cover.title = "Cover"
ws_cover.sheet_view.showGridLines = False

def merge_write(ws, cell_range, value, bg, fg, size=12, bold=True, align="center"):
    ws.merge_cells(cell_range)
    top_left = ws[cell_range.split(":")[0]]
    top_left.value = value
    top_left.fill = make_fill(bg)
    top_left.font = Font(name="Arial", bold=bold, size=size, color=fg)
    top_left.alignment = Alignment(horizontal=align, vertical="center", wrap_text=True)

# Title block
ws_cover.row_dimensions[1].height = 10
ws_cover.row_dimensions[2].height = 50
ws_cover.row_dimensions[3].height = 30
ws_cover.row_dimensions[4].height = 25
ws_cover.row_dimensions[5].height = 25

merge_write(ws_cover, "B2:H2",
            "PHARMACIST EXAM PREPARATION", HEADER_BG, HEADER_FG, 20, True)
merge_write(ws_cover, "B3:H3",
            "3-Month Study Timetable  |  9:00 AM – 6:00 PM  |  1 Hour per Class  |  350 Classes",
            SUBHDR_BG, SUBHDR_FG, 13, False)
merge_write(ws_cover, "B4:H4",
            f"Start: 16 July 2026    End: 15 October 2026    Total Teaching Days: {len(teaching_days)}",
            "EBF3FB", "000000", 11, False)

ws_cover.row_dimensions[6].height = 8
ws_cover.row_dimensions[7].height = 22

# Subject summary table
headers = ["#", "Subject", "Classes Allocated", "Classes / Week (approx)"]
col_starts = [2, 3, 6, 8]
col_widths  = [4, 28, 18, 22]
for c, (h, w) in enumerate(zip(headers, col_widths), 2):
    ws_cover.column_dimensions[get_column_letter(c)].width = w

for ci, h in enumerate(headers):
    cell = ws_cover.cell(row=7, column=col_starts[ci], value=h)
    cell.fill = make_fill(HEADER_BG)
    cell.font = hdr_font(size=10)
    cell.alignment = Alignment(horizontal="center", vertical="center")
    cell.border = make_border()

for ri, (subj, cnt) in enumerate(SUBJECTS, start=8):
    ws_cover.row_dimensions[ri].height = 20
    row_bg = ALT_ROW_BG if ri % 2 == 0 else "FFFFFF"
    data = [ri - 7, subj, cnt, round(cnt / 13, 1)]
    for ci, val in enumerate(data):
        cell = ws_cover.cell(row=ri, column=col_starts[ci], value=val)
        cell.fill = make_fill(SUBJECT_COLORS.get(subj, row_bg))
        cell.font = cell_font(size=10)
        cell.alignment = Alignment(horizontal="center" if ci != 1 else "left",
                                   vertical="center")
        cell.border = make_border()

# Total row
tr = 8 + len(SUBJECTS)
ws_cover.row_dimensions[tr].height = 22
for ci, val in enumerate(["", "TOTAL", 350, ""]):
    cell = ws_cover.cell(row=tr, column=col_starts[ci], value=val)
    cell.fill = make_fill(SUBHDR_BG)
    cell.font = hdr_font(size=10)
    cell.alignment = Alignment(horizontal="center" if ci != 1 else "left", vertical="center")
    cell.border = make_border()

# Time slots key
ws_cover.row_dimensions[tr + 2].height = 22
merge_write(ws_cover, f"B{tr+2}:H{tr+2}", "DAILY TIME SLOTS", HEADER_BG, HEADER_FG, 11)
for si, (ts, te) in enumerate(TIME_SLOTS, start=tr+3):
    ws_cover.row_dimensions[si].height = 18
    label = "LUNCH BREAK" if si - (tr+3) == LUNCH_SLOT else f"Class {si - (tr+3) if si-(tr+3) < LUNCH_SLOT else si-(tr+3)}"
    bg = LUNCH_BG if si - (tr+3) == LUNCH_SLOT else (ALT_ROW_BG if si % 2 == 0 else "FFFFFF")
    c1 = ws_cover.cell(row=si, column=2, value=f"{ts} – {te}")
    c1.fill = make_fill(bg); c1.font = cell_font(size=10)
    c1.alignment = Alignment(horizontal="center", vertical="center"); c1.border = make_border()
    c2 = ws_cover.cell(row=si, column=3, value=label)
    c2.fill = make_fill(bg); c2.font = cell_font(size=10, bold=(label=="LUNCH BREAK"))
    c2.alignment = Alignment(horizontal="left", vertical="center"); c2.border = make_border()

# ── SHEET 2-4: Monthly timetables ──────────────────────────────────────────
months = [
    ("Month 1 - July-Aug",   date(2026, 7, 16), date(2026, 8, 15)),
    ("Month 2 - Aug-Sep",    date(2026, 8, 16), date(2026, 9, 15)),
    ("Month 3 - Sep-Oct",    date(2026, 9, 16), date(2026, 10, 15)),
]

DAY_COLS = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]

def write_monthly_sheet(wb, title, m_start, m_end):
    ws = wb.create_sheet(title)
    ws.sheet_view.showGridLines = False

    # Collect weeks (Mon-Sat blocks) within range
    # Find Monday on or before m_start
    cur = m_start
    while cur.weekday() != 0:
        cur -= timedelta(days=1)

    weeks = []
    while cur <= m_end:
        week_days = [cur + timedelta(days=i) for i in range(6)]
        weeks.append(week_days)
        cur += timedelta(days=7)

    # Column layout: col 1=Time Slot, col 2..7 = Mon-Sat
    ws.column_dimensions["A"].width = 18
    for ci in range(2, 8):
        ws.column_dimensions[get_column_letter(ci)].width = 22

    # Sheet title
    ws.merge_cells("A1:G1")
    ws["A1"] = f"PHARMACIST EXAM PREP  –  {title.upper()}"
    ws["A1"].fill = make_fill(HEADER_BG)
    ws["A1"].font = Font(name="Arial", bold=True, size=14, color="FFFFFF")
    ws["A1"].alignment = Alignment(horizontal="center", vertical="center")
    ws.row_dimensions[1].height = 35

    ws.merge_cells("A2:G2")
    ws["A2"] = "9:00 AM – 6:00 PM  |  1 Hour per Class  |  Monday to Saturday"
    ws["A2"].fill = make_fill(SUBHDR_BG)
    ws["A2"].font = Font(name="Arial", bold=False, size=11, color="FFFFFF")
    ws["A2"].alignment = Alignment(horizontal="center", vertical="center")
    ws.row_dimensions[2].height = 22

    row = 4
    for wk_idx, week in enumerate(weeks):
        # Week header
        ws.merge_cells(f"A{row}:G{row}")
        ws[f"A{row}"] = f"Week {wk_idx + 1}  ({week[0].strftime('%d %b')} – {week[5].strftime('%d %b %Y')})"
        ws[f"A{row}"].fill = make_fill("2E75B6")
        ws[f"A{row}"].font = Font(name="Arial", bold=True, size=11, color="FFFFFF")
        ws[f"A{row}"].alignment = Alignment(horizontal="center", vertical="center")
        ws.row_dimensions[row].height = 22
        row += 1

        # Day column headers
        ws.cell(row=row, column=1, value="Time Slot").fill = make_fill(HEADER_BG)
        ws.cell(row=row, column=1).font = hdr_font(size=10)
        ws.cell(row=row, column=1).alignment = Alignment(horizontal="center", vertical="center")
        ws.cell(row=row, column=1).border = make_border()
        for ci, (day_name, day_date) in enumerate(zip(DAY_COLS, week), start=2):
            cell = ws.cell(row=row, column=ci,
                           value=f"{day_name}\n{day_date.strftime('%d %b')}")
            in_range = m_start <= day_date <= m_end
            cell.fill = make_fill(HEADER_BG if in_range else SUNDAY_BG)
            cell.font = Font(name="Arial", bold=True, size=10,
                             color="FFFFFF" if in_range else "999999")
            cell.alignment = Alignment(horizontal="center", vertical="center", wrap_text=True)
            cell.border = make_border()
        ws.row_dimensions[row].height = 30
        row += 1

        # Time slots
        for si, (ts, te) in enumerate(TIME_SLOTS):
            ws.row_dimensions[row].height = 20
            is_lunch = (si == LUNCH_SLOT)
            label = f"{ts} – {te}"
            tc = ws.cell(row=row, column=1, value=label)
            tc.fill = make_fill(LUNCH_BG if is_lunch else (ALT_ROW_BG if si % 2 == 0 else "FFFFFF"))
            tc.font = cell_font(bold=is_lunch, size=9)
            tc.alignment = Alignment(horizontal="center", vertical="center")
            tc.border = make_border()

            for ci, day_date in enumerate(week, start=2):
                in_range = m_start <= day_date <= m_end
                if not in_range:
                    cell = ws.cell(row=row, column=ci, value="")
                    cell.fill = make_fill(SUNDAY_BG)
                    cell.border = make_border()
                    continue
                if is_lunch:
                    cell = ws.cell(row=row, column=ci, value="🍽  LUNCH BREAK")
                    cell.fill = make_fill(LUNCH_BG)
                    cell.font = Font(name="Arial", bold=True, size=9, color="7F6000")
                    cell.alignment = Alignment(horizontal="center", vertical="center")
                    cell.border = make_border()
                else:
                    subj = slot_schedule.get(day_date, [""] * 9)[si]
                    color = SUBJECT_COLORS.get(subj, "FFFFFF")
                    cell = ws.cell(row=row, column=ci, value=subj)
                    cell.fill = make_fill(color)
                    cell.font = cell_font(size=9, bold=(subj == "REVISION / Mock Test"))
                    cell.alignment = Alignment(horizontal="center", vertical="center",
                                               wrap_text=True)
                    cell.border = make_border()
            row += 1

        row += 1  # blank row between weeks

for title, ms, me in months:
    write_monthly_sheet(wb, title, ms, me)

# ── SHEET 5: Weekly detail (all 13 weeks in one view) ──────────────────────
ws_wk = wb.create_sheet("Full Weekly Detail")
ws_wk.sheet_view.showGridLines = False
ws_wk.column_dimensions["A"].width = 5
ws_wk.column_dimensions["B"].width = 16
ws_wk.column_dimensions["C"].width = 20
for ci in range(4, 10):
    ws_wk.column_dimensions[get_column_letter(ci)].width = 25

ws_wk.merge_cells("B1:I1")
ws_wk["B1"] = "PHARMACIST EXAM PREP – FULL 13-WEEK SCHEDULE"
ws_wk["B1"].fill = make_fill(HEADER_BG)
ws_wk["B1"].font = Font(name="Arial", bold=True, size=14, color="FFFFFF")
ws_wk["B1"].alignment = Alignment(horizontal="center", vertical="center")
ws_wk.row_dimensions[1].height = 35

# Headers
hdr_row = 3
ws_wk.row_dimensions[hdr_row].height = 25
for col, text in [(1,"#"), (2,"Date"), (3,"Day"), (4,"09-10"), (5,"10-11"),
                  (6,"11-12"), (7,"12-13"), (8,"14-15"), (9,"15-16"),
                  (10,"16-17"), (11,"17-18")]:
    c = ws_wk.cell(row=hdr_row, column=col, value=text)
    c.fill = make_fill(HEADER_BG); c.font = hdr_font(size=10)
    c.alignment = Alignment(horizontal="center", vertical="center")
    c.border = make_border()
ws_wk.column_dimensions["A"].width = 4
ws_wk.column_dimensions["B"].width = 12
ws_wk.column_dimensions["C"].width = 12
for ci in range(4, 12):
    ws_wk.column_dimensions[get_column_letter(ci)].width = 22

data_row = 4
day_num = 0
for day in teaching_days:
    day_num += 1
    slots = slot_schedule[day]
    # teaching slots only (skip lunch at index 4)
    teaching = [s for i, s in enumerate(slots) if i != LUNCH_SLOT]
    row_bg = ALT_ROW_BG if data_row % 2 == 0 else "FFFFFF"
    ws_wk.row_dimensions[data_row].height = 18

    ws_wk.cell(row=data_row, column=1, value=day_num).fill = make_fill(row_bg)
    ws_wk.cell(row=data_row, column=1).font = cell_font(size=9)
    ws_wk.cell(row=data_row, column=1).alignment = Alignment(horizontal="center", vertical="center")
    ws_wk.cell(row=data_row, column=1).border = make_border()

    ws_wk.cell(row=data_row, column=2, value=day.strftime("%d %b %Y")).fill = make_fill(row_bg)
    ws_wk.cell(row=data_row, column=2).font = cell_font(size=9)
    ws_wk.cell(row=data_row, column=2).alignment = Alignment(horizontal="center", vertical="center")
    ws_wk.cell(row=data_row, column=2).border = make_border()

    ws_wk.cell(row=data_row, column=3, value=day.strftime("%A")).fill = make_fill(row_bg)
    ws_wk.cell(row=data_row, column=3).font = cell_font(size=9)
    ws_wk.cell(row=data_row, column=3).alignment = Alignment(horizontal="center", vertical="center")
    ws_wk.cell(row=data_row, column=3).border = make_border()

    for ci, subj in enumerate(teaching, start=4):
        color = SUBJECT_COLORS.get(subj, row_bg)
        c = ws_wk.cell(row=data_row, column=ci, value=subj)
        c.fill = make_fill(color); c.font = cell_font(size=9)
        c.alignment = Alignment(horizontal="center", vertical="center", wrap_text=True)
        c.border = make_border()

    data_row += 1

# ── Save ────────────────────────────────────────────────────────────────────
out_path = "/tmp/workspace/pharmacist-timetable/Pharmacist_Exam_Prep_3Month_Timetable.xlsx"
wb.save(out_path)
print(f"Saved: {out_path}")
print(f"Teaching days: {len(teaching_days)}")
print(f"Total classes assigned: {idx}")
Running Command

cd /tmp/workspace/pharmacist-timetable && python build_timetable.py

Your timetable is ready! Download it here:

Pharmacist Exam Prep 3Month Timetable

Spreadsheet · XLSX


What's Inside the File

The workbook has 5 sheets:
SheetContent
CoverSummary of all 10 subjects, class count per subject, daily time slots key
Month 1 - July-AugWeek-by-week calendar (16 Jul - 15 Aug)
Month 2 - Aug-SepWeek-by-week calendar (16 Aug - 15 Sep)
Month 3 - Sep-OctWeek-by-week calendar (16 Sep - 15 Oct)
Full Weekly DetailAll 79 days in one scrollable table, 8 slots per row

Timetable Details

  • Duration: 16 July 2026 - 15 October 2026 (3 months)
  • Days: Monday to Saturday (79 teaching days)
  • Hours: 9:00 AM - 6:00 PM | 8 class slots + 1 lunch break (1:00-2:00 PM)
  • Total Classes: 350 exactly assigned

Subject Distribution

SubjectClasses
Pharmacology50
Pharmaceutics45
Pharmaceutical Chemistry45
Clinical Pharmacy40
Pharmacognosy35
Drug Store Management30
Biochemistry30
Human Anatomy & Physiology30
Pharmacokinetics25
Health Education20
Total350
Each subject is color-coded in the Excel for easy visual scanning. Lunch breaks are highlighted in yellow across all sheets.

Me pharmacist ki exam tayri kr rha hu Rajsthan state se

Searching the Web

Rajasthan State Pharmacist exam 2025 2026 syllabus RSMSSB notification

Searching the Web

Rajasthan Pharmacist exam pattern marks subjects RSMSSB

Reading Web Page

https://www.adda247.com/exams/nursing/rajasthan-pharmacist-s…

Ab aapke liye Rajasthan pharmacist exam ki poori jankari yahan hai:

🎯 Rajasthan Pharmacist Exam - Poori Jankari (RSMSSB / Rajasthan Health Dept.)


📋 Exam Pattern

#SectionQuestionsMarks
1General Knowledge4545
2Pharmacy Subject105105
Total150150
  • Time: 3 ghante (180 minutes)
  • Negative Marking: 0.33 marks har galat answer par
  • Mode: Offline (OMR based)
  • Minimum passing: ~40% mandatory (sectional bhi)

📚 Pharmacy Subject Syllabus (105 Marks)

#SubjectPriority
1Pharmaceutics⭐⭐⭐ High
2Pharmaceutical Chemistry⭐⭐⭐ High
3Pharmacognosy⭐⭐ Medium
4Biochemistry & Clinical Pathology⭐⭐ Medium
5Human Anatomy & Physiology⭐⭐ Medium
6Health Education & Community Pharmacy⭐⭐ Medium
7Pharmacology & Toxicology⭐⭐⭐ Highest
8Pharmaceutical Jurisprudence (Pharmacy Act, Drug Laws)⭐⭐⭐ High
9Drug Store & Business Management⭐⭐ Medium
10Hospital & Clinical Pharmacy⭐⭐ Medium

📖 General Knowledge Syllabus (45 Marks)

  • Rajasthan GK - Itihas, Bhugol, Kala, Sanskriti ⬅ bahut important
  • Current Affairs (National + International)
  • Indian History & National Movement
  • Indian Economy & Budget
  • Science & Technology
  • Sports, Awards, Important Days
  • Books & Authors, Capitals, Abbreviations
Tip: Rajasthan GK ke liye zyada focus karo - state exam hai isliye Rajasthan se bahut zyaada questions aate hain.

📅 3-Month Strategy (Aapki Excel File ke Hisaab se)

MonthFocus
Month 1 (Jul 16 - Aug 15)Pharmacology + Pharmaceutics + Pharmaceutical Chemistry
Month 2 (Aug 16 - Sep 15)Pharmacognosy + Biochemistry + Human Anatomy + Jurisprudence
Month 3 (Sep 16 - Oct 15)Clinical Pharmacy + Rajasthan GK + Current Affairs + Full Revision + Mock Tests

📚 Best Books

SubjectBook
PharmacologyKD Tripathi - Essentials of Medical Pharmacology
PharmaceuticsRM Mehta / Lachman & Lieberman
Pharmacy LawPharmacy Act 1948, Drugs & Cosmetics Act 1940
Rajasthan GKLucent Rajasthan GK / Dr. Rajiv Lekhak
General GKLucent's Objective GK

✅ Important Tips

  1. Pharmacology sabse zyaada questions deta hai - isko solid banao
  2. Negative marking hai (0.33) - guessing se bacho
  3. Rajasthan GK ke liye alag se 1 ghanta roz do
  4. Previous year papers zaroor solve karo (RSMSSB ke)
  5. Har subject mein Drug laws (Pharmacy Act 1948, DCA 1940) ke questions aate hain
Official website check karte raho: rajswasthya.nic.in
Aapki 3-month ki Excel timetable pehle se ready hai - us mein ab aap Rajasthan GK ko 20 classes aur Pharmacology ko 50 classes denge to selection pakka ho jayega! 💪
This is a shared conversation. Sign in to Orris to start your own chat.