project/database.py

141 lines
5.4 KiB
Python

import json
import os
from datetime import datetime
class SimpleDB:
def __init__(self):
self.products_file = 'products.json'
self.suppliers_file = 'suppliers.json'
self.categories_file = 'categories.json'
self.incoming_file = 'incoming_orders.json'
self._init_files()
def _init_files(self):
files = [self.products_file, self.suppliers_file, self.categories_file, self.incoming_file]
for file in files:
if not os.path.exists(file):
with open(file, 'w', encoding='utf-8') as f:
json.dump([], f)
# ==================== ТОВАРЫ ====================
def get_products(self):
try:
with open(self.products_file, 'r', encoding='utf-8') as f:
return json.load(f)
except:
return []
def get_product_by_id(self, product_id):
products = self.get_products()
for product in products:
if product.get('id') == product_id:
return product
return None
def save_product(self, product):
products = self.get_products()
product['id'] = len(products) + 1
products.append(product)
with open(self.products_file, 'w', encoding='utf-8') as f:
json.dump(products, f, ensure_ascii=False, indent=2)
return product
def update_product(self, product_id, updated_data):
products = self.get_products()
for i, product in enumerate(products):
if product.get('id') == product_id:
products[i].update(updated_data)
break
with open(self.products_file, 'w', encoding='utf-8') as f:
json.dump(products, f, ensure_ascii=False, indent=2)
return True
def delete_product(self, product_id):
products = self.get_products()
products = [p for p in products if p.get('id') != product_id]
with open(self.products_file, 'w', encoding='utf-8') as f:
json.dump(products, f, ensure_ascii=False, indent=2)
def update_stock(self, product_id, quantity_change):
products = self.get_products()
for product in products:
if product.get('id') == product_id:
product['stock_quantity'] = product.get('stock_quantity', 0) + quantity_change
break
with open(self.products_file, 'w', encoding='utf-8') as f:
json.dump(products, f, ensure_ascii=False, indent=2)
# ==================== ПОСТАВЩИКИ ====================
def get_suppliers(self):
try:
with open(self.suppliers_file, 'r', encoding='utf-8') as f:
return json.load(f)
except:
return []
def get_supplier_by_id(self, supplier_id):
suppliers = self.get_suppliers()
for supplier in suppliers:
if supplier.get('id') == supplier_id:
return supplier
return None
def save_supplier(self, supplier):
suppliers = self.get_suppliers()
supplier['id'] = len(suppliers) + 1
suppliers.append(supplier)
with open(self.suppliers_file, 'w', encoding='utf-8') as f:
json.dump(suppliers, f, ensure_ascii=False, indent=2)
return supplier
def update_supplier(self, supplier_id, updated_data):
suppliers = self.get_suppliers()
for i, supplier in enumerate(suppliers):
if supplier.get('id') == supplier_id:
suppliers[i].update(updated_data)
break
with open(self.suppliers_file, 'w', encoding='utf-8') as f:
json.dump(suppliers, f, ensure_ascii=False, indent=2)
return True
def delete_supplier(self, supplier_id):
suppliers = self.get_suppliers()
suppliers = [s for s in suppliers if s.get('id') != supplier_id]
with open(self.suppliers_file, 'w', encoding='utf-8') as f:
json.dump(suppliers, f, ensure_ascii=False, indent=2)
# ==================== КАТЕГОРИИ ====================
def get_categories(self):
try:
with open(self.categories_file, 'r', encoding='utf-8') as f:
return json.load(f)
except:
return []
# ==================== ПРИХОДНЫЕ НАКЛАДНЫЕ ====================
def get_incoming_orders(self, sort_by='date', order='desc'):
try:
with open(self.incoming_file, 'r', encoding='utf-8') as f:
orders = json.load(f)
if sort_by == 'date':
orders.sort(key=lambda x: x.get('date', ''), reverse=(order == 'desc'))
elif sort_by == 'total':
orders.sort(key=lambda x: x.get('final_total', x.get('total', 0)), reverse=(order == 'desc'))
elif sort_by == 'supplier':
orders.sort(key=lambda x: x.get('supplier_name', ''), reverse=(order == 'desc'))
return orders
except:
return []
def save_incoming_order(self, order):
orders = self.get_incoming_orders()
order['id'] = len(orders) + 1
order['date'] = datetime.now().strftime('%d.%m.%Y %H:%M')
orders.append(order)
with open(self.incoming_file, 'w', encoding='utf-8') as f:
json.dump(orders, f, ensure_ascii=False, indent=2)
return order
db = SimpleDB()