using PowderCoating.Application.DTOs.Import; namespace PowderCoating.Application.Interfaces; /// /// Service for bulk importing data via CSV files. /// Supports customers, catalog items, and inventory items. /// public interface ICsvImportService { /// /// Generate a CSV template file for customer imports. /// /// CSV file content as byte array byte[] GenerateCustomerTemplate(); /// /// Generate a CSV template file for catalog item imports. /// /// CSV file content as byte array byte[] GenerateCatalogItemTemplate(); /// /// Generate a CSV template file for inventory item imports. /// /// CSV file content as byte array byte[] GenerateInventoryItemTemplate(); /// /// Import customers from a CSV stream. /// /// CSV file stream /// Company ID for multi-tenancy /// Import result with success/error counts Task ImportCustomersAsync(Stream csvStream, int companyId); /// /// Import catalog items from a CSV stream. /// Creates categories on-the-fly if they don't exist. /// /// CSV file stream /// Company ID for multi-tenancy /// Optional revenue account to assign to all imported items /// Optional COGS account to assign to all imported items /// Import result with success/error counts Task ImportCatalogItemsAsync(Stream csvStream, int companyId, int? revenueAccountId = null, int? cogsAccountId = null); /// /// Import inventory items from a CSV stream. /// /// CSV file stream /// Company ID for multi-tenancy /// Optional inventory asset account to assign to all imported items /// Optional COGS account to assign to all imported items /// Import result with success/error counts Task ImportInventoryItemsAsync(Stream csvStream, int companyId, int? inventoryAccountId = null, int? cogsAccountId = null); /// /// Generate a CSV template file for quote imports. /// /// CSV file content as byte array byte[] GenerateQuoteTemplate(); /// /// Import quotes from a CSV stream. /// /// CSV file stream /// Company ID for multi-tenancy /// Import result with success/error counts Task ImportQuotesAsync(Stream csvStream, int companyId); /// /// Generate a CSV template file for job imports. /// /// CSV file content as byte array byte[] GenerateJobTemplate(); /// /// Import jobs from a CSV stream. /// /// CSV file stream /// Company ID for multi-tenancy /// Import result with success/error counts Task ImportJobsAsync(Stream csvStream, int companyId); /// /// Generate a CSV template file for appointment imports. /// /// CSV file content as byte array byte[] GenerateAppointmentTemplate(); /// /// Import appointments from a CSV stream. /// /// CSV file stream /// Company ID for multi-tenancy /// Import result with success/error counts Task ImportAppointmentsAsync(Stream csvStream, int companyId); /// /// Generate a CSV template file for equipment imports. /// /// CSV file content as byte array byte[] GenerateEquipmentTemplate(); /// /// Import equipment from a CSV stream. /// /// CSV file stream /// Company ID for multi-tenancy /// Import result with success/error counts Task ImportEquipmentAsync(Stream csvStream, int companyId); /// /// Generate a CSV template file for maintenance record imports. /// /// CSV file content as byte array byte[] GenerateMaintenanceTemplate(); /// /// Import maintenance records from a CSV stream. /// /// CSV file stream /// Company ID for multi-tenancy /// Import result with success/error counts Task ImportMaintenanceAsync(Stream csvStream, int companyId); /// /// Generate a CSV template file for vendor imports. /// byte[] GenerateVendorTemplate(); /// /// Import vendors from a CSV stream. /// Updates existing vendors matched by CompanyName; creates new ones otherwise. /// Task ImportVendorsAsync(Stream csvStream, int companyId); /// /// Generate a CSV template file for prep service imports. /// byte[] GeneratePrepServiceTemplate(); /// /// Import prep services from a CSV stream. /// Updates existing services matched by ServiceName; creates new ones otherwise. /// Task ImportPrepServicesAsync(Stream csvStream, int companyId); /// /// Generate a CSV template file for expense imports. /// byte[] GenerateExpenseTemplate(); /// /// Import expenses from a CSV stream. /// ExpenseAccountNumber and PaymentAccountNumber are resolved by Account.AccountNumber. /// VendorName and JobNumber are optional lookups. ExpenseNumber is auto-generated when blank. /// Task ImportExpensesAsync(Stream csvStream, int companyId); /// /// Generate a CSV template file for Chart of Accounts imports. /// byte[] GenerateChartOfAccountsTemplate(); /// /// Import Chart of Accounts entries from a CSV stream. /// Existing accounts matched by AccountNumber are updated; new ones are created. /// System accounts (IsSystem=true) are never modified by import. /// Task ImportChartOfAccountsAsync(Stream csvStream, int companyId); /// /// Generate a CSV template file for invoice imports with headers matching the native export. /// byte[] GenerateInvoiceTemplate(); /// /// Import invoice headers from a CSV stream. Customers are resolved by CustomerEmail then /// CustomerName. Duplicate detection uses InvoiceNumber as the unique key. Existing invoices /// are updated; new ones are created. Line items are not part of the CSV format. /// Task ImportInvoicesAsync(Stream csvStream, int companyId); /// Generate a CSV template file for payment imports. byte[] GeneratePaymentTemplate(); /// /// Import payment records from a CSV stream. Invoices are resolved by InvoiceNumber. /// Duplicates are detected by InvoiceNumber + PaymentDate + Amount and skipped. /// Task ImportPaymentsAsync(Stream csvStream, int companyId); /// Generate a CSV template file for purchase order imports. byte[] GeneratePurchaseOrderTemplate(); /// /// Import purchase order headers from a CSV stream. Vendors are resolved by company name. /// Existing POs matched by PoNumber are updated; new ones are created. /// Task ImportPurchaseOrdersAsync(Stream csvStream, int companyId); }