Skip to content

API Cài Đặt (Settings)

Module Settings cung cấp các phương thức để quản lý cài đặt hệ thống và tùy chọn người dùng trong Pancake POS.

Khởi Tạo

typescript
import { PancakeClient } from 'pancake-client-sdk';

const client = new PancakeClient('your-api-key', 'your-shop-id');
const settingsApi = client.settings;

Quản Lý Cài Đặt

Lấy Cài Đặt Cửa Hàng

typescript
const settings = await client.settings.getShopSettings();

Cập Nhật Cài Đặt Chung

typescript
const updatedSettings = await client.settings.updateGeneralSettings({
  shop_name: 'Shop ABC',
  time_zone: 'Asia/Ho_Chi_Minh',
  currency: 'VND',
  language: 'vi',
  tax_info: {
    tax_number: '0123456789',
    company_name: 'Công ty ABC',
    address: '123 Đường XYZ'
  },
  business_hours: {
    monday: {
      open: '08:00',
      close: '22:00',
      is_closed: false
    }
    // ... các ngày khác
  }
});

Cập Nhật Cài Đặt POS

typescript
const posSettings = await client.settings.updatePOSSettings({
  default_warehouse_id: 'warehouse-1',
  auto_print_receipt: true,
  receipt_template_id: 'template-1',
  receipt_printer: {
    type: 'thermal',
    name: 'EPSON TM-T82',
    ip_address: '192.168.1.100'
  },
  cash_drawer: {
    enabled: true,
    open_on_payment: true
  }
});

Cập Nhật Cài Đặt Hóa Đơn

typescript
const invoiceSettings = await client.settings.updateInvoiceSettings({
  auto_generate: true,
  template_id: 'template-1',
  prefix: 'INV',
  starting_number: 1000,
  tax_inclusive: true,
  default_tax_rate: 10,
  company_info: {
    logo_url: 'https://example.com/logo.png',
    bank_accounts: [
      {
        bank_name: 'VietcomBank',
        account_number: '1234567890',
        account_name: 'CONG TY ABC'
      }
    ]
  }
});

Cập Nhật Cài Đặt Thông Báo

typescript
const notificationSettings = await client.settings.updateNotificationSettings({
  email: {
    enabled: true,
    recipients: ['admin@example.com'],
    events: ['order.created', 'low_stock_alert']
  },
  sms: {
    enabled: true,
    recipients: ['0123456789'],
    events: ['order.completed']
  },
  slack: {
    enabled: true,
    webhook_url: 'https://hooks.slack.com/...',
    channel: '#orders'
  }
});

Cập Nhật Cài Đặt Hiển Thị

typescript
const displaySettings = await client.settings.updateDisplaySettings({
  theme: 'light',
  primary_color: '#1890ff',
  accent_color: '#13c2c2',
  date_format: 'DD/MM/YYYY',
  time_format: 'HH:mm',
  currency_format: {
    symbol: '₫',
    position: 'after',
    separator: ',',
    decimal: '.',
    precision: 0
  }
});

Cập Nhật Cài Đặt Tự Động Hóa

typescript
const automationSettings = await client.settings.updateAutomationSettings({
  order_status: {
    auto_confirm: {
      enabled: true,
      conditions: {
        payment_status: 'paid'
      }
    },
    auto_cancel: {
      enabled: true,
      after_hours: 24
    }
  },
  inventory: {
    low_stock_alert: {
      enabled: true,
      threshold: 10
    }
  }
});

Cập Nhật Cài Đặt Mạng Xã Hội

typescript
const socialSettings = await client.settings.updateSocialSettings({
  facebook: {
    page_id: 'page-id',
    access_token: 'access-token',
    enabled_features: ['messenger', 'product_catalog']
  },
  instagram: {
    account_id: 'account-id',
    access_token: 'access-token'
  }
});

Cập Nhật Cài Đặt Nâng Cao

typescript
const advancedSettings = await client.settings.updateAdvancedSettings({
  api: {
    enabled: true,
    rate_limit: 100,
    allowed_ips: ['192.168.1.0/24']
  },
  security: {
    two_factor_auth: true,
    password_policy: {
      min_length: 8,
      require_numbers: true,
      require_symbols: true
    }
  }
});

Quản Lý Tùy Chọn Người Dùng

Lấy Tùy Chọn

typescript
const preferences = await client.settings.getUserPreferences('user-id');

Cập Nhật Tùy Chọn

typescript
const updatedPreferences = await client.settings.updateUserPreferences('user-id', {
  notifications: {
    email: true,
    push: true,
    desktop: false
  },
  display: {
    theme: 'dark',
    language: 'vi',
    timezone: 'Asia/Ho_Chi_Minh'
  }
});

Quản Lý Cài Đặt Hệ Thống

Khôi Phục Cài Đặt Mặc Định

typescript
// Khôi phục tất cả cài đặt
await client.settings.resetToDefault();

// Khôi phục một phần cài đặt
await client.settings.resetToDefault('display');

Xuất/Nhập Cài Đặt

typescript
// Xuất cài đặt
const exportedSettings = await client.settings.exportSettings([
  'general',
  'pos',
  'invoice'
]);

// Nhập cài đặt
await client.settings.importSettings(exportedSettings);

Kiểm Tra Cài Đặt

typescript
const validation = await client.settings.validateSettings({
  general: {
    shop_name: 'New Shop Name'
  }
});

if (!validation.is_valid) {
  console.error('Lỗi cài đặt:', validation.errors);
}

Xem Lịch Sử Thay Đổi

typescript
const { data: auditLog } = await client.settings.getAuditLog({
  page_size: 20,
  page_number: 1,
  from_date: '2024-04-01',
  to_date: '2024-04-30'
});

Models

ShopSettings

typescript
interface ShopSettings {
  id: string;
  shop_id: string;
  general: GeneralSettings;
  pos: POSSettings;
  invoice: InvoiceSettings;
  notification: NotificationSettings;
  display: DisplaySettings;
  automation: AutomationSettings;
  social: SocialSettings;
  advanced: AdvancedSettings;
  created_at: string;
  updated_at: string;
}

UserPreferences

typescript
interface UserPreferences {
  id: string;
  user_id: string;
  shop_id: string;
  notifications: {
    email: boolean;
    push: boolean;
    desktop: boolean;
  };
  display: {
    theme: 'light' | 'dark' | 'system';
    language: string;
    timezone: string;
    date_format: string;
    time_format: string;
  };
  dashboard: {
    widgets: {
      id: string;
      position: number;
      enabled: boolean;
    }[];
  };
  table_settings: Record<string, {
    visible_columns: string[];
    sort_by?: string;
    sort_direction?: 'asc' | 'desc';
  }>;
  shortcuts?: Record<string, string>;
}

Ví Dụ Sử Dụng

Thiết Lập Ban Đầu

typescript
async function initialSetup() {
  try {
    // Cập nhật thông tin cơ bản
    await client.settings.updateGeneralSettings({
      shop_name: 'Shop ABC',
      time_zone: 'Asia/Ho_Chi_Minh',
      currency: 'VND',
      language: 'vi',
      tax_info: {
        tax_number: '0123456789',
        company_name: 'Công ty ABC',
        address: '123 Đường XYZ'
      }
    });

    // Cài đặt POS
    await client.settings.updatePOSSettings({
      auto_print_receipt: true,
      receipt_template_id: 'template-1',
      receipt_printer: {
        type: 'thermal',
        name: 'EPSON TM-T82'
      }
    });

    // Cài đặt hóa đơn
    await client.settings.updateInvoiceSettings({
      auto_generate: true,
      tax_inclusive: true,
      default_tax_rate: 10
    });

    // Cài đặt thông báo
    await client.settings.updateNotificationSettings({
      email: {
        enabled: true,
        recipients: ['admin@example.com'],
        events: ['order.created', 'low_stock_alert']
      }
    });

    // Cài đặt tự động hóa
    await client.settings.updateAutomationSettings({
      inventory: {
        low_stock_alert: {
          enabled: true,
          threshold: 10
        }
      }
    });

    console.log('Đã hoàn thành thiết lập cơ bản!');

  } catch (error) {
    console.error('Lỗi khi thiết lập:', error);
  }
}

Quản Lý Giao Diện Người Dùng

typescript
async function setupUserInterface(userId: string) {
  try {
    // Lấy tùy chọn hiện tại
    const preferences = await client.settings.getUserPreferences(userId);

    // Cập nhật tùy chọn hiển thị
    await client.settings.updateUserPreferences(userId, {
      display: {
        ...preferences.display,
        theme: 'system',
        date_format: 'DD/MM/YYYY',
        time_format: 'HH:mm'
      },
      dashboard: {
        widgets: [
          {
            id: 'sales_chart',
            position: 1,
            enabled: true
          },
          {
            id: 'top_products',
            position: 2,
            enabled: true
          },
          {
            id: 'recent_orders',
            position: 3,
            enabled: true
          }
        ]
      },
      table_settings: {
        orders: {
          visible_columns: ['id', 'customer', 'total', 'status'],
          sort_by: 'created_at',
          sort_direction: 'desc'
        },
        products: {
          visible_columns: ['name', 'sku', 'price', 'stock'],
          sort_by: 'name',
          sort_direction: 'asc'
        }
      }
    });

    console.log('Đã cập nhật giao diện người dùng!');

  } catch (error) {
    console.error('Lỗi khi cập nhật giao diện:', error);
  }
}