Ad-hoc quote email, accounting improvements, AI lookup fix, and misc service updates
- Quotes: ad-hoc email modal on Quote Details lets staff send to an address not on file; QuotesController passes overrideEmail through to NotificationService - Quotes/Details view: SMS consent display, email/SMS send button state based on consent - Accounting module: AccountingDisplayHelpers for consistent ledger formatting; AccountsController + Accounts views improvements; AccountingEnums additions - Bills/Expenses: AI account categorization fixes in BillsController and ExpensesController - InventoryAiLookupService: TDS cure fallback no longer fires on AiAugmentFromUrl path (LookupByUrlAsync already has it built in — was double-fetching) - PdfService: quote/invoice PDF updates - PricingCalculationService: minor pricing logic fix - QuoteProfile: mapping updates for new quote fields - ApplicationDbContextModelSnapshot: catches up to all 4 migrations in this branch Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -78,6 +78,7 @@ public class QuoteProfile : Profile
|
||||
// CreateQuoteDto -> Quote
|
||||
CreateMap<CreateQuoteDto, Quote>()
|
||||
.ForMember(dest => dest.Id, opt => opt.Ignore())
|
||||
.ForMember(dest => dest.ProspectSmsConsentedAt, opt => opt.Ignore()) // Set by controller on consent
|
||||
.ForMember(dest => dest.QuoteNumber, opt => opt.Ignore()) // Generated by controller
|
||||
.ForMember(dest => dest.QuoteStatus, opt => opt.Ignore()) // Will be set by FK to Draft status
|
||||
.ForMember(dest => dest.OvenCost, opt => opt.Ignore())
|
||||
@@ -111,6 +112,7 @@ public class QuoteProfile : Profile
|
||||
// UpdateQuoteDto -> Quote
|
||||
CreateMap<UpdateQuoteDto, Quote>()
|
||||
.ForMember(dest => dest.QuoteNumber, opt => opt.Ignore()) // Cannot change
|
||||
.ForMember(dest => dest.ProspectSmsConsentedAt, opt => opt.Ignore()) // Managed by controller
|
||||
.ForMember(dest => dest.CustomerId, opt => opt.Ignore()) // Cannot change after creation - preserved in controller
|
||||
.ForMember(dest => dest.QuoteStatus, opt => opt.Ignore()) // Will be set by FK
|
||||
.ForMember(dest => dest.OvenCost, opt => opt.Ignore())
|
||||
@@ -277,6 +279,8 @@ public class QuoteProfile : Profile
|
||||
.ForMember(dest => dest.ZipCode, opt => opt.MapFrom(src => src.ProspectZipCode))
|
||||
.ForMember(dest => dest.IsCommercial, opt => opt.MapFrom(src => src.IsCommercial))
|
||||
.ForMember(dest => dest.CreditLimit, opt => opt.MapFrom(src => 0m))
|
||||
.ForMember(dest => dest.SmsConsent, opt => opt.MapFrom(src => src.ProspectSmsConsent))
|
||||
.ForMember(dest => dest.ProspectSmsConsentedAt, opt => opt.MapFrom(src => src.ProspectSmsConsentedAt))
|
||||
.ForMember(dest => dest.PricingTierId, opt => opt.Ignore())
|
||||
.ForMember(dest => dest.TaxId, opt => opt.Ignore())
|
||||
.ForMember(dest => dest.PaymentTerms, opt => opt.Ignore())
|
||||
|
||||
Reference in New Issue
Block a user