RFMBuilder[?]
getEntityIdsByChannel method from \ArrayIterator|BufferedQueryResultIterator to \Iteratororo_crm.extension.transtation_packages_provider:
TranslationPackagesProviderExtension[?]RecalculateLifetimeCommand[?]
getCustomersIterator method from BufferedQueryResultIterator to BufferedQueryResultIteratorInterfaceAccountLifetimeSubscriber[?]
getCustomersIterator method from BufferedQueryResultIterator to BufferedQueryResultIteratorInterfaceprivate:
oro_channel.twig.metadata_extensionoro_channel.twig.lifetime_value_extensionoro_contact.twig.extension.social_url was renamed to oro_contact.twig.extension and marked as privateAccountExtension[?]:
andlead` apis changed:
customerAssociation relation replaced by customer and account relationsOpportunityRepository[?]:
getNewOpportunitiesAmount was marked as deprecated. Method getOpportunitiesByPeriodQB should be used insteadgetWonOpportunitiesToDateCount was marked as deprecated. Method getWonOpportunitiesCountByPeriodQB should be used insteadoro_channel.twig.metadata_extension.classoro_channel.twig.lifetime_value_extension.classOro\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\Oro\Bundle\ContactBundle\ImportExport\Strategy\ContactAddOrReplaceStrategy::importExistingEntity, functionality covered by \Oro\Bundle\ImportExportBundle\Strategy\Import\ConfigurableAddOrReplaceStrategy\Oro\Bundle\ContactBundle\ImportExport\Strategy\ContactAddOrReplaceStrategy::fixDuplicateEntities, functionality covered by \Oro\Bundle\ImportExportBundle\Strategy\Import\ConfigurableAddOrReplaceStrategy\Oro\Bundle\CustomerBundle\ImportExport\Strategy\CustomerAddOrReplaceStrategy::processValidationErrors, functionality covered by \Oro\Bundle\ImportExportBundle\Strategy\Import\ConfigurableAddOrReplaceStrategyThe code of OroCRM connector to Magento 1 has been moved to a separate package.
*.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).getSupportedClass() method was removed from Oro\Bundle\ActivityContactBundle\Direction\DirectionProviderInterface.
Use the class attribute of the oro_activity_direction.provider DIC tag instead.*.class parameters for service definitions were removed from the dependency injection container.GET /api/rest/{version}/customers.{_format}, use GET /api/rest/{version}/magentocustomers.{_format} insteadPOST /api/rest/{version}/customers.{_format}, use POST /api/rest/{version}/magentocustomers.{_format} insteadGET /api/rest/{version}/customers/{id}, use GET /api/rest/{version}/magentocustomers/{id}.{_format} insteadPUT /api/rest/{version}/customers/{id}.{_format}, use PUT /api/rest/{version}/magentocustomers/{id}.{_format} insteadDELETE /api/rest/{version}/customers/{id}.{_format}, use DELETE /api/rest/{version}/magentocustomers/{id}.{_format} insteadGET /api/rest/{version}/leads/{leadId}/address.{_format} was removed,
use GET /api/rest/{version}/leads/{leadId}/addresses.{_format} instead.getSettings has been removed from Oro\Bundle\ChannelBundle\Provider\SettingsProvider.
Use getChannelTypes and getEntities methods instead.Oro\Bundle\ChannelBundle\Provider\SettingsProvider::getDependentEntityData has been renamed
to getDependentEntities.Oro\Bundle\ChannelBundle\Provider\SettingsProvider::isChannelSystem has been renamed to isSystemChannel.Oro\Bundle\ContactUsBundle\Controller\ContactReasonController::deleteAction
(oro_contactus_reason_delete route)
action the request method was changed to DELETE.Oro\Bundle\ContactUsBundle\Controller\ContactRequestController::deleteAction
(oro_contactus_request_create route)
action the request method was changed to DELETE.Oro\Bundle\MagentoBundle\Controller\CustomerController::registerAction
(oro_magento_customer_register route)
action the request method was changed to POST.Oro\Bundle\MagentoBundle\Controller\IntegrationConfigController::checkAction
(oro_magento_integration_check route)
action the request method was changed to POST.Oro\Bundle\MagentoBundle\Controller\NewsletterSubscriberController::subscribeAction
(oro_magento_newsletter_subscriber_subscribe route)
action the request method was changed to POST.Oro\Bundle\MagentoBundle\Controller\NewsletterSubscriberController::unsubscribeAction
(oro_magento_newsletter_subscriber_unsubscribe route)
action the request method was changed to POST.Oro\Bundle\MagentoBundle\Controller\NewsletterSubscriberController::subscribeByCustomerAction
(oro_magento_newsletter_subscriber_subscribe_customer route)
action the request method was changed to POST.Oro\Bundle\MagentoBundle\Controller\NewsletterSubscriberController::unsubscribeByCustomerAction
(oro_magento_newsletter_subscriber_unsubscribe_customer route)
action the request method was changed to POST.Oro\Bundle\MagentoBundle\Controller\OrderPlaceController::syncAction
(oro_magento_orderplace_new_cart_order_sync route)
action the request method was changed to POST.Oro\Bundle\MagentoBundle\Controller\OrderPlaceController::customerSyncAction
(oro_magento_orderplace_new_customer_order_sync route)
action the request method was changed to POST.oro_channel.provider.exclusion_provider and related logic were removed. There is
no exclusion for "channel type" entities on UI.oro_crm.namespace_migration_provider and the logic that used it were removed.oro/crm-mail-chimp removed from composer.json, run composer require 'oro/mailchimp:3.1.*' before upgrade to keep functionality workingoro/crm-abandoned-cart removed from composer.json, run composer require 'oro/magento-abandoned-cart:3.1.*' before upgrade to keep functionality working/api/contactaddresses REST API resource:
created was renamed to createdAtupdated was renamed to updatedAt/api/magentoaddresses REST API resource:
created was renamed to createdAtupdated was renamed to updatedAt/api/magentocartaddresses REST API resource:
created was renamed to createdAtupdated was renamed to updatedAt/api/leadaddresses REST API resource:
created was renamed to createdAtupdated was renamed to updatedAtCreatedAtTrait and UpdatedAtTrait were added. Use them instead of adding new updatedAt and createdAt fields to the entity.CreatedAtAwareInterface and UpdatedAtAwareInterface were added. Use them with the CreatedAtTrait and UpdatedAtTrait traits.orderNotes was added to the Order entity. It contains a collection of notes attached to the current Order.OrderNote was added. It contains a single record of an Order Note.IsDisplayOrderNotesSubscriber was added. It blocks the isDisplayOrderNotes field when the current channel does not support the order notes functionality.IsDisplayOrderNotesFormType and its service oro_magento_is_display_order_notes_type were added to define all options required by the isDisplayOrderNotes field in one place.OrderNotesDataConverter and its service oro_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.MagentoTransportInterface was changed:
isSupportedOrderNoteExtensionVersion. It uses to check that retrieved extension version from magento is supported order note functionality.getOrderNoteRequiredExtensionVersion. It is used to retrieve the required extension version from Magento that supports the order note functionality.RestTransport and SoapTransport were changed. They introduced implementation of the new methods that were added to MagentoTransportInterface.OrderNotesExtension and its service oro_magento.twig.order_notes_extension. Use them to check if the notes tab or grid are allowed to be shown.Context was added. Use it to deliver data from ChainProcessor to its sub-processors.ChainProcessor and its service oro_magento.importexport.processor.order_notes.chain_processor were added. Use them to prepare Order Note collection for import.ProcessorInterface was added. It is a contract for the sub-processors of ChainProcessor.ValidationNoteProcessor and its service oro_magento.importexport.processor.order_notes.validation_note_processor were added. It's a sub-processor of ChainProcessor that was added to filter invalid Order Notes.NoteFieldsProcessor and its service oro_magento.importexport.processor.order_notes.note_fields_processor were added. It's a sub-processor of ChainProcessor that was added to map selected fields from the Order to the Order Note entity and apply specific transformation functions to data that is kept in the Order Note fields.emailAddress now have "contact_information"="email" entity propertyOpportunity entity, keep in mind that the probability 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.MagentoTransport was changed:
isDisplayOrderNotes field was added. It tells whether order notes are to be displayed on the Magento Customer and Account view pages.isSupportedOrderNoteExtensionVersion. Use it to find out if channel configuration supports the synchronization of Order Notes.oro_contact.subscriber.contact_listener.class was removed form the service containeroro_magento.event_listener.customer_currency.class was removed form the service containeroro_magento.event_listener.order.class was removed form the service containeroro_magento.integration_entity.remove_listener.class was removed form the service containerAccount Manager role has full permissions for Account and Contact entities. The permissions for the Account Manager is not changed if CRM is added to already installed Customer Portal.sharedGuestEmailList field was added to the MagentoTransport entity. During guest order synchronization, separate MagentoCustomer entities will be created for orders that have emails on the sharedGuestEmailList (email, firstName and lastName fields are used for identification).EmailListToStringTransformer was added. Use it to transform text with different delimiters between entries into the list of emails.EmailAddressListValidator was added. Use it to validate array of emails.AbstractArrayToStringTransformer was added. Use it to create your own transformers based on array to string transformation like EmailListToStringTransformer.GuestCustomerStrategyHelper and its service oro_magento.importexport.guest_customer_strategy_helper were added.
Use it to check if guest customer emails are on the sharedGuestEmailList, and retrieve identification data to search for existing guest customers.SharedEmailListSubscriber is added to the sharedGuestEmailList block field when OroBridge extension is not installed on the Magento side.SharedGuestEmailListType and its service oro_magento_shared_guest_email_list_type were added to define all options required by the sharedGuestEmailList field in one place.RefreshChannelCacheListener was added. Use it to refresh cache after channel create or delete.transformArrayToString and transformStringToArray were moved from ArrayToStringTransformer to AbstractArrayToStringTransformer and changed their visibility to protected$delimiter was moved from ArrayToStringTransformer to AbstractArrayToStringTransformer and changed its visibility to protectedStateProvider on next events:
oro_channel.channel.save_succeedoro_channel.channel.delete_succeedSoapTransport (Magento 1 default transport) and RestTransport (Magento 2) classes changed format of the data
returned by getWebsites 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'
]
WebsiteDataConverter[?]class was removed. The WebsiteDataConverter[?] class should be used instead. In addition, the [@oro_magento](https://github.com/oro_magento).importexport.data_converter.rest.websiteservice was replaced with [@oro_magento](https://github.com/oro_magento).importexport.data_converter.website.AddressImportHelper[?]:
updateRegionByMagentoRegionIdOrUnsetNonSystemRegionOnly use updateRegionByMagentoRegionId insteadMagento2ChannelType[?] was added to support Magento2 as a new integrationIntegrationConfigController.php[?] was added. It is a universal entry point for both Magento and Magento2 integration check requestsMagentoTransport[?] was added. It's a parent for MagentoSoapTransport and MagentoRestTransport and it has all their similar properties and methodsTransportHandler[?] and its service oro_magento.handler.transport were added. It is a layer between transport and controller.
getMagentoTransport was added. Its main responsibility is to initialize and return MagentoTransport from check request.getCheckResponse: returns array with data for response.ProviderConnectorChoicesProvider[?] and its service oro_magento.provider.connector_choices were added. It has method:
getAllowedConnectorsChoices it returns a list of connectors available for some integration.RestPingProvider[?] and its service oro_magento.provider.rest_ping_provider were added. Use it to send ping request to Magento and store response data.RestRokenProvider[?] and its service oro_magento.provider.rest_token_provider were added. Use it to get a token, generate a new token and store it.RestTransportAdapter[?] was added. It converts MagentoRestTransport entity to interface suitable for REST client factory.RestTransport[?] and its service oro_magento.transport.rest_transport were added. Implements TransportInterface, MagentoTransportInterface, ServerTimeAwareInterface, PingableInterface, LoggerAwareInterface
This class has the same responsibilities as SoapTransport.batch_jobs.yml:
magento2 was added to channels.ymlRestResponseConverterInterface was added. Class ResponseConvertersPass[?] was added. Collects converters that implement RestResponseConverterInterfacemagento_soap_schedule_integration and magento_rest_schedule_integration were addedCustomerIconProvider[?]. Its service was renamed to oro_magento.provider.customer.magento_customer_iconIntegrationAwareSearchHandler[?]
setSecurityFacade was replaced with setAuthorizationCheckerNewsletterSubscriberPermissionProvider[?]
setSecurityFacade was replaced with setAuthorizationCheckerChannelType[?] was removed. Logic was moved to MagentoChannelType[?] and its service was renamed to oro_magento.provider.magento_channel_typeStoresSoapIterator[?] was removed. Logic was moved to StoresSoapIterator[?]:
MagentoSoapTransportRepository[?] was removed. Logic was moved to MagentoTransportRepository[?]SoapConnectorsFormSubscriber[?] was removed. Logic was moved to ConnectorsFormSubscriber[?]
getFormChannelTypeSoapSettingsFormSubscriber[?] was removed. Logic was moved to SettingsFormSubscriber[?] and its service were renamed to oro_magento.form.subscriber.transport_setting
getModifierWebsitesList was renamed to modifyWebsitesList and now it returns void.SoapTransportCheckButtonType[?] was removed. Logic was moved to TransportCheckButtonType[?]getSores in CartExpirationProcessor[?] was removed. Logic was moved to getStores methodAbstractMagentoConnector[?] was removed. Logic was moved to AbstractMagentoConnector[?]CartConnector[?] was removed. Logic was moved to `Oro\Bundle\MagentoBundle\Connector\CartConnectorOrderConnector[?] was removed. Logic was moved to OrderConnector[?]RegionConnector[?] was removed. Logic was moved to RegionConnector[?]CustomerConnector[?] was removed. Logic was moved to CustomerConnector[?]NewsletterSubscriberConnector[?] was removed. Logic was moved to NewsletterSubscriberConnector[?]MagentoConnectorInterface[?] was removed. Logic was moved to MagentoConnectorInterface[?]AbstractLoadeableSoapIterator[?] was removed. Logic was moved to AbstractLoadeableIterator[?]AbstractPageableSoapIterator[?] was removed. Logic was moved to AbstractPageableIterator[?]AbstractBridgeIterator[?] was removed. Logic was moved to AbstractBridgeIterator[?]CartsBridgeIterator[?] was removed. Logic was moved to CartsBridgeIterator[?]CustomerBridgeIterator[?] was removed. Logic was moved to CustomerBridgeIterator[?]CustomerSoapIterator[?] was removed. Logic was moved to CustomerSoapIterator[?]CustomerGroupBridgeIterator[?] was removed. Logic was moved to CustomerGroupBridgeIterator[?]NewsletterSubscriberBridgeIterator[?] was removed. Logic was moved to NewsletterSubscriberBridgeIterator[?] and now implements NewsletterSubscriberBridgeIteratorInterfaceOrderBridgeIterator[?] was removed. Logic was moved to OrderBridgeIterator[?]OrderSoapIterator[?] was removed. Logic was moved to OrderSoapIterator[?]RegionSoapIterator[?] was removed. Logic was moved to RegionSoapIterator[?]
findEntitiesToProcess() was moved to parent classgetEntityIds() was moved to parent classgetEntity($id) was moved to parent classgetIdFieldName() was moved to parent classcurrent() was moved to parent classWebsiteSoapIterator[?] was removed. Logic was moved to WebsiteSoapIterator[?]MagentoTransportInterface[?]
call method because it conflicts with REST conception. From now on, MagentoTransportInterface will not allow to specify http methods and resource through parameters.oro_magento_soap_check was renamed to oro_magento_integration_checknot_valid_parameters was removedmagento_schedule_integration was removed.CustomerAssociationListener[?]oro_sales.api.get_config.customer_associationoro_sales.api.customize_loaded_data.customer_associationoro_sales.api.get_metadata.customer_associationoro_sales.api.get_metadata.get_configoro_sales.api.load_data.customer_associationoro_sales.api.opportunity.initialize_customer_type_guesser.customer_associationoro_sales.api.opportunity.initialize_customer_account_type_guesseroro_sales.form.guesser.customer_guesseroro_sales.form.guesser.customer_account_guesseroro_sales.form.type.customer_api (API form type alias oro_sales_customer_api)oro_sales.form.type.customer_account_api (API form type alias oro_sales_customer_account_api)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:
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:
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:
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:
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:
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.
How can I help you explore Laravel packages today?