diff --git a/client/src/api/biz-role-rights.js b/client/src/api/biz-role-rights.js index 4eb2b23..7ade9d6 100644 --- a/client/src/api/biz-role-rights.js +++ b/client/src/api/biz-role-rights.js @@ -16,7 +16,8 @@ export default { Global: { Change: 2, ReadFullRecord: 1, Select: 0 }, GlobalOps: { Change: 16384, ReadFullRecord: 8192, Select: 0 }, User: { Change: 2, ReadFullRecord: 1, Select: 131071 }, - UserOptions: { Change: 2, ReadFullRecord: 1, Select: 0 }, + UserOptions: { Change: 2, ReadFullRecord: 1, Select: 0 }, + Vendor: { Change: 106, ReadFullRecord: 98565, Select: 131071 }, ServerState: { Change: 16384, ReadFullRecord: 131071, Select: 0 }, LogFile: { Change: 0, ReadFullRecord: 24576, Select: 0 }, Backup: { Change: 16384, ReadFullRecord: 8195, Select: 0 }, diff --git a/client/src/api/gzutil.js b/client/src/api/gzutil.js index 182a219..998bcc1 100644 --- a/client/src/api/gzutil.js +++ b/client/src/api/gzutil.js @@ -404,6 +404,8 @@ export default { return "$sockiPencilRuler"; case window.$gz.type.Customer: return "$sockiAddressCard"; + case window.$gz.type.Vendor: + return "$ayiStore"; case window.$gz.type.ServerJob: return "$sockiRobot"; @@ -510,7 +512,7 @@ export default { // sleepAsync: function(milliseconds) { // eslint-disable-next-line - return new Promise((resolve) => setTimeout(resolve, milliseconds)); + return new Promise(resolve => setTimeout(resolve, milliseconds)); }, /////////////////////////////////////////////// // sortByKey lodash "sortBy" replacement diff --git a/client/src/api/initialize.js b/client/src/api/initialize.js index 76597b5..8a979f1 100644 --- a/client/src/api/initialize.js +++ b/client/src/api/initialize.js @@ -168,6 +168,13 @@ ServiceContractor = 5 */ sub = []; + sub.push({ + title: "GZCaseList", + icon: "$sockiCoffee", + route: "/biz-gzcase-list", + key: key++ + }); + sub.push({ title: "LicenseList", icon: "$sockiGem", @@ -204,9 +211,9 @@ ServiceContractor = 5 */ }); sub.push({ - title: "GZCaseList", - icon: "$sockiCoffee", - route: "/biz-gzcase-list", + title: "VendorList", + icon: "$sockiStore", + route: "/biz-vendor-list", key: key++ }); diff --git a/client/src/api/socktype.js b/client/src/api/socktype.js index 1eeabaa..1185ea3 100644 --- a/client/src/api/socktype.js +++ b/client/src/api/socktype.js @@ -15,6 +15,7 @@ export default { FileAttachment: 17, DataListSavedFilter: 18, FormCustom: 19, + Vendor: 33, GlobalOps: 47, //really only used for rights, not an object type of any kind BizMetrics: 48, //deprecate? Not used for anything as of nov 2020 Backup: 49, diff --git a/client/src/api/translation.js b/client/src/api/translation.js index f778912..78b5d5d 100644 --- a/client/src/api/translation.js +++ b/client/src/api/translation.js @@ -109,6 +109,7 @@ export default { "Service", "CustomerList", "HeadOfficeList", + "VendorList", "CustomerNotifySubscriptionList", "Contacts", "AdministrationGlobalSettings", diff --git a/client/src/router.js b/client/src/router.js index 8442a20..33f430e 100644 --- a/client/src/router.js +++ b/client/src/router.js @@ -357,6 +357,18 @@ export default new Router({ component: () => import(/* webpackChunkName: "biz" */ "./views/biz-product.vue") }, + { + path: "/biz-vendor-list", + name: "biz-vendor-list", + component: () => + import(/* webpackChunkName: "biz" */ "./views/biz-vendor-list.vue") + }, + { + path: "/biz-vendor-list/:recordid", + name: "vendor-edit", + component: () => + import(/* webpackChunkName: "biz" */ "./views/biz-vendor.vue") + }, { path: "/biz-gzcase-list", name: "biz-gzcase-list", diff --git a/client/src/views/biz-product.vue b/client/src/views/biz-product.vue index 65590b9..3b60dc5 100644 --- a/client/src/views/biz-product.vue +++ b/client/src/views/biz-product.vue @@ -34,6 +34,7 @@ :readonly="formState.readOnly" :label="$sock.t('Vendor')" :error-messages="form().serverErrors(this, 'vendorId')" + :rules="[form().required(this, 'vendorId')]" @input="fieldValueChanged('vendorId')" > @@ -178,14 +179,14 @@ export default { concurrency: 0, name: null, active: true, - notes: null, + vendorId: 1, + licenseInterval: "365.0:00:00", + maintInterval: "365.0:00:00", + vendorCode: null, + ourCode: null, wiki: null, - customFields: "{}", tags: [], - dateStarted: window.$gz.locale.nowUTC8601String(), - dateCompleted: null, - productOverseerId: null, - accountNumber: null + sType: 0 }, formState: { ready: false, @@ -528,7 +529,7 @@ function generateMenu(vm) { const menuOptions = { isMain: false, readOnly: vm.formState.readOnly, - icon: "$sockiProductDiagram", + icon: "$sockiBarCode", title: "Product", helpUrl: "svc-products", formData: { diff --git a/client/src/views/biz-vendor-list.vue b/client/src/views/biz-vendor-list.vue new file mode 100644 index 0000000..13ccf0a --- /dev/null +++ b/client/src/views/biz-vendor-list.vue @@ -0,0 +1,178 @@ + + + diff --git a/client/src/views/biz-vendor.vue b/client/src/views/biz-vendor.vue new file mode 100644 index 0000000..fb1de41 --- /dev/null +++ b/client/src/views/biz-vendor.vue @@ -0,0 +1,1210 @@ + + diff --git a/server/Controllers/VendorController.cs b/server/Controllers/VendorController.cs new file mode 100644 index 0000000..92a789f --- /dev/null +++ b/server/Controllers/VendorController.cs @@ -0,0 +1,196 @@ +using System.Threading.Tasks; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Routing; +using Microsoft.AspNetCore.Authorization; +using Microsoft.Extensions.Logging; +using Microsoft.EntityFrameworkCore; +using System.Linq; +using Sockeye.Models; +using Sockeye.Api.ControllerHelpers; +using Sockeye.Biz; + + +namespace Sockeye.Api.Controllers +{ + [ApiController] + [ApiVersion("8.0")] + [Route("api/v{version:apiVersion}/vendor")] + [Produces("application/json")] + [Authorize] + public class VendorController : ControllerBase + { + private readonly AyContext ct; + private readonly ILogger log; + private readonly ApiServerState serverState; + + /// + /// ctor + /// + /// + /// + /// + public VendorController(AyContext dbcontext, ILogger logger, ApiServerState apiServerState) + { + ct = dbcontext; + log = logger; + serverState = apiServerState; + } + + /// + /// Create Vendor + /// + /// + /// From route path + /// + [HttpPost] + public async Task PostVendor([FromBody] Vendor newObject, ApiVersion apiVersion) + { + if (!serverState.IsOpen) + return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); + VendorBiz biz = VendorBiz.GetBiz(ct, HttpContext); + if (!Authorized.HasCreateRole(HttpContext.Items, biz.BizType)) + return StatusCode(403, new ApiNotAuthorizedResponse()); + if (!ModelState.IsValid) + return BadRequest(new ApiErrorResponse(ModelState)); + Vendor o = await biz.CreateAsync(newObject); + if (o == null) + return BadRequest(new ApiErrorResponse(biz.Errors)); + else + return CreatedAtAction(nameof(VendorController.GetVendor), new { id = o.Id, version = apiVersion.ToString() }, new ApiCreatedResponse(o)); + } + + // /// + // /// Duplicate Vendor + // /// (Wiki and Attachments are not duplicated) + // /// + // /// Source object id + // /// From route path + // /// Vendor + // [HttpPost("duplicate/{id}")] + // public async Task DuplicateVendor([FromRoute] long id, ApiVersion apiVersion) + // { + // if (!serverState.IsOpen) + // return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); + // VendorBiz biz = VendorBiz.GetBiz(ct, HttpContext); + // if (!Authorized.HasCreateRole(HttpContext.Items, biz.BizType)) + // return StatusCode(403, new ApiNotAuthorizedResponse()); + // if (!ModelState.IsValid) + // return BadRequest(new ApiErrorResponse(ModelState)); + // Vendor o = await biz.DuplicateAsync(id); + // if (o == null) + // return BadRequest(new ApiErrorResponse(biz.Errors)); + // else + // return CreatedAtAction(nameof(VendorController.GetVendor), new { id = o.Id, version = apiVersion.ToString() }, new ApiCreatedResponse(o)); + // } + + /// + /// Get Vendor + /// + /// + /// Vendor + [HttpGet("{id}")] + public async Task GetVendor([FromRoute] long id) + { + if (!serverState.IsOpen) + return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); + VendorBiz biz = VendorBiz.GetBiz(ct, HttpContext); + if (!Authorized.HasReadFullRole(HttpContext.Items, biz.BizType)) + return StatusCode(403, new ApiNotAuthorizedResponse()); + if (!ModelState.IsValid) + return BadRequest(new ApiErrorResponse(ModelState)); + var o = await biz.GetAsync(id); + if (o == null) return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND)); + return Ok(ApiOkResponse.Response(o)); + } + + /// + /// Update Vendor + /// + /// + /// + [HttpPut] + public async Task PutVendor([FromBody] Vendor updatedObject) + { + if (!serverState.IsOpen) + return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); + if (!ModelState.IsValid) + return BadRequest(new ApiErrorResponse(ModelState)); + VendorBiz biz = VendorBiz.GetBiz(ct, HttpContext); + if (!Authorized.HasModifyRole(HttpContext.Items, biz.BizType)) + return StatusCode(403, new ApiNotAuthorizedResponse()); + var o = await biz.PutAsync(updatedObject); + if (o == null) + { + if (biz.Errors.Exists(z => z.Code == ApiErrorCode.CONCURRENCY_CONFLICT)) + return StatusCode(409, new ApiErrorResponse(biz.Errors)); + else + return BadRequest(new ApiErrorResponse(biz.Errors)); + } + return Ok(ApiOkResponse.Response(new { Concurrency = o.Concurrency })); ; + } + + /// + /// Delete Vendor + /// + /// + /// NoContent + [HttpDelete("{id}")] + public async Task DeleteVendor([FromRoute] long id) + { + if (!serverState.IsOpen) + return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); + if (!ModelState.IsValid) + return BadRequest(new ApiErrorResponse(ModelState)); + VendorBiz biz = VendorBiz.GetBiz(ct, HttpContext); + if (!Authorized.HasDeleteRole(HttpContext.Items, biz.BizType)) + return StatusCode(403, new ApiNotAuthorizedResponse()); + if (!await biz.DeleteAsync(id)) + return BadRequest(new ApiErrorResponse(biz.Errors)); + return NoContent(); + } + + + /// + /// Get alert notes for this vendor + /// + /// + /// Alert notes or null + [HttpGet("alert/{id}")] + public async Task GetVendorAlert([FromRoute] long id) + { + if (!serverState.IsOpen) + return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); + if (!Authorized.HasReadFullRole(HttpContext.Items, SockType.Vendor)) + return StatusCode(403, new ApiNotAuthorizedResponse()); + if (!ModelState.IsValid) + return BadRequest(new ApiErrorResponse(ModelState)); + return Ok(ApiOkResponse.Response(await ct.Vendor.AsNoTracking().Where(x => x.Id == id).Select(x => x.AlertNotes).FirstOrDefaultAsync())); + } + + /// + /// Get list for accounting integrations + /// + /// NameIdActive list + [HttpGet("accounting-list")] + public async Task GetAccountingList() + { + if (!serverState.IsOpen) + return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); + VendorBiz biz = VendorBiz.GetBiz(ct, HttpContext); + if (!Authorized.HasReadFullRole(HttpContext.Items, biz.BizType)) + return StatusCode(403, new ApiNotAuthorizedResponse()); + if (!ModelState.IsValid) + return BadRequest(new ApiErrorResponse(ModelState)); + var o = await biz.GetNameIdActiveItemsAsync(); + if (o == null) return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND)); + return Ok(ApiOkResponse.Response(o)); + } + + + + //------------ + + + }//eoc +}//eons \ No newline at end of file diff --git a/server/DataList/VendorDataList.cs b/server/DataList/VendorDataList.cs new file mode 100644 index 0000000..1024b9e --- /dev/null +++ b/server/DataList/VendorDataList.cs @@ -0,0 +1,241 @@ +using System.Collections.Generic; +using System.Linq; +using Sockeye.Biz; +using Sockeye.Models; + +namespace Sockeye.DataList +{ + internal class VendorDataList : DataListProcessingBase + { + public VendorDataList(long translationId) + { + DefaultListAType = SockType.Vendor; + SQLFrom = "from avendor"; + var RoleSet = BizRoles.GetRoleSet(DefaultListAType); + AllowedRoles = RoleSet.ReadFullRecord | RoleSet.Change; + DefaultColumns = new List() { "vendorname", "vendorphone1", "vendoremail", "vendortags" }; + DefaultSortBy = new Dictionary() { { "vendorname", "+" } }; + FieldDefinitions = new List(); + + FieldDefinitions.Add(new DataListFieldDefinition + { + TKey = "VendorName", + FieldKey = "vendorname", + SockType = (int)SockType.Vendor, + UiFieldDataType = (int)UiFieldDataType.Text, + SqlIdColumnName = "avendor.id", + SqlValueColumnName = "avendor.name", + IsRowId = true + }); + + FieldDefinitions.Add(new DataListFieldDefinition + { + TKey = "VendorNotes", + FieldKey = "vendornotes", + UiFieldDataType = (int)UiFieldDataType.Text, + SqlValueColumnName = "avendor.notes" + }); + + FieldDefinitions.Add(new DataListFieldDefinition + { + TKey = "Active", + FieldKey = "vendoractive", + UiFieldDataType = (int)UiFieldDataType.Bool, + SqlValueColumnName = "avendor.active" + }); + + FieldDefinitions.Add(new DataListFieldDefinition + { + TKey = "Tags", + FieldKey = "vendortags", + UiFieldDataType = (int)UiFieldDataType.Tags, + SqlValueColumnName = "avendor.tags" + }); + + FieldDefinitions.Add(new DataListFieldDefinition + { + TKey = "WebAddress", + FieldKey = "vendorwebaddress", + UiFieldDataType = (int)UiFieldDataType.HTTP, + SqlValueColumnName = "avendor.webaddress" + }); + + FieldDefinitions.Add(new DataListFieldDefinition + { + TKey = "VendorAlertNotes", + FieldKey = "VendorAlertNotes", + UiFieldDataType = (int)UiFieldDataType.Text, + SqlValueColumnName = "avendor.alertnotes" + }); + + FieldDefinitions.Add(new DataListFieldDefinition + { + TKey = "VendorAccountNumber", + FieldKey = "vendoraccountnumber", + UiFieldDataType = (int)UiFieldDataType.Text, + SqlValueColumnName = "avendor.accountnumber" + }); + + FieldDefinitions.Add(new DataListFieldDefinition + { + TKey = "VendorPhone1", + FieldKey = "vendorphone1", + UiFieldDataType = (int)UiFieldDataType.PhoneNumber, + SqlValueColumnName = "avendor.phone1" + }); + + FieldDefinitions.Add(new DataListFieldDefinition + { + TKey = "VendorPhone2", + FieldKey = "vendorphone2", + UiFieldDataType = (int)UiFieldDataType.PhoneNumber, + SqlValueColumnName = "avendor.phone2" + }); + + FieldDefinitions.Add(new DataListFieldDefinition + { + TKey = "VendorPhone3", + FieldKey = "vendorphone3", + UiFieldDataType = (int)UiFieldDataType.PhoneNumber, + SqlValueColumnName = "avendor.phone3" + }); + + FieldDefinitions.Add(new DataListFieldDefinition + { + TKey = "VendorPhone4", + FieldKey = "vendorphone4", + UiFieldDataType = (int)UiFieldDataType.PhoneNumber, + SqlValueColumnName = "avendor.phone4" + }); + + FieldDefinitions.Add(new DataListFieldDefinition + { + TKey = "VendorPhone5", + FieldKey = "vendorphone5", + UiFieldDataType = (int)UiFieldDataType.PhoneNumber, + SqlValueColumnName = "avendor.phone5" + }); + + FieldDefinitions.Add(new DataListFieldDefinition + { + TKey = "VendorEmail", + FieldKey = "vendoremail", + UiFieldDataType = (int)UiFieldDataType.EmailAddress, + SqlValueColumnName = "avendor.emailaddress" + }); + + FieldDefinitions.Add(new DataListFieldDefinition + { + TKey = "AddressPostalDeliveryAddress", + FieldKey = "vendorpostaddress", + UiFieldDataType = (int)UiFieldDataType.Text, + SqlValueColumnName = "avendor.postaddress" + }); + + FieldDefinitions.Add(new DataListFieldDefinition + { + TKey = "AddressPostalCity", + FieldKey = "vendorpostcity", + UiFieldDataType = (int)UiFieldDataType.Text, + SqlValueColumnName = "avendor.postcity" + }); + + FieldDefinitions.Add(new DataListFieldDefinition + { + TKey = "AddressPostalStateProv", + FieldKey = "vendorpostregion", + UiFieldDataType = (int)UiFieldDataType.Text, + SqlValueColumnName = "avendor.postregion" + }); + + FieldDefinitions.Add(new DataListFieldDefinition + { + TKey = "AddressPostalCountry", + FieldKey = "vendorpostcountry", + UiFieldDataType = (int)UiFieldDataType.Text, + SqlValueColumnName = "avendor.postcountry" + }); + + FieldDefinitions.Add(new DataListFieldDefinition + { + TKey = "AddressPostalPostal", + FieldKey = "vendorpostcode", + UiFieldDataType = (int)UiFieldDataType.Text, + SqlValueColumnName = "avendor.postcode" + }); + + FieldDefinitions.Add(new DataListFieldDefinition + { + TKey = "AddressDeliveryAddress", + FieldKey = "vendoraddress", + UiFieldDataType = (int)UiFieldDataType.Text, + SqlValueColumnName = "avendor.address" + }); + + FieldDefinitions.Add(new DataListFieldDefinition + { + TKey = "AddressCity", + FieldKey = "vendorcity", + UiFieldDataType = (int)UiFieldDataType.Text, + SqlValueColumnName = "avendor.city" + }); + + FieldDefinitions.Add(new DataListFieldDefinition + { + TKey = "AddressStateProv", + FieldKey = "vendorregion", + UiFieldDataType = (int)UiFieldDataType.Text, + SqlValueColumnName = "avendor.region" + }); + + FieldDefinitions.Add(new DataListFieldDefinition + { + TKey = "AddressCountry", + FieldKey = "vendorcountry", + UiFieldDataType = (int)UiFieldDataType.Text, + SqlValueColumnName = "avendor.country" + }); + + FieldDefinitions.Add(new DataListFieldDefinition + { + TKey = "AddressPostal", + FieldKey = "workorderaddresspostal", + UiFieldDataType = (int)UiFieldDataType.Text, + SqlValueColumnName = "avendor.addresspostal" + }); + + FieldDefinitions.Add(new DataListFieldDefinition + { + TKey = "AddressLatitude", + FieldKey = "vendorlatitude", + UiFieldDataType = (int)UiFieldDataType.Decimal, + SqlValueColumnName = "avendor.latitude" + }); + + FieldDefinitions.Add(new DataListFieldDefinition + { + TKey = "AddressLongitude", + FieldKey = "vendorlongitude", + UiFieldDataType = (int)UiFieldDataType.Decimal, + SqlValueColumnName = "avendor.longitude" + }); + + FieldDefinitions.Add(new DataListFieldDefinition { TKey = "VendorCustom1", FieldKey = "vendorcustom1", IsCustomField = true, IsFilterable = false, IsSortable = false, SqlValueColumnName = "avendor.customfields" }); + FieldDefinitions.Add(new DataListFieldDefinition { TKey = "VendorCustom2", FieldKey = "vendorcustom2", IsCustomField = true, IsFilterable = false, IsSortable = false, SqlValueColumnName = "avendor.customfields" }); + FieldDefinitions.Add(new DataListFieldDefinition { TKey = "VendorCustom3", FieldKey = "vendorcustom3", IsCustomField = true, IsFilterable = false, IsSortable = false, SqlValueColumnName = "avendor.customfields" }); + FieldDefinitions.Add(new DataListFieldDefinition { TKey = "VendorCustom4", FieldKey = "vendorcustom4", IsCustomField = true, IsFilterable = false, IsSortable = false, SqlValueColumnName = "avendor.customfields" }); + FieldDefinitions.Add(new DataListFieldDefinition { TKey = "VendorCustom5", FieldKey = "vendorcustom5", IsCustomField = true, IsFilterable = false, IsSortable = false, SqlValueColumnName = "avendor.customfields" }); + FieldDefinitions.Add(new DataListFieldDefinition { TKey = "VendorCustom6", FieldKey = "vendorcustom6", IsCustomField = true, IsFilterable = false, IsSortable = false, SqlValueColumnName = "avendor.customfields" }); + FieldDefinitions.Add(new DataListFieldDefinition { TKey = "VendorCustom7", FieldKey = "vendorcustom7", IsCustomField = true, IsFilterable = false, IsSortable = false, SqlValueColumnName = "avendor.customfields" }); + FieldDefinitions.Add(new DataListFieldDefinition { TKey = "VendorCustom8", FieldKey = "vendorcustom8", IsCustomField = true, IsFilterable = false, IsSortable = false, SqlValueColumnName = "avendor.customfields" }); + FieldDefinitions.Add(new DataListFieldDefinition { TKey = "VendorCustom9", FieldKey = "vendorcustom9", IsCustomField = true, IsFilterable = false, IsSortable = false, SqlValueColumnName = "avendor.customfields" }); + FieldDefinitions.Add(new DataListFieldDefinition { TKey = "VendorCustom10", FieldKey = "vendorcustom10", IsCustomField = true, IsFilterable = false, IsSortable = false, SqlValueColumnName = "avendor.customfields" }); + FieldDefinitions.Add(new DataListFieldDefinition { TKey = "VendorCustom11", FieldKey = "vendorcustom11", IsCustomField = true, IsFilterable = false, IsSortable = false, SqlValueColumnName = "avendor.customfields" }); + FieldDefinitions.Add(new DataListFieldDefinition { TKey = "VendorCustom12", FieldKey = "vendorcustom12", IsCustomField = true, IsFilterable = false, IsSortable = false, SqlValueColumnName = "avendor.customfields" }); + FieldDefinitions.Add(new DataListFieldDefinition { TKey = "VendorCustom13", FieldKey = "vendorcustom13", IsCustomField = true, IsFilterable = false, IsSortable = false, SqlValueColumnName = "avendor.customfields" }); + FieldDefinitions.Add(new DataListFieldDefinition { TKey = "VendorCustom14", FieldKey = "vendorcustom14", IsCustomField = true, IsFilterable = false, IsSortable = false, SqlValueColumnName = "avendor.customfields" }); + FieldDefinitions.Add(new DataListFieldDefinition { TKey = "VendorCustom15", FieldKey = "vendorcustom15", IsCustomField = true, IsFilterable = false, IsSortable = false, SqlValueColumnName = "avendor.customfields" }); + FieldDefinitions.Add(new DataListFieldDefinition { TKey = "VendorCustom16", FieldKey = "vendorcustom16", IsCustomField = true, IsFilterable = false, IsSortable = false, SqlValueColumnName = "avendor.customfields" }); + } + }//eoc +}//eons \ No newline at end of file diff --git a/server/biz/BizRoles.cs b/server/biz/BizRoles.cs index a63f064..3dfa925 100644 --- a/server/biz/BizRoles.cs +++ b/server/biz/BizRoles.cs @@ -512,6 +512,23 @@ namespace Sockeye.Biz }); + //////////////////////////////////////////////////////////// + //LICENSE + // + roles.Add(SockType.Vendor, new BizRoleSet() + { + Change = AuthorizationRoles.BizAdmin + | AuthorizationRoles.Service + | AuthorizationRoles.Sales + | AuthorizationRoles.Accounting, + ReadFullRecord = AuthorizationRoles.BizAdminRestricted + | AuthorizationRoles.ServiceRestricted + | AuthorizationRoles.Tech + | AuthorizationRoles.SalesRestricted + , + Select = AuthorizationRoles.All + }); + //////////////////////////////////////////////////////////// //LICENSE