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