0% found this document useful (0 votes)
6 views14 pages

DeepSeek - Python إدارة المشتريات

The document provides a comprehensive guide for managing a procurement team using Python, including database structure and functionality for supplier management, purchase requests, and purchase orders. It outlines the creation of a procurement database, the implementation of various classes for managing suppliers and purchase requests, and the development of a user interface for procurement management. Key features include adding and updating suppliers, creating and approving purchase requests, and managing purchase orders and invoices.

Uploaded by

0101789677
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
6 views14 pages

DeepSeek - Python إدارة المشتريات

The document provides a comprehensive guide for managing a procurement team using Python, including database structure and functionality for supplier management, purchase requests, and purchase orders. It outlines the creation of a procurement database, the implementation of various classes for managing suppliers and purchase requests, and the development of a user interface for procurement management. Key features include adding and updating suppliers, creating and approving purchase requests, and managing purchase orders and invoices.

Uploaded by

0101789677
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 14

‫ دليل شامل مع أمثلة عملية في بايثون‬:‫إدارة فريق المشتريات‬

‫مقدمة‬
‫ سنقدم هنا نظاًم ا متكاماًل إلدارة‬.‫ وضمان كفاءة سلسلة التوريد‬،‫ التحكم في التكاليف‬،‫ إدارة الموردين‬،‫إدارة فريق المشتريات تتطلب تنظيم عمليات الشراء‬
‫ فريق المشتريات باستخدام لغة‬Python.

1. ‫هيكل قاعدة البيانات‬

python Copy Download

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 purchase_requests (
request_id INTEGER PRIMARY KEY AUTOINCREMENT,
requester_id INTEGER NOT NULL,
department TEXT,
item_name TEXT NOT NULL,
quantity INTEGER NOT NULL,
estimated_price REAL,
urgency TEXT CHECK(urgency IN ('low', 'medium', 'high')) DEFAULT 'medium',
status TEXT CHECK(status IN ('pending', 'approved', 'rejected', 'ordered', 'delivered'))
DEFAULT 'pending',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP,
notes TEXT
)''')

# ‫جدول أوامر الشراء‬


cursor.execute('''
CREATE TABLE IF NOT EXISTS purchase_orders (
order_id INTEGER PRIMARY KEY AUTOINCREMENT,
request_id INTEGER NOT NULL,
supplier_id INTEGER NOT NULL,
order_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
expected_delivery_date TIMESTAMP,
actual_delivery_date TIMESTAMP,
total_amount REAL NOT NULL,
status TEXT CHECK(status IN ('draft', 'sent', 'confirmed', 'shipped', 'delivered', 'canc
elled')) DEFAULT 'draft',
payment_terms TEXT,
FOREIGN KEY (request_id) REFERENCES purchase_requests(request_id),
FOREIGN KEY (supplier_id) REFERENCES suppliers(supplier_id)
)''')

# ‫جدول بنود أوامر الشراء‬


cursor.execute('''
CREATE TABLE IF NOT EXISTS order_items (
item_id INTEGER PRIMARY KEY AUTOINCREMENT,
order_id INTEGER NOT NULL,
product_name TEXT NOT NULL,
quantity INTEGER NOT NULL,
unit_price REAL NOT NULL,
total_price REAL NOT NULL,
received_quantity INTEGER DEFAULT 0,
FOREIGN KEY (order_id) REFERENCES purchase_orders(order_id)
)''')

# ‫جدول الفواتير‬
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()

2. ‫نظام إدارة الموردين‬

python Copy Download

class SupplierManager:
def __init__(self):
self.conn = sqlite3.connect('procurement.db')

def add_supplier(self, name, contact_person, email, phone, address, tax_id):


"""‫"""إضافة مورد جديد‬
cursor = self.conn.cursor()
try:
cursor.execute('''
INSERT INTO suppliers (name, contact_person, email, phone, address, tax_id)
VALUES (?, ?, ?, ?, ?, ?)
''', (name, contact_person, email, phone, address, tax_id))
self.conn.commit()
return cursor.lastrowid
except sqlite3.IntegrityError:
raise ValueError("‫)"البريد اإللكتروني مسجل بالفعل لمورد آخر‬

def update_supplier(self, supplier_id, **kwargs):


"""‫"""تحديث بيانات المورد‬
cursor = self.conn.cursor()
valid_fields = ['name', 'contact_person', 'email', 'phone', 'address', 'tax_id', 'ratin
g', 'is_active']

update_query = "UPDATE suppliers SET "


update_parts = []
params = []

for field, value in kwargs.items():


if field in valid_fields:
update_parts.append(f"{field} = ?")
params.append(value)

if not update_parts:
raise ValueError("‫)"ال توجد حقول صالحة للتحديث‬

update_query += ", ".join(update_parts) + " WHERE supplier_id = ?"


params.append(supplier_id)

cursor.execute(update_query, params)
self.conn.commit()
return cursor.rowcount

def get_suppliers(self, active_only=True):


"""‫"""استرجاع قائمة الموردين‬
cursor = self.conn.cursor()
if active_only:
cursor.execute("SELECT * FROM suppliers WHERE is_active = 1 ORDER BY name")
else:
cursor.execute("SELECT * FROM suppliers ORDER BY name")
return cursor.fetchall()

def evaluate_supplier(self, supplier_id, rating):


"""‫"""تقييم أداء المورد‬
if not 1 <= rating <= 5:
raise ValueError("5 ‫ و‬1 ‫)"التقييم يجب أن يكون بين‬

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()

3. ‫نظام طلبات الشراء‬

python Copy Download

class PurchaseRequestSystem:
def __init__(self):
self.conn = sqlite3.connect('procurement.db')

def create_request(self, requester_id, department, item_name, quantity, estimated_price=Non


e, urgency='medium', notes=None):
"""‫"""إنشاء طلب شراء جديد‬
cursor = self.conn.cursor()
cursor.execute('''
INSERT INTO purchase_requests
(requester_id, department, item_name, quantity, estimated_price, urgency, notes)
VALUES (?, ?, ?, ?, ?, ?, ?)
''', (requester_id, department, item_name, quantity, estimated_price, urgency, notes))
self.conn.commit()
return cursor.lastrowid

def approve_request(self, request_id, approver_id):


"""‫"""اعتماد طلب الشراء‬
cursor = self.conn.cursor()
cursor.execute('''
UPDATE purchase_requests
SET status = 'approved',
updated_at = CURRENT_TIMESTAMP
WHERE request_id = ? AND status = 'pending'
''', (request_id,))
self.conn.commit()
return cursor.rowcount
def reject_request(self, request_id, rejection_reason):
"""‫"""رفض طلب الشراء‬
cursor = self.conn.cursor()
cursor.execute('''
UPDATE purchase_requests
SET status = 'rejected',
notes = COALESCE(notes || '\n' || ?, ?),
updated_at = CURRENT_TIMESTAMP
WHERE request_id = ? AND status = 'pending'
''', (f"Rejection reason: {rejection_reason}", rejection_reason, request_id))
self.conn.commit()
return cursor.rowcount

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()

4. ‫نظام أوامر الشراء‬

python Copy Download

class PurchaseOrderSystem:
def __init__(self):
self.conn = sqlite3.connect('procurement.db')

def create_order(self, request_id, supplier_id, expected_delivery_date, payment_terms):


"""‫"""إنشاء أمر شراء جديد‬
cursor = self.conn.cursor()

# ‫التحقق من أن الطلب معتمد‬


cursor.execute('''
SELECT status FROM purchase_requests WHERE request_id = ?
''', (request_id,))
request_status = cursor.fetchone()[0]
if request_status != 'approved':
raise ValueError("‫)"ال يمكن إنشاء أمر شراء إال لطلبات معتمدة‬

# ‫إنشاء أمر الشراء‬


cursor.execute('''
INSERT INTO purchase_orders
(request_id, supplier_id, expected_delivery_date, payment_terms, status)
VALUES (?, ?, ?, ?, 'draft')
''', (request_id, supplier_id, expected_delivery_date, payment_terms))
order_id = cursor.lastrowid

# ‫تحديث حالة طلب الشراء‬


cursor.execute('''
UPDATE purchase_requests
SET status = 'ordered',
updated_at = CURRENT_TIMESTAMP
WHERE request_id = ?
''', (request_id,))

self.conn.commit()
return order_id

def add_order_item(self, order_id, product_name, quantity, unit_price):


"""‫"""إضافة بند إلى أمر الشراء‬
total_price = quantity * unit_price
cursor = self.conn.cursor()
cursor.execute('''
INSERT INTO order_items
(order_id, product_name, quantity, unit_price, total_price)
VALUES (?, ?, ?, ?, ?)
''', (order_id, product_name, quantity, unit_price, total_price))
self.conn.commit()
return cursor.lastrowid

def finalize_order(self, order_id):


"""‫"""إصدار أمر الشراء‬
cursor = self.conn.cursor()

# ‫حساب المبلغ اإلجمالي‬


cursor.execute('''
SELECT SUM(total_price) FROM order_items WHERE order_id = ?
''', (order_id,))
total_amount = cursor.fetchone()[0]

if not total_amount:
raise ValueError("‫)"ال يمكن إصدار أمر شراء بدون بنود‬

# ‫تحديث أمر الشراء‬


cursor.execute('''
UPDATE purchase_orders
SET total_amount = ?,
status = 'sent',
order_date = CURRENT_TIMESTAMP
WHERE order_id = ? AND status = 'draft'
''', (total_amount, order_id))

self.conn.commit()
return cursor.rowcount

def receive_order(self, order_id, items_received):


"""‫"""تسجيل استالم األصناف‬
cursor = self.conn.cursor()

# ‫تحديث الكميات المستلمة لكل بند‬


for item_id, received_qty in items_received.items():
cursor.execute('''
UPDATE order_items
SET received_quantity = ?
WHERE item_id = ? AND order_id = ?
''', (received_qty, item_id, order_id))

# ‫التحقق إذا تم استالم جميع البنود بالكامل‬


cursor.execute('''
SELECT quantity, received_quantity
FROM order_items
WHERE order_id = ?
''', (order_id,))

all_received = True
for qty, received_qty in cursor.fetchall():
if qty != received_qty:
all_received = False
break

# ‫تحديث حالة أمر الشراء‬


if all_received:
cursor.execute('''
UPDATE purchase_orders
SET status = 'delivered',
actual_delivery_date = CURRENT_TIMESTAMP
WHERE order_id = ?
''', (order_id,))

# ‫تحديث حالة طلب الشراء‬


cursor.execute('''
UPDATE purchase_requests
SET status = 'delivered',
updated_at = CURRENT_TIMESTAMP
WHERE request_id = (
SELECT request_id FROM purchase_orders WHERE order_id = ?
)
''', (order_id,))

self.conn.commit()
return all_received
def __del__(self):
self.conn.close()

5. ‫لوحة تحكم إدارة المشتريات‬

python Copy Download

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.notebook = ttk.Notebook(self.root)
self.notebook.pack(fill='both', expand=True)

# ‫تبويب طلبات الشراء‬


self.requests_tab = ttk.Frame(self.notebook)
self.setup_requests_tab()
self.notebook.add(self.requests_tab, text="‫)"طلبات الشراء‬

# ‫تبويب أوامر الشراء‬


self.orders_tab = ttk.Frame(self.notebook)
self.setup_orders_tab()
self.notebook.add(self.orders_tab, text="‫)"أوامر الشراء‬

# )‫تبويب الموردين (فقط للمديرين‬


if self.user_role in ('admin', 'procurement_manager'):
self.suppliers_tab = ttk.Frame(self.notebook)
self.setup_suppliers_tab()
self.notebook.add(self.suppliers_tab, text="‫)"إدارة الموردين‬

# ‫تبويب التقارير‬
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)

# ‫شجرة عرض الطلبات‬


columns = ('request_id', 'item_name', 'quantity', 'department', 'requester', 'status',
'created_at')
self.requests_tree = ttk.Treeview(
self.requests_tab,
columns=columns,
show='headings',
height=20
)

# ‫تعيين العناوين واألعمدة‬


self.requests_tree.heading('request_id', text="‫)"رقم الطلب‬
self.requests_tree.column('request_id', width=80, anchor='center')

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('requester', text="‫)"مقدم الطلب‬


self.requests_tree.column('requester', width=150)

self.requests_tree.heading('status', text="‫)"الحالة‬
self.requests_tree.column('status', width=100)

self.requests_tree.heading('created_at', text="‫)"تاريخ الطلب‬


self.requests_tree.column('created_at', width=120)

# ‫شريط التمرير‬
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)

# ‫جلب البيانات حسب صالحية المستخدم‬


if self.user_role in ('admin', 'procurement_manager'):
# ‫المديرين يرون جميع الطلبات‬
cursor = self.request_system.conn.cursor()
cursor.execute('''
SELECT r.request_id, r.item_name, r.quantity, r.department,
u.full_name, r.status, r.created_at
FROM purchase_requests r
JOIN users u ON r.requester_id = u.id
ORDER BY r.created_at DESC
''')
else:
# ‫المستخدمين العاديين يرون فقط طلباتهم‬
cursor = self.request_system.conn.cursor()
cursor.execute('''
SELECT r.request_id, r.item_name, r.quantity, r.department,
u.full_name, r.status, r.created_at
FROM purchase_requests r
JOIN users u ON r.requester_id = u.id
WHERE r.requester_id = ?
ORDER BY r.created_at DESC
''', (self.user_id,))

# ‫إضافة البيانات إلى الشجرة‬


for row in cursor.fetchall():
self.requests_tree.insert('', 'end', values=row)

def setup_requests_context_menu(self):
"""‫"""إعداد قائمة السياق لطلبات الشراء‬
self.requests_menu = tk.Menu(self.root, tearoff=0)

if self.user_role in ('admin', 'procurement_manager'):


self.requests_menu.add_command(
label="‫"اعتماد الطلب‬,
command=self.approve_selected_request
)
self.requests_menu.add_command(
label="‫"رفض الطلب‬,
command=self.reject_selected_request
)
self.requests_menu.add_separator()
self.requests_menu.add_command(
label="‫"إنشاء أمر شراء‬,
command=self.create_order_from_request
)

self.requests_menu.add_command(
label="‫"عرض التفاصيل‬,
command=self.view_request_details
)

# ‫ربط قائمة السياق بالنقر األيمن‬


self.requests_tree.bind("<Button-3>", self.show_requests_context_menu)

def show_requests_context_menu(self, event):


"""‫"""عرض قائمة السياق لطلبات الشراء‬
item = self.requests_tree.identify_row(event.y)
if item:
self.requests_tree.selection_set(item)
self.requests_menu.post(event.x_root, event.y_root)

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')

ttk.Label(dialog, text="‫الكمية‬:").grid(row=1, column=0, padx=5, pady=5, sticky='e')


quantity_entry = ttk.Entry(dialog, width=10)
quantity_entry.grid(row=1, column=1, padx=5, pady=5, sticky='w')

ttk.Label(dialog, text="‫القسم‬:").grid(row=2, column=0, padx=5, pady=5, sticky='e')


department_entry = ttk.Entry(dialog, width=20)
department_entry.grid(row=2, column=1, padx=5, pady=5, sticky='w')

ttk.Label(dialog, text="‫األولوية‬:").grid(row=3, column=0, padx=5, pady=5, sticky='e')


urgency_var = tk.StringVar(value='medium')
urgency_menu = ttk.OptionMenu(dialog, urgency_var, 'medium', 'low', 'medium', 'high')
urgency_menu.grid(row=3, column=1, padx=5, pady=5, sticky='w')

ttk.Label(dialog, text="‫مالحظات‬:").grid(row=4, column=0, padx=5, pady=5, sticky='ne')


notes_text = tk.Text(dialog, width=30, height=5)
notes_text.grid(row=4, 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)

def submit_new_request(self, item_name, quantity, department, urgency, notes, dialog):


"""‫"""إرسال طلب جديد‬
try:
quantity = int(quantity)
if quantity <= 0:
raise ValueError("‫)"الكمية يجب أن تكون رقم موجب‬

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
)

messagebox.showinfo("‫ "تم إرسال الطلب بنجاح‬,"‫)"نجاح‬


dialog.destroy()
self.load_requests()
except ValueError as e:
messagebox.showerror("‫"خطأ في المدخالت‬, str(e))
‫تشغيل النظام ‪6.‬‬

‫‪python‬‬ ‫‪Copy‬‬ ‫‪Download‬‬

‫‪if __name__ == "__main__":‬‬


‫إنشاء قاعدة البيانات (إذا لم تكن موجودة) ‪#‬‬
‫)(‪setup_procurement_db‬‬

‫إنشاء نافذة التطبيق ‪#‬‬


‫)(‪root = tk.Tk‬‬

‫في تطبيق حقيقي‪ ،‬سيكون هناك نظام تسجيل دخول ‪#‬‬


‫هنا نستخدم مستخدم افتراضي ألغراض العرض ‪#‬‬
‫‪user_id = 1‬‬
‫'‪user_role = 'procurement_manager‬‬ ‫‪: admin, procurement_manager, department_hea‬يمكن أن يكون ‪#‬‬
‫‪d, employee‬‬

‫تشغيل لوحة التحكم ‪#‬‬


‫)‪app = ProcurementDashboard(root, user_id, user_role‬‬
‫)(‪root.mainloop‬‬

‫مميزات النظام‬
‫إدارة الموردين المتكاملة ‪1.‬‬

‫تسجيل وتقييم الموردين‬

‫تتبع أداء الموردين‬

‫إدارة معلومات االتصال والعقود‬

‫عملية طلبات الشراء ‪2.‬‬

‫تقديم طلبات الشراء من قبل الموظفين‬

‫اعتماد أو رفض الطلبات من قبل المديرين‬

‫نظام أولويات للطلبات العاجلة‬

‫نظام أوامر الشراء ‪3.‬‬

‫تحويل الطلبات المعتمدة إلى أوامر شراء‬

‫تتبع حالة األوامر (مرسلة‪ ،‬مؤكدة‪ ،‬منفذة)‬

‫تسجيل استالم المواد‬

‫التقارير واإلحصائيات ‪4.‬‬

‫تقارير عن اإلنفاق حسب األقسام‬

‫تحليل أداء الموردين‬

‫تتبع وقت التسليم ومعدالت التأخير‬

‫واجهة مستخدم سهلة ‪5.‬‬


‫تبويب للوصول السريع للوظائف‬

‫جداول قابلة للفرز والتصفية‬

‫نماذج سهلة لإلدخال‬

‫‪:‬لتنفيذ هذا النظام في مؤسستك‪ ،‬يمكنك‬

‫تخصيص حقول قاعدة البيانات حسب احتياجاتك ‪1.‬‬

‫إضافة المزيد من عمليات التحقق والصالحيات ‪2.‬‬

‫دمج النظام مع أنظمة أخرى مثل المحاسبة أو المخازن ‪3.‬‬

‫للربط مع أنظمة خارجية )‪ (APIs‬تطوير واجهات برمجة تطبيقات ‪4.‬‬

You might also like