Module: Models::Auditable

Extended by:
ActiveSupport::Concern
Included in:
Account, Activity, ActivityAgenda, ActivityChainType, ActivityResultType, ActivityType, ActivityTypeAssignmentQueue, ActivityTypeRule, AdditionalCallCredit, Address, Agreement, AgreementParticipant, AmazonAPlusContent, AmazonSchema, AmazonTransparencyCode, Article, ArticlePage, ArticleRevision, AssignmentQueue, AssortmentInstruction, Authentication, AverageMonthlyTemperature, Bank, BankAccount, BankBalanceStatement, Budget, BudgetGroup, BudgetRule, BusinessUnit, BuyingGroup, CallBlock, CallRecord, Campaign, CampaignAction, CarrierPickup, Catalog, CatalogItem, Ceiling, CeilingInsulationType, CeilingType, Certification, Charity, Check, CommissionRate, CommissionStructure, CommissionStructureEntry, CommissionTier, Communication, CommunicationRecipient, Company, ContactPoint, Coupon, CouponSerialNumber, Course, CourseCategory, CourseEnrollment, CreditApplication, CreditCardVault, CreditMemo, CustomerDropEvent, CustomerFilter, CustomerRecord, CycleCount, DataDictionarySet, Delivery, DesignToolFixture, DigitalAsset, Discount, DoNotCall, DoorCoreType, DoorFrameType, DoorInsulationType, DoorType, EdiCommunicationLog, ElementPoleAssignment, EmailPreference, EmailTemplate, EmployeeEvent, EmployeeGoal, EmployeePhoneStatus, EmployeeRecord, EmployeeReview, ExchangeRate, ExportedCatalogItemPacket, Facet, Feed, FloorPlanDisplay, FraudReport, HeatingElementProductLineOption, IdentificationNumber, ImageProfile, InventoryCommit, Invoice, Item, ItemDemandForecastAddition, ItemProductLine, ItemRelation, Kpi, LandedCost, LedgerAccount, LedgerBeginningBalance, LedgerClosingPeriod, LedgerCompanyAccount, LedgerDetailAccount, LedgerDetailProject, LedgerEntry, LedgerProject, LedgerTransaction, LiabilityInsurance, LineItem, LiveEvent, LocatorBlackListParty, LocatorRecord, LocatorWhiteListParty, MailActivity, Mailing, Manifest, NotificationChannel, OauthCredential, Opportunity, Order, OrderTransaction, OutgoingPayment, OutgoingPaymentItem, Packaging, Packing, Party, PartyTopic, Payment, PostComment, Praise, PriceThreshold, ProductCategory, ProductFilter, ProductLine, ProductSpecification, Profile, PublicationItem, PurchaseOrder, PurchaseOrderItem, PurchaseOrderShipment, QuickEstimator, Quote, Receipt, ReceiptDetail, Rma, RmaItem, SalesCommission, SalesCommissionNetBase, SalesCommissionNetBaseDetail, SalesForecast, SalesGoal, SalesRepQueue, SalesRepQueueEntry, SalesRepWeight, SerialNumber, ServiceJob, Setting, Shipment, ShipmentItem, ShipmentReceipt, ShipmentReceiptItem, ShippingAccountNumber, Showcase, Skylight, SmsMessage, Source, Spiff, SpiffEnrollment, SpiffReward, SpiffRewardThreshold, SqlRepo, StandaloneDelivery, StatementOfAccount, Store, StoreItem, StoreTransfer, Subscriber, SubscriberList, Supplier, SupplierItem, SupplierItemPrice, SupportCase, SupportCaseParticipant, Survey, TaxExemption, TaxRate, TimeOffBalance, TimeOffPolicy, TimeOffPolicyAssignment, TimeOffRequest, TimeOffRequestDate, TimeOffType, Topic, TopicCategory, TopicResponse, TradeShow, UnderFloor, Upload, VariableCost, Voucher, VoucherItem, WarehousePackage, WayfairSchema, Window, WorkSchedule, WorkScheduleDay, XrateAverage, Zone
Defined in:
app/concerns/models/auditable.rb

Defined Under Namespace

Modules: ClassMethods

Constant Summary collapse

ALWAYS_IGNORED =
%i[updated_at created_at creator_id updater_id search_text_tsvector].freeze

Belongs to collapse

Instance Method Summary collapse

Instance Method Details

#all_skipped_columnsObject



46
47
48
# File 'app/concerns/models/auditable.rb', line 46

def all_skipped_columns
  (self.class.skipped_columns || []) + ALWAYS_IGNORED
end

#audit_reference_dataObject



54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'app/concerns/models/auditable.rb', line 54

def audit_reference_data
  model_data = if self.class.reference_data.present?
                 self.class.reference_data.index_with { |e| try(e) }.compact
               else
                 {}
               end

  # Merge request-level context (e.g. Sunny conversation metadata)
  # set via PaperTrail.request.controller_info in background workers.
  request_ctx = PaperTrail.request.controller_info || {}
  merged = model_data.merge(request_ctx)
  merged.presence
end

#creatorParty

Returns:

See Also:



18
# File 'app/concerns/models/auditable.rb', line 18

belongs_to :creator, class_name: 'Party', optional: true

#should_not_save_versionObject



50
51
52
# File 'app/concerns/models/auditable.rb', line 50

def should_not_save_version
  !PaperTrail.enabled? && changes.keys.all? { |k| k.to_sym.in?(all_skipped_columns) }
end

#stamp_recordObject



38
39
40
41
42
43
44
# File 'app/concerns/models/auditable.rb', line 38

def stamp_record
  user_id = CurrentScope.user_id
  visit_id = CurrentScope.visit_id
  self.creator_id ||= user_id if respond_to? :creator_id=
  self.updater_id = user_id if respond_to? :updater_id=
  self.visit_id ||= visit_id if respond_to? :visit_id=
end

#updaterParty

Returns:

See Also:



19
# File 'app/concerns/models/auditable.rb', line 19

belongs_to :updater, class_name: 'Party', optional: true