[AdminModule]
- Added support for SQL syntax in CodeMirror code editor. remp/crm#2518
- Added the sanitization of content pasted into Trumbowyg editor. remp/crm#2994
- Added support for merging dropdown sections. remp/crm#3071
[AppleAppstoreModule]
- Fixed condition when looking for recurrent to stop while cancelling Apple in-app subscription. remp/crm#3080
[ApplicationModule]
- Added option to register custom callbacks when Hermes’s default
Crm\ApplicationModule\Hermes\RedisDriver
waits for next tasks. remp/crm#3111
- You can register the callbacks in your
config.neon
by calling setupWaitCallback
within setup
directive of hermesDriver
service.
- Added
OriginalDataAwareInterface
interface used for object/database row which have to remember its original values. remp/respekt#148
- You can now read
getOriginalData()
from the ActiveRow
instances (if they implement this interface) after the object was updated.
- Fixed
locale
parameter for snippets with set parameters (locale
was removed if any parameters were set). remp/crm#3113
[DashboardModule]
- Added default template and default title to
DashboardSegmentValueBaseWidget
dashboard widget. remp/novydenik#1213
- When extending the widget class, only segment code is now required.
[FamilyModule]
- BREAKING: Added
provideSubscriptionTypeItemPriceOptions
method to RequestFormDataProviderInterface
. remp/crm#3028
- You need to add
provideSubscriptionTypeItemPriceOptions
method, to all of your implementations of RequestFormDataProviderInterface
. Method should return at least empty array. For more information on usage, consult: RequestFormDataProviderInterface->provideSubscriptionTypeItemPriceOptions
phpdoc.
- Added new event
FamilyRequestAcceptedEvent
emitted after the request donation. remp/respekt#133
[GiftsModule]
- Added
SubscriptionFormDataProvider
to validate update of start time for gifted subscriptions. remp/crm#3076
- For accounting reasons, the subscription must not start before the payment confirmation date.
[GooglePlayBillingModule]
- Fixed condition when looking for recurrent to stop while cancelling Google in-app subscription. remp/crm#3080 remp/crm#1522
- Fixed introductory period handling when subscription was purchased without an introductory price. remp/crm#3045
[InvoicesModule]
- IMPORTANT: Changed crowdfunding project name in the receipt - subscription type’s description is replaced by user label. remp/helpdesk#2458
- Added dataprovider
UniversalSearchDataProvider
to allow search by the invoice number. remp/respekt#137
- Added
ReceiptPreNotificationEventHandler
which handles adding receipt pdf to new receiptable payment notifications. remp/novydenik#1175
- Added ability to merge dropdown menu sections. remp/crm#3071
[IssuesModule]
- Fixed missing
league/flysystem-ftp: ^3.0
dependency.
- Added audit log for issues entities changeable through admin (
IssuesRepository
, MagazinesRepository
, SubscriptionTypeMagazinesRepository
). remp/crm#3114
[PaymentsModule]
- IMPORTANT: Method
PaymentsRepository::updateStatus
now emits payment change status event only if the payment was actually changed. remp/respekt#130
- Previously, the event could be emitted even when the status didn’t change and caller requested change from
paid
to paid
. This is no longer true and such request won’t emit event anymore. Please verify that your code doesn’t rely on the previously-incorrect behavior.
- Added form to handle complex refund process. remp/crm#2960
- Added feature to stop subscription during refund.
- Added feature to stop recurrent payment during refund.
- Added visual progressbar to display current subscription progress.
- Added
PaymentStatusDropdownMenuWidget
to unify selection of payment status in admin dropdowns. remp/crm#2960
- Added
PaymentRefundFormDataProviderInterface
to extend PaymentRefundFormFactory
via dataprovider. remp/crm#2960
- Updated
RecurrentPaymentsResolver::resolveSubscriptionType()
to handle new subscription_type.trial_periods
. remp/crm#2938
- Rules are described in PHPDoc of
RecurrentPaymentsResolver::resolveSubscriptionType()
.
- If
subscription_type.next_subscription_type
is set, number of allowed trials is handled by subscription_type.trial_periods
.
- This is not a breaking change. Trial period for existing subscription types with
next_subscription_type
is set to 1.
- Added the change of payment gateway for payments confirmed from
MailProcessor
if they are different from bank transfer. remp/respekt#130
- Fixed the possibility of lock timeout by the payment status change. Event emitting has been moved outside of lock. remp/respekt#130
- Fixed possible type error when editing payment containing
subscription_type
item without subscription_type_item_id
reference. remp/respekt#158
- Fixed slow payment filtering via variable symbol on payments admin page. remp/crm#3104
- Added option to select between week or month payments partitioning in retention analysis. remp/crm#3083
- Added new rules to ČSOB mail parser to improve variable symbol lookup. remp/respekt#106
- Updated regexp to recognize email statements for foreign payments (“zahraniční transakce”).
- Some foreign transactions contain variable symbol in payment purpose element which can be multiline. Added new rule.
- Added rule to search whole email statement for prefixed variable symbol. Customers tend to use prefixes
vs/VS/v.s./V.S.
.
- Added rule to search receiver message for variable symbol without any prefix.
- Customers often forget to add prefix.
- Some banks provide variable symbol within receiver message in “Creditor Reference Information - SEPA XML format”.
- Added rule to not use variable symbol set to 0.
- Foreign transfer from at least one bank comes with field “variable symbol” set to
0000000000
. Correct variable symbol is in receiver message with VS prefix.
- Fixed empty ‘More actions’ dropdown. remp/crm#3071
- Fixed in user payments listing.
- Fixed in payments listing.
- Added new subscription type and subscription type tag filters in retention analysis. remp/crm#3082
- Added ability to merge dropdown menu sections. remp/crm#3071
[PrintModule]
- Added link to subscription to print export detail. remp/respekt#138
- Added widget placeholder into print export detail to allow show additional information. remp/respekt#138
[RempMailerModule]
- Added option to display only selected mail type categories on the
subscribeEmailSuccess
page. remp/helpdesk#2533
- Method
render()
within the MailSettings
component is already prepared to accept an array of mail type category codes. Added argument to MailSettingsPresenter->renderSubscribeEmailSuccess()
allows to preset these categories before the user is redirected.
- Fixed wrong link to filtered users list within mail logs. remp/crm#1892
[SalesFunnelModule]
- Refactored handling of sales funnel data provider validation to its own method
handleCantAccessFunnel
. remp/crm#2941
- Changed UTM parameters handling in iframe sales funnel display. UTM parameters are preserved in URL for better tracking. remp/novydenik#1196
- Added option to add allowed sales funnels stat types to
SalesFunnelsStatsRepository
. remp/novydenik#1197
- Fixed possibly incorrect amount of donations on sales funnel stats chart caused by counting in zero-amount donation payment items. remp/crm#3100
- Added new sales funnel tag filter in retention analysis. remp/crm#3082
[SegmentsModule]
- Added “nested segments” feature. remp/crm#2518
- Feature is turned off by default, since it’s only supported by our default implementation of
SegmentFactoryInterface
.
- To turn on the feature, add
segment_nesting: true
feature flag to NEON configuration (see README for details).
- Feature adds
SegmentCriteria
to Segmenter interface - one can compose segment using other segments
- Feature also works for segments text editor, where special placeholder can be used (
%segment.SEGMENT_CODE%
)
- Added API endpoint
/api/v1/segments/items
(served by ItemsHandler
) - returning list of segment items. remp/crm#2518
- Segmenter Vue library was also upgraded, now having ability to list segment items (even for unsaved segments).
- Fixed missing select labels for the payment amount parameter. remp/helpdesk#2540
[SubscriptionsModule]
- BREAKING: Added optional
address
argument to ExtensionInterface::getStartTime
method. remp/respekt#142
- In you implement your own implementation of
ExtensionInterface
, just add new argument address
to getStartTime
method definition with no more changes required.
- IMPORTANT: Added
address_id
to list of params which are firing subscription updated events. remp/respekt#148
- Fixed invalid use of internal seeder in tests.
- Added trial periods into subscription types. remp/crm#2938
- Subscription types now offer more than single trial period before “upgrading” subscriber to next subscription type.
- Default trial period is 0.
- Trial period for existing subscription types with next subscription type is set to 1. This will ensure existing subscription types behave same as before this change.
- Fixed premature form validation when added an item to the subscription type remp/crm#2174
- Fixed empty ‘More actions’ dropdown in user subscriptions listing. remp/crm#3071
- Added ability to merge dropdown menu sections. remp/crm#3071
[UpgradesModule]
- Added widget to subscription type’s detail with list of all subscription types to which upgrade is possible. remp/crm#3094
[UsersModule]
- Fixed wrong link to filtered users list within groups list. remp/crm#1892