The upgrade instructions are available at Oro documentation website.
The current file describes significant changes in the code that may affect the upgrade of your customizations.
- 6.0.0
- 5.1.0
- 5.0.0
- 4.2.0
- 4.1.0
- 4.0.0
- 3.1.4
- 3.1.0
- 3.0.0
- 2.6.0
- 2.5.0
- 2.4.0
- 2.3.0
- 2.2.0
- 2.1.0
- 2.0.0
- 1.10.0
- 1.9.0
- 1.8.0
- 1.7.0
- 1.6.0
- 1.5.0
- 1.4.0
- 1.3.1
- 1.3.0
- 1.2.0
- 1.0.0
- The
Oro\Bundle\ContactUsBundle\Entity\ContactRequest::$customerName
property was added.
PrepareResultItemListener
has been removed as now search engine generates and stores entity name in the index in a separate field- Removed
\Oro\Bundle\ContactBundle\ImportExport\Strategy\ContactAddOrReplaceStrategy::importExistingEntity
, functionality covered by\Oro\Bundle\ImportExportBundle\Strategy\Import\ConfigurableAddOrReplaceStrategy
- Removed
\Oro\Bundle\ContactBundle\ImportExport\Strategy\ContactAddOrReplaceStrategy::fixDuplicateEntities
, functionality covered by\Oro\Bundle\ImportExportBundle\Strategy\Import\ConfigurableAddOrReplaceStrategy
- Removed
\Oro\Bundle\CustomerBundle\ImportExport\Strategy\CustomerAddOrReplaceStrategy::processValidationErrors
, functionality covered by\Oro\Bundle\ImportExportBundle\Strategy\Import\ConfigurableAddOrReplaceStrategy
The code of OroCRM connector to Magento 1 has been moved to a separate package.
- The
*.class
parameters for all entities were removed from the dependency injection container. The entity class names should be used directly, e.g.,'Oro\Bundle\EmailBundle\Entity\Email'
instead of'%oro_email.email.entity.class%'
(in service definitions, datagrid config files, placeholders, etc.), and\Oro\Bundle\EmailBundle\Entity\Email::class
instead of$container->getParameter('oro_email.email.entity.class')
(in PHP code).
- The
getSupportedClass()
method was removed fromOro\Bundle\ActivityContactBundle\Direction\DirectionProviderInterface
. Use theclass
attribute of theoro_activity_direction.provider
DIC tag instead.
- All
*.class
parameters for service definitions were removed from the dependency injection container.
- The following deprecated API resources were removed:
GET /api/rest/{version}/customers.{_format}
, useGET /api/rest/{version}/magentocustomers.{_format}
insteadPOST /api/rest/{version}/customers.{_format}
, usePOST /api/rest/{version}/magentocustomers.{_format}
insteadGET /api/rest/{version}/customers/{id}
, useGET /api/rest/{version}/magentocustomers/{id}.{_format}
insteadPUT /api/rest/{version}/customers/{id}.{_format}
, usePUT /api/rest/{version}/magentocustomers/{id}.{_format}
insteadDELETE /api/rest/{version}/customers/{id}.{_format}
, useDELETE /api/rest/{version}/magentocustomers/{id}.{_format}
instead
- The deprecated API resource
GET /api/rest/{version}/leads/{leadId}/address.{_format}
was removed, useGET /api/rest/{version}/leads/{leadId}/addresses.{_format}
instead.
- Method
getSettings
has been removed fromOro\Bundle\ChannelBundle\Provider\SettingsProvider
. UsegetChannelTypes
andgetEntities
methods instead. - Method
Oro\Bundle\ChannelBundle\Provider\SettingsProvider::getDependentEntityData
has been renamed togetDependentEntities
. - Method
Oro\Bundle\ChannelBundle\Provider\SettingsProvider::isChannelSystem
has been renamed toisSystemChannel
.
- In
Oro\Bundle\ContactUsBundle\Controller\ContactReasonController::deleteAction
(oro_contactus_reason_delete
route) action the request method was changed to DELETE. - In
Oro\Bundle\ContactUsBundle\Controller\ContactRequestController::deleteAction
(oro_contactus_request_create
route) action the request method was changed to DELETE.
- In
Oro\Bundle\MagentoBundle\Controller\CustomerController::registerAction
(oro_magento_customer_register
route) action the request method was changed to POST. - In
Oro\Bundle\MagentoBundle\Controller\IntegrationConfigController::checkAction
(oro_magento_integration_check
route) action the request method was changed to POST. - In
Oro\Bundle\MagentoBundle\Controller\NewsletterSubscriberController::subscribeAction
(oro_magento_newsletter_subscriber_subscribe
route) action the request method was changed to POST. - In
Oro\Bundle\MagentoBundle\Controller\NewsletterSubscriberController::unsubscribeAction
(oro_magento_newsletter_subscriber_unsubscribe
route) action the request method was changed to POST. - In
Oro\Bundle\MagentoBundle\Controller\NewsletterSubscriberController::subscribeByCustomerAction
(oro_magento_newsletter_subscriber_subscribe_customer
route) action the request method was changed to POST. - In
Oro\Bundle\MagentoBundle\Controller\NewsletterSubscriberController::unsubscribeByCustomerAction
(oro_magento_newsletter_subscriber_unsubscribe_customer
route) action the request method was changed to POST. - In
Oro\Bundle\MagentoBundle\Controller\OrderPlaceController::syncAction
(oro_magento_orderplace_new_cart_order_sync
route) action the request method was changed to POST. - In
Oro\Bundle\MagentoBundle\Controller\OrderPlaceController::customerSyncAction
(oro_magento_orderplace_new_customer_order_sync
route) action the request method was changed to POST.
- Service
oro_channel.provider.exclusion_provider
and related logic were removed. There is no exclusion for "channel type" entities on UI.
- Service
oro_crm.namespace_migration_provider
and the logic that used it were removed.
- Package
oro/crm-mail-chimp
removed from composer.json, runcomposer require 'oro/mailchimp:3.1.*'
before upgrade to keep functionality working - Package
oro/crm-abandoned-cart
removed from composer.json, runcomposer require 'oro/magento-abandoned-cart:3.1.*'
before upgrade to keep functionality working
- Changes in
/api/contactaddresses
REST API resource:- the attribute
created
was renamed tocreatedAt
- the attribute
updated
was renamed toupdatedAt
- the attribute
- Changes in
/api/magentoaddresses
REST API resource:- the attribute
created
was renamed tocreatedAt
- the attribute
updated
was renamed toupdatedAt
- the attribute
- Changes in
/api/magentocartaddresses
REST API resource:- the attribute
created
was renamed tocreatedAt
- the attribute
updated
was renamed toupdatedAt
- the attribute
- Changes in
/api/leadaddresses
REST API resource:- the attribute
created
was renamed tocreatedAt
- the attribute
updated
was renamed toupdatedAt
- the attribute
- Traits
CreatedAtTrait
andUpdatedAtTrait
were added. Use them instead of adding newupdatedAt
andcreatedAt
fields to the entity. - Interface
CreatedAtAwareInterface
andUpdatedAtAwareInterface
were added. Use them with theCreatedAtTrait
andUpdatedAtTrait
traits. - The new relation
orderNotes
was added to theOrder
entity. It contains a collection of notes attached to the currentOrder
. - The new entity
OrderNote
was added. It contains a single record of anOrder Note
. - Class
IsDisplayOrderNotesSubscriber
was added. It blocks theisDisplayOrderNotes
field when the current channel does not support the order notes functionality. - Class
IsDisplayOrderNotesFormType
and its serviceoro_magento_is_display_order_notes_type
were added to define all options required by theisDisplayOrderNotes
field in one place. - Class
OrderNotesDataConverter
and its serviceoro_magento.importexport.data_converter.order_notes
were added to specify the converting logic for order notes from raw data to the data that is ready for deserialization. - Interface
MagentoTransportInterface
was changed:- Added method
isSupportedOrderNoteExtensionVersion
. It uses to check that retrieved extension version from magento is supported order note functionality. - Added method
getOrderNoteRequiredExtensionVersion
. It is used to retrieve the required extension version from Magento that supports the order note functionality.
- Added method
- Classes
RestTransport
andSoapTransport
were changed. They introduced implementation of the new methods that were added toMagentoTransportInterface
. - Four datagrids were added to show order notes for customer, account, order. Documentation
- Class
OrderNotesExtension
and its serviceoro_magento.twig.order_notes_extension
. Use them to check if the notes tab or grid are allowed to be shown. - Class
Context
was added. Use it to deliver data fromChainProcessor
to its sub-processors. - Class
ChainProcessor
and its serviceoro_magento.importexport.processor.order_notes.chain_processor
were added. Use them to prepareOrder Note
collection for import. - Interface
ProcessorInterface
was added. It is a contract for the sub-processors ofChainProcessor
. - Class
ValidationNoteProcessor
and its serviceoro_magento.importexport.processor.order_notes.validation_note_processor
were added. It's a sub-processor ofChainProcessor
that was added to filter invalidOrder Notes
. - Class
NoteFieldsProcessor
and its serviceoro_magento.importexport.processor.order_notes.note_fields_processor
were added. It's a sub-processor ofChainProcessor
that was added to map selected fields from theOrder
to theOrder Note
entity and apply specific transformation functions to data that is kept in theOrder Note
fields.
- Field
emailAddress
now have"contact_information"="email"
entity property
- If you use REST API to manage the
Opportunity
entity, keep in mind that theprobability
field is limited by the range of values from 0 to 1. Validation was added. In PATCH and POST requests it is not transformed as before (it was divided by 100). So, if you add an opportunity via API with the 0.5 probability, you will receive the same value in GET request.
- Entity
MagentoTransport
was changed:- The new
isDisplayOrderNotes
field was added. It tells whether order notes are to be displayed on theMagento Customer
andAccount
view pages. - Method
isSupportedOrderNoteExtensionVersion
. Use it to find out if channel configuration supports the synchronization ofOrder Notes
.
- The new
- The parameter
oro_contact.subscriber.contact_listener.class
was removed form the service container
- The parameter
oro_magento.event_listener.customer_currency.class
was removed form the service container - The parameter
oro_magento.event_listener.order.class
was removed form the service container - The parameter
oro_magento.integration_entity.remove_listener.class
was removed form the service container
- In case when CRM is installed together with Customer Portal, the
Account Manager
role has full permissions for Account and Contact entities. The permissions for theAccount Manager
is not changed if CRM is added to already installed Customer Portal.
- Two new datagrids were added to show purchased products from magento orders for customer and account. Documentation
- The new
sharedGuestEmailList
field was added to theMagentoTransport
entity. During guest order synchronization, separateMagentoCustomer
entities will be created for orders that have emails on thesharedGuestEmailList
(email
,firstName
andlastName
fields are used for identification). - Class
EmailListToStringTransformer
was added. Use it to transform text with different delimiters between entries into the list of emails. - Class
EmailAddressListValidator
was added. Use it to validate array of emails. - Class
AbstractArrayToStringTransformer
was added. Use it to create your own transformers based on array to string transformation likeEmailListToStringTransformer
. - Class
GuestCustomerStrategyHelper
and its serviceoro_magento.importexport.guest_customer_strategy_helper
were added. Use it to check if guest customer emails are on thesharedGuestEmailList
, and retrieve identification data to search for existing guest customers. - Class
SharedEmailListSubscriber
is added to thesharedGuestEmailList
block field when OroBridge extension is not installed on the Magento side. - Class
SharedGuestEmailListType
and its serviceoro_magento_shared_guest_email_list_type
were added to define all options required by thesharedGuestEmailList
field in one place.
- Class
RefreshChannelCacheListener
was added. Use it to refresh cache after channel create or delete.
- Methods
transformArrayToString
andtransformStringToArray
were moved fromArrayToStringTransformer
toAbstractArrayToStringTransformer
and changed their visibility toprotected
- Property
$delimiter
was moved fromArrayToStringTransformer
toAbstractArrayToStringTransformer
and changed its visibility toprotected
- Remove listener from
StateProvider
on next events:oro_channel.channel.save_succeed
oro_channel.channel.delete_succeed
- The
SoapTransport
(Magento 1 default transport) andRestTransport
(Magento 2) classes changed format of the data returned bygetWebsites
method. The old response was the following:
[
'id' => 'id', // Magento original webdsite id
'code' => 'code',
'name' => 'name',
'default_group_id' => 'default group id'
]
The new response is the following:
[
'website_id' => 'id', // Magento original webdsite id
'code' => 'code',
'name' => 'name',
'default_group_id' => 'default group id'
]
- The
WebsiteDataConverter
[?]class was removed. TheWebsiteDataConverter
[?] class should be used instead. In addition, the@oro_magento.importexport.data_converter.rest.website
service was replaced with@oro_magento.importexport.data_converter.website
. - Class
AddressImportHelper
[?]:- removed method
updateRegionByMagentoRegionIdOrUnsetNonSystemRegionOnly
useupdateRegionByMagentoRegionId
instead
- removed method
- Class
Magento2ChannelType
[?] was added to support Magento2 as a new integration - Class
IntegrationConfigController.php
[?] was added. It is a universal entry point for both Magento and Magento2 integration check requests - Class
MagentoTransport
[?] was added. It's a parent forMagentoSoapTransport
andMagentoRestTransport
and it has all their similar properties and methods - Class
TransportHandler
[?] and its serviceoro_magento.handler.transport
were added. It is a layer between transport and controller.- Method
getMagentoTransport
was added. Its main responsibility is to initialize and return MagentoTransport from check request. - Method
getCheckResponse
: returns array with data for response.
- Method
- Class
ProviderConnectorChoicesProvider
[?] and its serviceoro_magento.provider.connector_choices
were added. It has method:getAllowedConnectorsChoices
it returns a list of connectors available for some integration.
- Class
RestPingProvider
[?] and its serviceoro_magento.provider.rest_ping_provider
were added. Use it to send ping request to Magento and store response data. - Class
RestRokenProvider
[?] and its serviceoro_magento.provider.rest_token_provider
were added. Use it to get a token, generate a new token and store it. - Class
RestTransportAdapter
[?] was added. It converts MagentoRestTransport entity to interface suitable for REST client factory. - Class
RestTransport
[?] and its serviceoro_magento.transport.rest_transport
were added. ImplementsTransportInterface
,MagentoTransportInterface
,ServerTimeAwareInterface
,PingableInterface
,LoggerAwareInterface
This class has the same responsibilities as SoapTransport. - The next batch jobs were added to
batch_jobs.yml
:- mage_store_rest_import
- mage_website_rest_import
- New channel
magento2
was added tochannels.yml
- Interface
RestResponseConverterInterface
was added. ClassResponseConvertersPass
[?] was added. Collects converters that implementRestResponseConverterInterface
- Processes
magento_soap_schedule_integration
andmagento_rest_schedule_integration
were added - Class EventDispatchableRestClientFactory was added. It extends the basic factory functionality with an event which can be used to decorate REST client or replace it.
- Interface Oro/Bundle/IntegrationBundle/Provider/Rest/Transport/RestTransportSettingsInterface was added. The purpose of RestTransportSettingsInterface interface is to provide settings required for REST client initialization and are used in factories.
- Event Oro\Bundle\IntegrationBundle\Event\ClientCreatedAfterEvent was added. It is an event which is called when a new client is created. Use it if you want to decorate or replace a client in case of irregular behavior.
- Class Oro\Bundle\IntegrationBundle\EventListener\AbstractClientDecoratorListener was added. It is used by Oro\Bundle\IntegrationBundle\EventListener\LoggerClientDecoratorListener and Oro\Bundle\IntegrationBundle\EventListener\MultiAttemptsClientDecoratorListener. These listeners decorate the client entity after it was created.
- Trait Oro\Bundle\IntegrationBundle\Utils\MultiAttemptsConfigTrait was added. It is used in Oro/Bundle/MagentoBundle/Provider/Transport/SoapTransport and Oro\Bundle\IntegrationBundle\EventListener\MultiAttemptsClientDecoratorListener to execute the feature several times, if the process fails after the first try.
- Support for data synchronization with Magento 2 by REST protocol was added. Store, website and regions dictionaries are available for synchronization. However, synchronization of other entities has not yet been developed and it is, therefore, not available in the current version of the package. This is the reason for Magento 2 integration being absent from the "Channel type" field when creating a new channel. For more details on how to enable such integration, see Magento 2 Documentation.
- Class `Oro\Bundle\MagentoBundle\Entity\MagentoSoapTransport' was changed. Now it consists of fields and methods that are specific for SoapTransport.
- Class
CustomerIconProvider
[?]. Its service was renamed tooro_magento.provider.customer.magento_customer_icon
- Class
IntegrationAwareSearchHandler
[?]- method
setSecurityFacade
was replaced withsetAuthorizationChecker
- method
- Class
NewsletterSubscriberPermissionProvider
[?]- method
setSecurityFacade
was replaced withsetAuthorizationChecker
- method
- Class
ChannelType
[?] was removed. Logic was moved toMagentoChannelType
[?] and its service was renamed tooro_magento.provider.magento_channel_type
- Class
StoresSoapIterator
[?] was removed. Logic was moved toStoresSoapIterator
[?]: - Class
MagentoSoapTransportRepository
[?] was removed. Logic was moved toMagentoTransportRepository
[?] - Class
SoapConnectorsFormSubscriber
[?] was removed. Logic was moved toConnectorsFormSubscriber
[?]- added protected method
getFormChannelType
- added protected method
- Class
SoapSettingsFormSubscriber
[?] was removed. Logic was moved toSettingsFormSubscriber
[?] and its service were renamed tooro_magento.form.subscriber.transport_setting
- protected method
getModifierWebsitesList
was renamed tomodifyWebsitesList
and now it returns void.
- protected method
- Class
SoapTransportCheckButtonType
[?] was removed. Logic was moved toTransportCheckButtonType
[?] - Method
getSores
inCartExpirationProcessor
[?] was removed. Logic was moved togetStores
method - Class
AbstractMagentoConnector
[?] was removed. Logic was moved toAbstractMagentoConnector
[?] - Class
CartConnector
[?] was removed. Logic was moved to `Oro\Bundle\MagentoBundle\Connector\CartConnector - Class
OrderConnector
[?] was removed. Logic was moved toOrderConnector
[?] - Class
RegionConnector
[?] was removed. Logic was moved toRegionConnector
[?] - Class
CustomerConnector
[?] was removed. Logic was moved toCustomerConnector
[?] - Class
NewsletterSubscriberConnector
[?] was removed. Logic was moved toNewsletterSubscriberConnector
[?] - Class
MagentoConnectorInterface
[?] was removed. Logic was moved toMagentoConnectorInterface
[?] - Class
AbstractLoadeableSoapIterator
[?] was removed. Logic was moved toAbstractLoadeableIterator
[?] - Class
AbstractPageableSoapIterator
[?] was removed. Logic was moved toAbstractPageableIterator
[?] - Class
AbstractBridgeIterator
[?] was removed. Logic was moved toAbstractBridgeIterator
[?] - Class
CartsBridgeIterator
[?] was removed. Logic was moved toCartsBridgeIterator
[?] - Class
CustomerBridgeIterator
[?] was removed. Logic was moved toCustomerBridgeIterator
[?] - Class
CustomerSoapIterator
[?] was removed. Logic was moved toCustomerSoapIterator
[?] - Class
CustomerGroupBridgeIterator
[?] was removed. Logic was moved toCustomerGroupBridgeIterator
[?] - Class
NewsletterSubscriberBridgeIterator
[?] was removed. Logic was moved toNewsletterSubscriberBridgeIterator
[?] and now implementsNewsletterSubscriberBridgeIteratorInterface
- Class
OrderBridgeIterator
[?] was removed. Logic was moved toOrderBridgeIterator
[?] - Class
OrderSoapIterator
[?] was removed. Logic was moved toOrderSoapIterator
[?] - Class
RegionSoapIterator
[?] was removed. Logic was moved toRegionSoapIterator
[?]- protected method
findEntitiesToProcess()
was moved to parent class - protected method
getEntityIds()
was moved to parent class - protected method
getEntity($id)
was moved to parent class - protected method
getIdFieldName()
was moved to parent class - protected method
current()
was moved to parent class
- protected method
- Class
WebsiteSoapIterator
[?] was removed. Logic was moved toWebsiteSoapIterator
[?] - Interface
MagentoTransportInterface
[?]- removed the
call
method because it conflicts with REST conception. From now on, MagentoTransportInterface will not allow to specify http methods and resource through parameters.
- removed the
- Route
oro_magento_soap_check
was renamed tooro_magento_integration_check
- Translation with key
not_valid_parameters
was removed - Process
magento_schedule_integration
was removed.
- Implementation of REST API for customer association was changed.
- the logic related to the customer association is implemented in
CustomerAssociationListener
[?]
- the logic related to the customer association is implemented in
- removed the following services:
oro_sales.api.get_config.customer_association
oro_sales.api.customize_loaded_data.customer_association
oro_sales.api.get_metadata.customer_association
oro_sales.api.get_metadata.get_config
oro_sales.api.load_data.customer_association
oro_sales.api.opportunity.initialize_customer_type_guesser.customer_association
oro_sales.api.opportunity.initialize_customer_account_type_guesser
oro_sales.form.guesser.customer_guesser
oro_sales.form.guesser.customer_account_guesser
oro_sales.form.type.customer_api
(API form type aliasoro_sales_customer_api
)oro_sales.form.type.customer_account_api
(API form type aliasoro_sales_customer_account_api
)
- Class
RFMBuilder
[?]- changed the return type of
getEntityIdsByChannel
method from\ArrayIterator|BufferedQueryResultIterator
to\Iterator
- changed the return type of
- Updated service definition for
oro_crm.extension.transtation_packages_provider
:- changed class to
TranslationPackagesProviderExtension
[?] - changed publicity to `false
- changed class to
- Class
RecalculateLifetimeCommand
[?]- changed the return type of
getCustomersIterator
method fromBufferedQueryResultIterator
toBufferedQueryResultIteratorInterface
- changed the return type of
- Class
AccountLifetimeSubscriber
[?]- changed the return type of
getCustomersIterator
method fromBufferedQueryResultIterator
toBufferedQueryResultIteratorInterface
- changed the return type of
- The following services were marked as
private
:oro_channel.twig.metadata_extension
oro_channel.twig.lifetime_value_extension
- The service
oro_contact.twig.extension.social_url
was renamed tooro_contact.twig.extension
and marked asprivate
- Class
AccountExtension
[?]:- added UnsupportedGridPrefixesTrait
- opportunity
and
lead` apis changed:customerAssociation
relation replaced bycustomer
andaccount
relations
- Class
OpportunityRepository
[?]:- Method
getNewOpportunitiesAmount
was marked as deprecated. MethodgetOpportunitiesByPeriodQB
should be used instead - Method
getWonOpportunitiesToDateCount
was marked as deprecated. MethodgetWonOpportunitiesCountByPeriodQB
should be used instead
- Method
- Removed the following parameters from DIC:
oro_channel.twig.metadata_extension.class
oro_channel.twig.lifetime_value_extension.class
- Removed the following parameters from DIC:
oro_contact.twig.extension.social_url.class
- Class
SocialUrlExtension
[?] was renamed toContactExtension
[?]
- Changed minimum required php version to 5.6
- Added support of PHP 7.1
- The application has been upgraded to Symfony 2.8 (Symfony 2.8.10 is not supported because of Symfony issue)
- Added support of php 7
- Changed minimum required php version to 5.5.9
- Filter records by teams
- Pipeline forecast widget and report
- Contexts for all activities
- Account activities
- Unread email widget for the sidebar panel
- Activities are available in the Merge Accounts dialog, allowing you to specify merge strategy for every type of activity
- Filter emails by correspondent on the My Emails page
- Segment Magento customers by coupons and discounts applied to their orders
- Improved Email capabilities and features
- Email automation
- Contact history and last contact date is tracked for all records, allowing to segment them based on number of contacts, or date or direction of last contact
- Tags may be used as filtering conditions in segments and grids
- UX for Ecommerce Statistics widget has been improved
- Tracking of email conversations and threads
- Email signatures
- Email attachments
- Email contexts
- Immediate availability of Magento data after initial synchronization
- Automatic accounts discovery on Magento customers sync
- Create and Edit Magento customers from OroCRM
- Import of Magento newsletter subscribers
- Connection between web events and CRM data
- Connect guest/anonymous web events to customer after authentication
- Abandoned shopping cart campaigns
- New widgets for eCommerce dashboard
- Dropped support of Magento 1.6 due to API limitations.
- Availability of email campaign results for filtering in reports & segments. Now email campaign results, such as opens, clicks, bounces, etc., are available for filter queries in reporting and customer segmentation. This also includes campaign statistics received via MailChimp integration
RFM is a popular set of metrics used to analyze customer value and to determine the best customers, especially for retail and e-commerce. The 1.5.0 release of OroCRM adds the ability to configure RFM metrics for Magento channels.
The RFM score consists of three metrics:
- Recency, that evaluates the number of days that passed since the last purchase. The more recent is the purchase, the better.
- Frequency, that evaluates the number of orders placed by the customer in the last 365 days. The more frequently the customer buys, the better.
- Monetary value, that evaluates the total amount of orders placed by the customer in the last 365 days. The more money customer spends, the better. To construct these metrics, the entire range of values is divided into a small number of categories, or "buckets." The number of buckets usually lies in range of 3 to 10, and scores for R, F, and M range accordingly—from 1 (the best score) to the maximum number of buckets (the worst score). You can change the number of buckets and move their boundaries in order to adjust the scores to characteristic values of your business. After the metric is applied, every customer gets a three-number set of RFM scores. R1 F1 M1 identifies the best customers, and the higher the scores are, the worse these customers perform in a particular field. RFM scores are displayed on the Magento customer view page and on the customer section of the Account view. You may also re-use these scores in reporting and segmentation.
We started the implementation of a new vision for the Channels in 1.3 version and now we bring Channels back, although under a new definition. The general idea behind channels may be explained as follows: a channel in OroCRM represents an outside source customer and sales data, where "customer" and "sales" must be understood in the broadest sense possible. Depending on the nature of the outside source, the channel may or may not require a data integration. This new definition leads to multiple noticeable changes across the system.
Account entity now performs as the "umbrella" entity for all customer identities across multiple channels, displaying all their data in a single view.
Albeit the Integrations grid still displays all integrations that exist in the system, you now may create only "non-customer" standalone integrations, such as Zendesk integration. The "customer" integrations, such as Magento integration, may be created only in scope of a channel and cannot exist without it.
The UI for channel creation now allows the user to specify channel type. By default there are three channel types: Magento, B2B, and Custom; more channel types may be created by developers.
Each channel type characterizes the following:
- Whether a channel requires an integration. If the answer is yes (cf. Magento), the integration should be configured along the creation of the channel.
- Which entity will serve as the Customer Identity. This entity cannot be changed by the user.
- Which entities will be enabled in the system along with the channel. A specific set of entities comes by default (e.g. Sales Process, Lead, and Opportunity for B2B channel), but the user may remove or add entities if necessary.
B2B functionality, such as Leads or Opportunities will no longer be available by default—in order to work with them the user should create at least one B2B channel first. As a result it is now possible to configure your instance of OroCRM to be fully B2C-oriented and work only with entities that make sense in eCommerce context—with no mandatory Leads and Opportunities at all.
In order to comply with the new concept of Customer Identity, the new entity named B2B Customer was added to the system. It replaces Account in most cases of our default Sales Process workflows.
This feature provides the means to record historical sales for every channel type. The exact definition of what constitutes sales is subject to channel type: for Magento channels lifetime sales are counted as order subtotal (excluding cancelled orders), and for B2B channels it is counted as total value of won opportunities. The common metric allows you to quickly compare sales across channels in the account view, where both per-channel and account total values are displayed.
Marketing lists serve as the basis for marketing activities, such as email campaigns (see below). They represent a target auditory of the activity—that is, people, who will be contacted when the activity takes place. Marketing lists have little value by themselves; they exist in scope of some marketing campaign and its activities.
Essentially, marketing list is a segment of entities that contain some contact information, such as email or phone number or physical address. Lists are build based on some rules using Oro filtering tool. Similarly to segments, marketing lists can be static or dynamic; the rules are the same. The user can build marketing lists of contacts, Magento customers, leads, etc.
In addition to filtering rules, the user can manually tweak contents of the marketing list by removing items ("subscribers") from it. Removed subscribers will no longer appear in the list even if they fit the conditions. It is possible to move them back in the list, too.
Every subscriber can also unsubscribe from the list. In this case, he will remain in the list, but will no longer receive email campaigns that are sent to this list. Note that subscription status is managed on per-list basis; the same contact might be subscribed to one list and unsubscribed from another.
Email campaign is a first example of marketing activity implemented in OroCRM. The big picture is following: Every marketing campaign might contain multiple marketing activities, e.g. an email newsletter, a context ad campaign, a targeted phone advertisement. All these activities serve the common goal of the "big" marketing campaign.
In its current implementation, email campaign is a one-time dispatch of an email to a list of subscribers. Hence, the campaign consists of three basic parts:
Recipients—represented by a Marketing list. Email itself—the user may choose a template, or create a campaign email from scratch. Sending rules—for now, only one-time dispatch is available. Email campaign might be tied to a marketing campaign, but it might exist on its own as well.
In addition to default dashboard we have added a special Ecommerce-targeted board with three widgets:
- Average order amount
- New web customers
- Average customer lifetime sales
Every widget displays historical trend for the particular value over the past 12 months. You can also add them to any other dashboard using the Add Widget button.
We started the implementation of a new vision for the Channels in 1.3 version and now we bring Channels back, although under a new definition. The general idea behind channels may be explained as follows: a channel in OroCRM represents an outside source customer and sales data, where "customer" and "sales" must be understood in the broadest sense possible. Depending on the nature of the outside source, the channel may or may not require a data integration. This new definition leads to multiple noticeable changes across the system.
Account entity now performs as the "umbrella" entity for all customer identities across multiple channels, displaying all their data in a single view.
Albeit the Integrations grid still displays all integrations that exist in the system, you now may create only "non-customer" standalone integrations, such as Zendesk integration. The "customer" integrations, such as Magento integration, may be created only in scope of a channel and cannot exist without it.
The UI for channel creation now allows the user to specify channel type. By default there are three channel types: Magento, B2B, and Custom; more channel types may be created by developers.
Each channel type characterizes the following:
- Whether a channel requires an integration. If the answer is yes (cf. Magento), the integration should be configured along the creation of the channel.
- Which entity will serve as the Customer Identity. This entity cannot be changed by the user.
- Which entities will be enabled in the system along with the channel.
- A specific set of entities comes by default (e.g. Sales Process, Lead, and Opportunity for B2B channel), but the user may remove or add entities if necessary.
B2B functionality, such as Leads or Opportunities will no longer be available by default—in order to work with them the user should create at least one B2B channel first. As a result it is now possible to configure your instance of OroCRM to be fully B2C-oriented and work only with entities that make sense in eCommerce context—with no mandatory Leads and Opportunities at all. In order to comply with the new concept of Customer Identity, the new entity named B2B Customer was added to the system. It replaces Account in most cases of our default Sales Process workflows.
This feature provides the means to record historical sales for every channel type. The exact definition of what constitutes sales is subject to channel type: for Magento channels lifetime sales are counted as order subtotal (excluding cancelled orders), and for B2B channels it is counted as total value of won opportunities. The common metric allows you to quickly compare sales across channels in the account view, where both per-channel and account total values are displayed.
Marketing lists serve as the basis for marketing activities, such as email campaigns (see below). They represent a target auditory of the activity—that is, people, who will be contacted when the activity takes place. Marketing lists have little value by themselves; they exist in scope of some marketing campaign and its activities.
Essentially, marketing list is a segment of entities that contain some contact information, such as email or phone number or physical address. Lists are build based on some rules using Oro filtering tool. Similarly to segments, marketing lists can be static or dynamic; the rules are the same. The user can build marketing lists of contacts, Magento customers, leads, etc.
In addition to filtering rules, the user can manually tweak contents of the marketing list by removing items ("subscribers") from it. Removed subscribers will no longer appear in the list even if they fit the conditions. It is possible to move them back in the list, too.
Every subscriber can also unsubscribe from the list. In this case, he will remain in the list, but will no longer receive email campaigns that are sent to this list. Note that subscription status is managed on per-list basis; the same contact might be subscribed to one list and unsubscribed from another.
Email campaign is a first example of marketing activity implemented in OroCRM. The big picture is following: Every marketing campaign might contain multiple marketing activities, e.g. an email newsletter, a context ad campaign, a targeted phone advertisement. All these activities serve the common goal of the "big" marketing campaign.
In its current implementation, email campaign is a one-time dispatch of an email to a list of subscribers. Hence, the campaign consists of three basic parts: Recipients—represented by a Marketing list. Email itself—the user may choose a template, or create a campaign email from scratch. Sending rules—for now, only one-time dispatch is available. Email campaign might be tied to a marketing campaign, but it might exist on its own as well.
In addition to default dashboard we have added a special Ecommerce-targeted board with three widgets:
- Average order amount
- New web customers
- Average customer lifetime sales
Every widget displays historical trend for the particular value over the past 12 months. You can also add them to any other dashboard using the Add Widget button.
- Magento Synchronization stabilization improvements
- Fixed issue: Incorrect row count on grids.
- Fixed issue: Reports and Segments crash when "Is empty" filter is added.
- Fixed issue: Recent Emails dashboard widget is broken.
- Fixed issue: Accounts cannot be linked to Contacts from Edit Contact page.
- Website event tracking
- Marketing campaigns
- Campaign code tracking
- Cases
- Processes within Magento integration
- Activities (Notes, Emails, Attachments)
- Data import in CSV format
- Zendesk integration
- Other changes and improvements
- Two-side customer data synchronization with Magento
- Improvements to Customer view
- Improvements to Magento data view
- Fixed issue Broken widgets in merged Account view
- Fixed Community requests
- Improvements to Customer view
- Improvements to display of Magento data
- Fixed issue Broken widgets in merged Account view
- Tasks
- Improved UI for launch of the Sales Process workflow
- Refactored Flexible Workflows
- Embedded forms
- Account merging
- Improved Reports
- Improved Workflow
- Improved Dashboard
- Magento import performance improvements
- Other improvements in channnels, contacts
- Magento data import: Customers, Shopping carts and Orders
- B2C Sales Flow
- Call view window
- Basic dashboards
- Reports creation wizard (Table reports)
- B2B Sales Flow adjustments
- Call entity
- Add weather layer in the map on contact view page
- Workflow transitions
- Make all entities as Extended
- End support for Internet Explorer 9
- OroPlatform Beta 3 dependency changes
- OroPlatform Beta 2 dependency changes
- CRM Entities reports
- Contacts Import/Export
- Account association with contacts
- Custom entities and fields in usage
- Leads and Opportunities
- Flexible Workflow Engine (FWE)
- Contacts Improvements
- added ability to manage addresses from contact view page with Google Maps API support
- added support of multiple Emails and Phones for Contact
- Address Types Management. Added ability to set different type for addresses in Contact address book
- Placeholders
- Developer toolbar works with AJAX navigation requests
- Configuring hidden columns in a Grid
- Auto-complete form type
- Added Address Book
- Many-to-many relation between Contacts and Accounts
- Added ability to sort Contacts and Accounts by Phone and Email in a Grid
- Localized countries and regions
- Enhanced data change log with ability to save changes for collections
- Removed dependency on lib ICU