141 lines
5.4 KiB
Python
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()
|