DeepSeek - Python إدارة المشتريات
DeepSeek - Python إدارة المشتريات
مقدمة
سنقدم هنا نظاًم ا متكاماًل إلدارة. وضمان كفاءة سلسلة التوريد، التحكم في التكاليف، إدارة الموردين،إدارة فريق المشتريات تتطلب تنظيم عمليات الشراء
فريق المشتريات باستخدام لغةPython.
import sqlite3
from datetime import datetime
def setup_procurement_db():
""""""إنشاء قاعدة بيانات المشتريات
conn = sqlite3.connect('procurement.db')
cursor = conn.cursor()
# جدول الموردين
cursor.execute('''
CREATE TABLE IF NOT EXISTS suppliers (
supplier_id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
contact_person TEXT,
email TEXT UNIQUE,
phone TEXT,
address TEXT,
tax_id TEXT,
rating INTEGER DEFAULT 3,
is_active INTEGER DEFAULT 1,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)''')
# جدول الفواتير
cursor.execute('''
CREATE TABLE IF NOT EXISTS invoices (
invoice_id INTEGER PRIMARY KEY AUTOINCREMENT,
order_id INTEGER NOT NULL,
invoice_number TEXT UNIQUE,
invoice_date TIMESTAMP,
due_date TIMESTAMP,
amount REAL NOT NULL,
tax_amount REAL,
total_amount REAL NOT NULL,
status TEXT CHECK(status IN ('pending', 'paid', 'partially_paid', 'cancelled')) DEFAULT
'pending',
payment_date TIMESTAMP,
FOREIGN KEY (order_id) REFERENCES purchase_orders(order_id)
)''')
conn.commit()
conn.close()
setup_procurement_db()
class SupplierManager:
def __init__(self):
self.conn = sqlite3.connect('procurement.db')
if not update_parts:
raise ValueError(")"ال توجد حقول صالحة للتحديث
cursor.execute(update_query, params)
self.conn.commit()
return cursor.rowcount
cursor = self.conn.cursor()
cursor.execute('''
UPDATE suppliers SET rating = ? WHERE supplier_id = ?
''', (rating, supplier_id))
self.conn.commit()
return cursor.rowcount
def __del__(self):
self.conn.close()
class PurchaseRequestSystem:
def __init__(self):
self.conn = sqlite3.connect('procurement.db')
def get_pending_requests(self):
""""""استرجاع طلبات الشراء المعلقة
cursor = self.conn.cursor()
cursor.execute('''
SELECT r.*, u.full_name as requester_name
FROM purchase_requests r
JOIN users u ON r.requester_id = u.id
WHERE r.status = 'pending'
ORDER BY
CASE urgency
WHEN 'high' THEN 1
WHEN 'medium' THEN 2
WHEN 'low' THEN 3
END,
created_at
''')
return cursor.fetchall()
def __del__(self):
self.conn.close()
class PurchaseOrderSystem:
def __init__(self):
self.conn = sqlite3.connect('procurement.db')
self.conn.commit()
return order_id
if not total_amount:
raise ValueError(")"ال يمكن إصدار أمر شراء بدون بنود
self.conn.commit()
return cursor.rowcount
all_received = True
for qty, received_qty in cursor.fetchall():
if qty != received_qty:
all_received = False
break
self.conn.commit()
return all_received
def __del__(self):
self.conn.close()
import tkinter as tk
from tkinter import ttk, messagebox
class ProcurementDashboard:
def __init__(self, root, user_id, user_role):
self.root = root
self.user_id = user_id
self.user_role = user_role
self.supplier_manager = SupplierManager()
self.request_system = PurchaseRequestSystem()
self.order_system = PurchaseOrderSystem()
self.setup_ui()
def setup_ui(self):
""""""إعداد واجهة المستخدم
self.root.title(f" نظام إدارة المشتريات- {self.user_role}")
self.root.geometry("1200x800")
# تبويب التقارير
self.reports_tab = ttk.Frame(self.notebook)
self.setup_reports_tab()
self.notebook.add(self.reports_tab, text=")"التقارير واإلحصائيات
def setup_requests_tab(self):
""""""إعداد تبويب طلبات الشراء
# إطار التحكم
control_frame = ttk.Frame(self.requests_tab)
control_frame.pack(fill='x', padx=5, pady=5)
ttk.Button(
control_frame,
text=""طلب جديد,
command=self.show_new_request_dialog
).pack(side='right', padx=5)
self.requests_tree.heading('item_name', text=")"الصنف
self.requests_tree.column('item_name', width=200)
self.requests_tree.heading('quantity', text=")"الكمية
self.requests_tree.column('quantity', width=80, anchor='center')
self.requests_tree.heading('department', text=")"القسم
self.requests_tree.column('department', width=120)
self.requests_tree.heading('status', text=")"الحالة
self.requests_tree.column('status', width=100)
# شريط التمرير
scrollbar = ttk.Scrollbar(self.requests_tab, orient='vertical', command=self.requests_tr
ee.yview)
self.requests_tree.configure(yscrollcommand=scrollbar.set)
scrollbar.pack(side='right', fill='y')
self.requests_tree.pack(fill='both', expand=True, padx=5, pady=5)
# تحميل البيانات
self.load_requests()
# إعداد قائمة السياق
self.setup_requests_context_menu()
def load_requests(self):
""""""تحميل طلبات الشراء
# مسح البيانات الحالية
for item in self.requests_tree.get_children():
self.requests_tree.delete(item)
def setup_requests_context_menu(self):
""""""إعداد قائمة السياق لطلبات الشراء
self.requests_menu = tk.Menu(self.root, tearoff=0)
self.requests_menu.add_command(
label=""عرض التفاصيل,
command=self.view_request_details
)
def approve_selected_request(self):
""""""اعتماد الطلب المحدد
selected_item = self.requests_tree.selection()
if not selected_item:
messagebox.showwarning(" "يرجى تحديد طلب أوًال,")"تحذير
return
request_id = self.requests_tree.item(selected_item[0])['values'][0]
if self.request_system.approve_request(request_id, self.user_id):
messagebox.showinfo(" "تم اعتماد الطلب بنجاح,")"نجاح
self.load_requests()
else:
messagebox.showerror(" "فشل في اعتماد الطلب,")"خطأ
def show_new_request_dialog(self):
""""""عرض نافذة إنشاء طلب جديد
dialog = tk.Toplevel(self.root)
dialog.title(")"طلب شراء جديد
dialog.geometry("500x400")
# حقول النموذج
ttk.Label(dialog, text="الصنف:").grid(row=0, column=0, padx=5, pady=5, sticky='e')
item_entry = ttk.Entry(dialog, width=30)
item_entry.grid(row=0, column=1, padx=5, pady=5, sticky='w')
# أزرار التحكم
button_frame = ttk.Frame(dialog)
button_frame.grid(row=5, column=0, columnspan=2, pady=10)
ttk.Button(
button_frame,
text=""إرسال الطلب,
command=lambda: self.submit_new_request(
item_entry.get(),
quantity_entry.get(),
department_entry.get(),
urgency_var.get(),
notes_text.get("1.0", tk.END).strip(),
dialog
)
).pack(side='left', padx=5)
ttk.Button(
button_frame,
text=""إلغاء,
command=dialog.destroy
).pack(side='left', padx=5)
self.request_system.create_request(
requester_id=self.user_id,
department=department,
item_name=item_name,
quantity=quantity,
urgency=urgency,
notes=notes if notes else None
)
مميزات النظام
إدارة الموردين المتكاملة 1.