Initial commit

This commit is contained in:
2026-04-23 21:38:24 -04:00
commit 63e12a9636
1762 changed files with 1672620 additions and 0 deletions
@@ -0,0 +1,138 @@
using System.ComponentModel.DataAnnotations;
namespace PowderCoating.Application.DTOs.Company;
public class CompanyPreferencesDto
{
public int Id { get; set; }
public int CompanyId { get; set; }
// Application Defaults
public string DefaultCurrency { get; set; } = "USD";
public string DefaultDateFormat { get; set; } = "MM/dd/yyyy";
public string DefaultTimeFormat { get; set; } = "12h";
public string DefaultPaymentTerms { get; set; } = "Net 30";
public int DefaultQuoteValidityDays { get; set; } = 30;
public string QuoteNumberPrefix { get; set; } = "QT";
public string JobNumberPrefix { get; set; } = "JOB";
public bool UseMetricSystem { get; set; } = false;
// Job / Workflow
public string DefaultJobPriority { get; set; } = "Normal";
public bool RequireCustomerPO { get; set; }
public bool AllowCustomerApproval { get; set; } = true;
public int DefaultTurnaroundDays { get; set; } = 7;
// Email Sender Identity
public string? EmailFromAddress { get; set; }
public string? EmailFromName { get; set; }
// Notifications
public bool EmailNotificationsEnabled { get; set; } = true;
public bool NotifyOnNewJob { get; set; } = true;
public bool NotifyOnNewQuote { get; set; } = true;
public bool NotifyOnJobStatusChange { get; set; } = true;
public bool NotifyOnQuoteApproval { get; set; } = true;
public bool NotifyOnPaymentReceived { get; set; } = true;
public int QuoteExpiryWarningDays { get; set; } = 3;
public int DueDateWarningDays { get; set; } = 2;
public int MaintenanceAlertDays { get; set; } = 7;
public bool PaymentRemindersEnabled { get; set; } = false;
public string PaymentReminderDays { get; set; } = "7,14,30";
// Data Retention
public int QuoteRetentionYears { get; set; } = 7;
public int JobRetentionYears { get; set; } = 7;
public int LogRetentionDays { get; set; } = 90;
public int AutoArchiveJobsDays { get; set; } = 365;
public int DeletedRecordRetentionDays { get; set; } = 30;
// Quote PDF Template
public string QtAccentColor { get; set; } = "#374151";
public string? QtDefaultTerms { get; set; }
public string? QtFooterNote { get; set; }
// Invoice PDF Template
public string InAccentColor { get; set; } = "#374151";
public string? InDefaultTerms { get; set; }
public string? InFooterNote { get; set; }
// Blank Work Order PDF Template
public string WoAccentColor { get; set; } = "#374151";
public string? WoTerms { get; set; }
}
public class UpdateAppDefaultsDto
{
[Required, StringLength(3)] public string DefaultCurrency { get; set; } = "USD";
[Required, StringLength(20)] public string DefaultDateFormat { get; set; } = "MM/dd/yyyy";
[Required] public string DefaultTimeFormat { get; set; } = "12h";
[Required, StringLength(50)] public string DefaultPaymentTerms { get; set; } = "Net 30";
[Range(1, 365)] public int DefaultQuoteValidityDays { get; set; } = 30;
[Required, StringLength(10)] public string QuoteNumberPrefix { get; set; } = "QT";
[Required, StringLength(10)] public string JobNumberPrefix { get; set; } = "JOB";
public bool UseMetricSystem { get; set; } = false;
}
public class UpdateJobDefaultsDto
{
[Required] public string DefaultJobPriority { get; set; } = "Normal";
public bool RequireCustomerPO { get; set; }
public bool AllowCustomerApproval { get; set; }
[Range(1, 365)] public int DefaultTurnaroundDays { get; set; } = 7;
}
public class UpdateNotificationsDto
{
[EmailAddress(ErrorMessage = "Invalid email address format.")]
[StringLength(100)]
[Display(Name = "From Email Address")]
public string? EmailFromAddress { get; set; }
[StringLength(100)]
[Display(Name = "From Display Name")]
public string? EmailFromName { get; set; }
public bool EmailNotificationsEnabled { get; set; }
public bool NotifyOnNewJob { get; set; }
public bool NotifyOnNewQuote { get; set; }
public bool NotifyOnJobStatusChange { get; set; }
public bool NotifyOnQuoteApproval { get; set; }
public bool NotifyOnPaymentReceived { get; set; }
[Range(0, 30)] public int QuoteExpiryWarningDays { get; set; } = 3;
[Range(0, 30)] public int DueDateWarningDays { get; set; } = 2;
[Range(0, 90)] public int MaintenanceAlertDays { get; set; } = 7;
public bool PaymentRemindersEnabled { get; set; } = false;
[StringLength(50)] public string PaymentReminderDays { get; set; } = "7,14,30";
}
public class UpdateDataRetentionDto
{
[Range(1, 99)] public int QuoteRetentionYears { get; set; } = 7;
[Range(1, 99)] public int JobRetentionYears { get; set; } = 7;
[Range(30, 3650)] public int LogRetentionDays { get; set; } = 90;
[Range(30, 3650)] public int AutoArchiveJobsDays { get; set; } = 365;
[Range(7, 365)] public int DeletedRecordRetentionDays { get; set; } = 30;
}
public class UpdateQuoteTemplateDto
{
[RegularExpression(@"^#[0-9A-Fa-f]{6}$", ErrorMessage = "Accent color must be a valid hex color (e.g. #374151)")]
public string QtAccentColor { get; set; } = "#374151";
[StringLength(3000)] public string? QtDefaultTerms { get; set; }
[StringLength(200)] public string? QtFooterNote { get; set; }
}
public class UpdateInvoiceTemplateDto
{
[RegularExpression(@"^#[0-9A-Fa-f]{6}$", ErrorMessage = "Accent color must be a valid hex color (e.g. #374151)")]
public string InAccentColor { get; set; } = "#374151";
[StringLength(3000)] public string? InDefaultTerms { get; set; }
[StringLength(200)] public string? InFooterNote { get; set; }
}
public class UpdateWorkOrderTemplateDto
{
[RegularExpression(@"^#[0-9A-Fa-f]{6}$", ErrorMessage = "Accent color must be a valid hex color (e.g. #374151)")]
public string WoAccentColor { get; set; } = "#374151";
[StringLength(2000)] public string? WoTerms { get; set; }
}