This class implements the logic behind the "toggle completed" checkboxes for activities. The public entrypoint ToggleCompleted(String) will toggle the completed status for an activity, i.e., a document, appointment or sale. Appointments may have three state logic enabled through a preference. The changes are saved immediately.
Extended PluginResponseInfo containing an ErpActor array
Extended PluginResponseInfo containing an ErpActor object
Interface providing information about an address.
Return a dictionary of Application-icons with their respective IDs and IMG urls.
This could in theory be sprited, but that's complicating what should be a simple feature for a extremely minimal performance-gain, in a one-time use-case for a CRM admin.
Probably NOT worth it.
Response object used by Approve/ Reject quote version methods.
Data fetch/save class for the Configuration dialog for the Button Bar. This is where the user configures which
of the standard and user-defined tasks (visible in the popup menu of the Task button) should be visible as
separate buttons. The code in this class is also called from the
A place to store the data the admin user has entered based on the metadata from FieldMetadataInfo.
A list of capabilities that a quote connector can have. These are strings instead of an enum to future proof it, i.e. so that when new capabilities occure , you don't have to recompile your connector if you don't want to.
Names of the various lists that the Quote plugins can provide. There is a corresponding Capability for each of these lists. CRMQuoteConnectorCapabilities
Base implementation of plugin, returning configuration from database.
Attribute that marks a class as a plugin for returning CS URLs and folders; a class using this attribute must also implement ICustomerServicePlugin.
Carrier object representing an Actor inside an ERP Connection, used for sending to and from an ERP Connector
Use this attribute to mark a class as an implementation of an ERP Connector. To be recognized by the plugin loader, the class also needs to have a parameterless constructor, and implement IErpConnector. The name field of this attribute is used to identify the plugin when loading/calling it, and should be <Company%gt;.<Plugin> to be unique.
This carrier describes a custom field to be added to the config dialog at runtime. It is used to populate the Admin configuration dialog for a connection. Note that this is just a description of the field - it is not the field itself. The GUI will use this info to build the user interface controls. The call to the ERP Connector’s GetConfigurationFields method returns a list of fields and field types. The Admin client builds a dialog with these fields.
Extended PluginResponseInfo containing a FieldMetadataInfo objects in an array
Data fetch/save class for the Filter dialog. This class can be used (together with the FilterAssociates, FilterGroups and SelectableListHelper classes to fetch the currently selected groups and associates of the filter dialog, as well as the from and to dates.
Interface providing information about a ForeignKey.
The programmatic, well-known and constant names of functional rights
Class where you load up the products and pricelists in memory and use from memory.
Extended PluginResponseInfo containing a dictionary of list items (primarykey/displayvalue)
One line in a quote list from the ERP connector
Utility class for lists helper methods.
Simple provider for module licences. This provider will return a flat list with one entity for system-level licences, one for site (database)-level licences, and one for user (associate)-level licences. It does not check codekey or other security items.
Helper class to update/parse NetServices URLs and store/update the user preferences.
Standard implementation of the plugin that calculates next due date for sales
The information needed to update remaining sale rows in a batch update
Response from a Get order state command
Response from a Place order command
Response object used by plugin/connector actions, to tell the caller how well the call went.
A pricelist is basically a collection of products. It can be valid in a time period, and outright deactivated. All prices in the product list is in a specific currency. We have decieded not to separate prices and products , which means that we get a simpler data model, but some redundancy.
Data shared between a product and a quote line.
A way to show some simple extra data on a product, typically to hep the user to identify the correct product. Basically a bucket of additional info that the ERP system would like to store and show in the user interface. Information placed here is shown in the GUI if the “provide-extra-data” capability is true.
A product is some thing or service that can be sold or leased to a customer.
QuoteAlternativeContextInfo contains all the information for communicating with the ERP connector. It contains information about the quote with a single alternative.
Quote Version is made up of one or more Alternatives. One of 1..n possible alternatives in a Quote Version. The reason we have alternatives is that a quote can say to a customer, “we can solve you problem in two (or more) different ways, with different technology and sideeffects (and price)”. An Alternative may have discounts on the total amount. The Alternative tracks whether the user on the order level entered the Discount %, the Discount amount, the Earning%, Earning amount or the TotalPrice fields so that the discount and earning and total can be re-calculated correctly when Quote Lines are added or changed.
Describes the changes done while recalculating the quote alternative
Response with QuoteAlternative and QuoteLine information
Sometimes, when we work in context of an alternative, we need all the alternatives. We then use an array of this class.
Contains helper methods and utilities for implementors of Quote Connectors. Used by the QuoteConnectorBase to handle calculations.
Typically you would call CalculateQuoteAlternativeWithLines(QuoteAlternativeWithLinesInfo) from your connector to get the basic summation and discount calculations done. You could then add anything you were interested in on top of the standard calculations.
Represent one connection to an ERP system and uses an IQuoteConnector implementation (the real connection) and an SuperOffice.CRM.Sale.QuoteConnectorMediator to wrap the real connection. Has a connection to the CRM database too, and gets data from it when needed.
A Quote Connection is set up in the SuperOffice Admin client. It collects the parameters needed to talk to a single ERP client, and gives it a name and an id.
Quote connections will be stored in the table “QuoteConnection” in the CRM database.
Takes care of the connections and serves them to interested parties. All connections are wrapped in a SuperOffice.CRM.Sale.QuoteConnectorMediator, so clients do not have to add their own mediators on top of what the QuoteConnectionManager returns.
Connector to ERP system
A base class with som typical quote functionality: Price calculations from the QuoteCalculation helper class.
Names of different situations that the list price can end up in that the Quote Connector needs to respond to. Used for referring to the configuration settings in the SuperOffice Quote Connector. GetQuoteStatusInfo(String) for usage.
Base class that allows 3rd party modules to extend the SuperOffice Quote Connector without directly linking to the specific version of the QuoteConnector.dll
This class is made to make it easier to make some installation specific changes to a connector without directly linking to the connector itself.
Just inherit QuoteConnectorExtender and override the function you need to change or extend the functionality. IQuoteConnector
QuoteContextInfo contains all the information for communicating with the ERP connector.
A Sale can have a quote, and have then a 1-1 relationship with the QuoteInfo. Read-write Quote information.
One line in a QuoteAlternative. QuoteLines are mainly information copied from the Products provider. Products information is sometimes edited by the user before being included in the quote , so most information is duplicated from Product rather than referenced directly.
Response with Quote, QuoteVersion, QuoteAlternative and QuoteLine information
Response from a OnAfterSentQuoteVersion command. Adds a URL field to the QuoteVersion context.
Translate enums into strings for Quote Version state. Used in building tooltips and lists.
QuoteAlternativeContextInfo contains all the information for communicating with the ERP connector. It contains information about the quote with a version and all its alternatives.
Represent a version of a quote
A quote is divided into one or more versions (or revisions, if you like), so a quote have 1..n QuoteVersions. I.e. a QuoteVersion always have a quote.
Even if versioning is disabled, a single version will exist. When versioning is disabled, new versions are not created , but the only one is reused.
Response with Version and Quote Information
Extension for the QuoteVersionState enum.
Return object from QuoteVersionValidate connector call
Return value object for Document Plugin API calls
Data fetch/save class for the Sale Filter dialog.
This class represents one restriction in an "Advanced Find" supported by an ERP (Sync/Quote) connector
Extended PluginResponseInfo containing a string array
Utility class for generating tool tips.
Class providing information about the associate (user). This should have been an interface. Sorry about that.
Helper class that exposes section and key names for the UserPreference table. The top level members of this class are classes that represent sections; use the .Section member to get the actual section name. Inner members represent the keys within each section.. The PreferenceLevel enum contains the values for the DefLevel element of the UserPreference table.
Preference keys for the mini panel.
Associate preferences like which radiobutton did I select the last time I used this dialog/control or which item did I select last time I used this dropdownlist
BulkUpdate - Misc
Preferences for Cloud Services.
Data collection (usage statistics) - used for status storage and locking, not intended for user interaction
Boss mod preferences for database-dependent special optimizations
Doc Plugin Addons: [DocPluginNames] plugin-id = prog.id. The prog.id is requred and matches COM ProgId property of the document plugin class.
DocTemplate Type Mapping: [DocTemplateTypeMap] .xyz = .docx
Maps a template's unknown file type to a know file type before tag-substitution logic is run on the template
Duplicate system settings
Enables replication of user-defined fields at field level instead of record level. This ensures that field changes for the customer are retained, but may affect the performance of the replication process
Filter (these are available only in PointyHairedBossMode in admin and thus cannot be easily edited)
Filter dialog settings, editable through SoAdmin
Find result dialog
GDPR - Misc
Grouped and filtered lists
Preference keys for the mini panel.
SuperOffice Web Services settings
Preferences for Pocket client.
Preference keys for QuickLaunchBar settings
Preference keys for the quote system.
Required dynamic load: Add new preference section for NetServer only [RequiredDynamicLoad] name = regexp
Preference keys Regeneration of StatusMonitors
Preference keys for sales settings
Sentry Addons: [SentryAddonNames] dummy-name = prog.id. The prog.id is requred and matches ProgId property of the sentry plugin attribute.
Tooltips in the application
Preferences for Zero Footprint Documents
Interface providing information about the appointment.
Get values from the SuperOffice config section.
Interface providing information about a contact
Interface defining methods to be implemented for getting CS URLs and paths.
Interface providing information about the document.
Interface providing information about the document template.
Interface to be implemented by Connectors in the ERP Integration System; implementations also need to be marked with the ErpConnectorAttribute to be recognized by the loader.
Contains the algorithm for calculating the next due date for a given sale or all sales.
Contains the algorithm for calculating the next due date for a given sale or all sales.
Interface providing information about a person
SuperOffice has its own simple Product table. This table can be used by the ERP connectors as a cache for ERP data.
This interface will be implemented by SuperOffice. The implementation is passed to all connectors as an initialization parameter.
Interface providing information about a project.
This is the interface SuperOffice will call to integrate against an ERP system in the realm of quotes and orders. You don't have to implement all functions, use the capabilities to tell SuperOffice what the connector can and cannot do.
If an ERP system does not provide products, or if the ERP system is not available , the searches can be delegated to the built-in SuperOffice product registry by using the SuperOffice IProductRegisterCache object that is provided at startup.
Currencies are specified in ISO three letter codes: USD, NOK, SEK, EUR, GBP, etc. See http://www.currency-iso.org/dl_iso_table_a1.xls for details.
The user may click the TEST button in the configuration dialog, which calls the TestConnection method.
Interface providing information about a sale.
Interface providing information about a selection.
String, int, decimal, image, url, etc. How should the value be interpreted.
Access restrictions and mandatory status, if any
Note: Enum is mirrored in C++ code, update iEnum.h when it changes
Note #2: Enum is mirrored in data model (Enums.cs), which also needs to be updated if this changes
Describes the different widgets that the Connector can use in its configuration dialog.
Enum for possible values of the Filter.DefaultFilter preference, which controls behaviour before the first Save has been done.
The state of a quote-alternative or -line
State enum for a response, describes the possible states from totally Ok to Error that an action can return
How should a return value from an API call or command be interpreted by the caller
Which field the user changed last. This helps the calulation to calculate the other fields correctly.