Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

updateAgentProfile.vue 17KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492
  1. <template>
  2. <main id="main">
  3. <section id="contact2">
  4. <div class="container">
  5. <div class="form">
  6. <div class="row">
  7. <div class="section-header">
  8. <h2>update agent info</h2>
  9. </div>
  10. </div>
  11. <div class="row mb-4">
  12. <div class="col-md-6">
  13. <float-label fixed label="Username">
  14. <input
  15. type="text"
  16. name="username"
  17. class="form-control uniinput"
  18. id="username"
  19. placeholder="Username"
  20. data-rule="minlen:4"
  21. data-msg="please enter your username"
  22. v-model="agent.user.username"
  23. v-bind:class="{
  24. 'is-valid': agent.user.username,
  25. 'is-invalid':
  26. !requiredField(agent.user.username) && usernameLoad,
  27. }"
  28. v-on:keyup="usernameLoad = true"
  29. v-on:blur="usernameLoad = true"
  30. />
  31. <div class="invalid-feedback">Username is Required!</div>
  32. </float-label>
  33. </div>
  34. <div class="form-group col-md-6">
  35. <float-label fixed label="Name">
  36. <input
  37. type="text"
  38. name="name"
  39. class="form-control uniInput"
  40. id="name"
  41. placeholder="Name"
  42. data-rule="minlen:4"
  43. data-msg="Please enter your name"
  44. v-model="agent.name"
  45. v-bind:class="{
  46. 'is-valid': agent.name,
  47. 'is-invalid': !requiredField(agent.name) && nameLoad,
  48. }"
  49. v-on:keyup="nameLoad = true"
  50. v-on:blur="nameLoad = true"
  51. />
  52. <div class="invalid-feedback">Name is Required!</div>
  53. </float-label>
  54. </div>
  55. </div>
  56. <div class="row mt-4">
  57. <div class="form-group col-md-6">
  58. <float-label fixed label="Surname">
  59. <input
  60. type="text"
  61. class="form-control uniInput"
  62. name="surname"
  63. id="surname"
  64. placeholder="Surname"
  65. data-msg="Please enter your surname"
  66. v-model="agent.surname"
  67. v-bind:class="{
  68. 'is-valid': agent.surname,
  69. 'is-invalid': !requiredField(agent.surname) && surnameLoad,
  70. }"
  71. v-on:keyup="surnameLoad = true"
  72. v-on:blur="surnameLoad = true"
  73. />
  74. <div class="invalid-feedback">Surname is Required!</div>
  75. </float-label>
  76. </div>
  77. <div class="form-group col-md-6">
  78. <float-label fixed label="Email">
  79. <input
  80. type="text"
  81. class="form-control uniInput"
  82. name="email"
  83. id="email"
  84. placeholder="Email Address"
  85. data-msg="Please enter your email address"
  86. v-model="agent.email"
  87. v-bind:class="{
  88. 'is-valid': agent.email && validEmail(agent.email),
  89. 'is-invalid': !validEmail(agent.email) && emailAddressLoad,
  90. }"
  91. v-on:keyup="emailAddressLoad = true"
  92. v-on:blur="emailAddressLoad = true"
  93. />
  94. <div class="invalid-feedback">
  95. Valid Email address is Required!
  96. </div>
  97. </float-label>
  98. </div>
  99. </div>
  100. <div class="row mt-4">
  101. <div class="form-group col-md-6">
  102. <float-label fixed label="Cell Number">
  103. <input
  104. type="text"
  105. name="cell"
  106. class="form-control uniInput"
  107. id="cell"
  108. placeholder="Cell Number"
  109. data-rule="minlen:4"
  110. data-msg="Please enter your cell number"
  111. v-model="agent.cellNumber"
  112. v-bind:class="{
  113. 'is-valid':
  114. agent.cellNumber && validPhoneNumber(agent.cellNumber),
  115. 'is-invalid':
  116. !requiredField(agent.cellNumber) ||
  117. (agent.cellNumber &&
  118. !validPhoneNumber(agent.cellNumber) &&
  119. cellNumberLoad),
  120. }"
  121. v-on:keyup="cellNumberLoad = true"
  122. v-on:blur="cellNumberLoad = true"
  123. />
  124. <div class="invalid-feedback">
  125. Valid Cell Number is Required!
  126. </div>
  127. </float-label>
  128. </div>
  129. <div class="form-group col-md-6">
  130. <float-label fixed label="Telephone Number">
  131. <input
  132. type="text"
  133. class="form-control uniInput"
  134. name="telephone"
  135. id="telephone"
  136. placeholder="Telephone Number"
  137. data-msg="Please enter your Telephone number"
  138. v-model="agent.telephone"
  139. v-bind:class="{
  140. 'is-valid':
  141. agent.telephone && validPhoneNumber(agent.telephone),
  142. 'is-invalid':
  143. agent.telephone && !validPhoneNumber(agent.telephone),
  144. }"
  145. />
  146. <div class="invalid-feedback">
  147. Valid telephone number is required!!
  148. </div>
  149. </float-label>
  150. </div>
  151. <div class="row mt-4">
  152. <div class="col-md-6">
  153. <float-label fixed label="Agency" style="width: 100%;">
  154. <select
  155. class="form-control uniSelect"
  156. v-model="agent.agencyId"
  157. v-bind:class="{
  158. 'is-valid': agent.agencyId,
  159. 'is-invalid':
  160. !requiredField(agent.agencyId) && inputAgencyLoad,
  161. }"
  162. v-on:keyup="inputAgencyLoad = true"
  163. v-on:blur="inputAgencyLoad = true"
  164. >
  165. <option value="">Private User</option>
  166. <option
  167. v-for="(item, i) in agencies"
  168. :key="i"
  169. :value="item.id"
  170. >
  171. {{ item.agencyName }}
  172. </option>
  173. </select>
  174. </float-label>
  175. </div>
  176. </div>
  177. <div v-if="pullUserRole === 'Super Admin'">
  178. <div class="row">
  179. <div class="col">
  180. <div class="section-header">
  181. <h2>Access Control</h2>
  182. </div>
  183. </div>
  184. </div>
  185. <div class="row">
  186. <div class="col-md-6">
  187. <float-label label="User Role" style="width: 100%;">
  188. <select
  189. class="form-control uniSelect"
  190. id="howMarried"
  191. v-model="agent.user.role"
  192. v-bind:class="{
  193. 'is-valid': agent.user.role,
  194. 'is-invalid':
  195. !requiredField(agent.user.role) && userRoleLoad,
  196. }"
  197. v-on:keyup="userRoleLoad = true"
  198. v-on:blur="userRoleLoad = true"
  199. >
  200. <option
  201. v-for="role in getRoles"
  202. :key="role.id"
  203. :value="role.roleName"
  204. >
  205. {{ role.roleName }}
  206. </option>
  207. </select>
  208. <div class="invalid-feedback">
  209. User Role is Required!
  210. </div>
  211. </float-label>
  212. </div>
  213. <div class="col-md-6">
  214. <input
  215. class="mr-2 mt-3"
  216. name="changePass"
  217. type="checkbox"
  218. v-model="agent.user.loginPasswordChange"
  219. />
  220. <label for="changePass">Change Password on Next Login</label>
  221. </div>
  222. </div>
  223. </div>
  224. <div class="row">
  225. <div v-if="boolMessage" class="row">
  226. <div class="col">
  227. <alert
  228. :text="'Your Information has been updated!'"
  229. :type="'SUCCESS'"
  230. />
  231. </div>
  232. </div>
  233. <div v-if="boolValidationError" class="row">
  234. <div class="col">
  235. <alert :text="errorMessage" :type="errorOccurred" />
  236. </div>
  237. </div>
  238. </div>
  239. <div class="row mt-5 mb-5">
  240. <div class="col">
  241. <button class="btn-white-border" @click="sendToApi()">
  242. Update
  243. </button>
  244. </div>
  245. <div class="col">
  246. <button class="btn-white-border" @click="$router.go(-1)">
  247. Cancel
  248. </button>
  249. </div>
  250. </div>
  251. </div>
  252. </div>
  253. </div>
  254. </section>
  255. </main>
  256. </template>
  257. <script>
  258. /* eslint-disable */
  259. import { mapState, mapActions, mapGetters } from 'vuex'
  260. import Log from '../../assets/Log'
  261. import Alert from '../shared/alert'
  262. export default {
  263. name: 'UpdateAgentProfile',
  264. components: {
  265. Alert,
  266. },
  267. data() {
  268. return {
  269. selectedItem: {},
  270. agent: {},
  271. errorOccurred: '',
  272. errorMessage: '',
  273. boolMessage: false,
  274. boolValidationError: false,
  275. usernameLoad: false,
  276. nameLoad: false,
  277. surnameLoad: false,
  278. emailAddressLoad: false,
  279. cellNumberLoad: false,
  280. telephoneNumberLoad: false,
  281. spouseEmailLoad: false,
  282. userRoleLoad: false,
  283. inputAgencyLoad: false,
  284. }
  285. },
  286. props: {},
  287. created() {
  288. this.retrieveUserRoles()
  289. this.getIndividual(Log.getUser().id).then(() => {
  290. if (this.$route.params.agent) {
  291. this.agent = this.$route.params.agent
  292. if (this.agent.address === null) {
  293. this.agent.address = {}
  294. }
  295. if (
  296. this.agent.user.role === 'Agent' ||
  297. this.agent.user.role === 'Agency' ||
  298. this.agent.user.role === 'Management Agent'
  299. ) {
  300. this.getAgentById(this.agent.userId)
  301. this.agent.agencyId = this.agent.agencyId
  302. }
  303. } else {
  304. this.agent = this.indiv
  305. this.agent.email = this.indiv.emailAddress
  306. this.agent.user = Log.getUser()
  307. }
  308. })
  309. this.getAgencies()
  310. this.selectedItem = this.currentUser
  311. },
  312. computed: {
  313. ...mapState('individual', ['indiv']),
  314. ...mapState('register', ['agencies']),
  315. ...mapGetters({
  316. user: 'authentication/getUser',
  317. person: 'authentication/getPerson',
  318. }),
  319. ...mapGetters('role', ['getRoles']),
  320. isLoggedIn() {
  321. return this.user && this.person
  322. },
  323. pullUserRole() {
  324. return Log.getUser().role
  325. },
  326. },
  327. methods: {
  328. ...mapActions('individual', ['getIndividual', 'updateIndividual']),
  329. ...mapActions('role', ['retrieveUserRoles']),
  330. ...mapActions('register', [
  331. 'getAgentById',
  332. 'getAgencies',
  333. 'saveAgent',
  334. 'updateAgent',
  335. ]),
  336. onSelectedItemItemChange(item) {
  337. this.currentUser = item
  338. },
  339. sendToApi() {
  340. this.boolError = false
  341. this.agent.fullName = this.agent.name + ' ' + this.agent.surname
  342. this.agent.emailAddress = this.agent.email
  343. if (this.validatePage()) {
  344. if (!this.boolValidationError) {
  345. if (
  346. this.agent.user.role === 'Agent' ||
  347. this.agent.user.role === 'Agency' ||
  348. this.agent.user.role === 'Managing Agent'
  349. ) {
  350. this.saveAgent(this.agent)
  351. .then(() => {
  352. this.boolMessage = true
  353. if (Log.getUser().role === 'Super Admin') {
  354. if (
  355. this.agent.id ===
  356. JSON.parse(localStorage.getItem('person')).id
  357. ) {
  358. var newPerson = {
  359. id: JSON.parse(localStorage.getItem('person')).id,
  360. email: this.agent.email,
  361. fullname: this.agent.name + ' ' + this.agent.surname,
  362. name: this.agent.name,
  363. surname: this.agent.surname,
  364. }
  365. localStorage.setItem('person', JSON.stringify(newPerson))
  366. this.$router.go()
  367. }
  368. //this.$router.push('/status/agentuserManagementPage')
  369. } else {
  370. var newPerson = {
  371. id: JSON.parse(localStorage.getItem('person')).id,
  372. email: this.agent.email,
  373. fullname: this.agent.name + ' ' + this.agent.surname,
  374. name: this.agent.name,
  375. surname: this.agent.surname,
  376. }
  377. localStorage.setItem('person', JSON.stringify(newPerson))
  378. this.$router.go()
  379. }
  380. })
  381. .catch((err) => {
  382. this.errorOccurred = 'ERROR'
  383. this.errorMessage = 'Server Error: CONNECTION_REFUSED'
  384. if (err.status) {
  385. if (err.data.message) {
  386. this.errorMessage = err.data.message
  387. } else {
  388. this.errorMessage = err
  389. }
  390. }
  391. })
  392. } else {
  393. this.updateAgent(this.agent).then(() => {
  394. this.boolMessage = true
  395. if (Log.getUser().role === 'Super Admin') {
  396. if (
  397. this.agent.id ===
  398. JSON.parse(localStorage.getItem('person')).id
  399. ) {
  400. var newPerson = {
  401. id: JSON.parse(localStorage.getItem('person')).id,
  402. email: this.agent.email,
  403. fullname: this.agent.name + ' ' + this.agent.surname,
  404. name: this.agent.name,
  405. surname: this.agent.surname,
  406. }
  407. localStorage.setItem('person', JSON.stringify(newPerson))
  408. //this.$router.go()
  409. }
  410. //this.$router.push('/status/userManagementPage')
  411. } else {
  412. var newPerson = {
  413. id: JSON.parse(localStorage.getItem('person')).id,
  414. email: this.agent.email,
  415. fullname: this.agent.name + ' ' + this.agent.surname,
  416. name: this.agent.name,
  417. surname: this.agent.surname,
  418. }
  419. localStorage.setItem('person', JSON.stringify(newPerson))
  420. //this.$router.go()
  421. }
  422. })
  423. }
  424. }
  425. }
  426. },
  427. requiredField: function (tfield) {
  428. if (tfield) {
  429. return true
  430. } else {
  431. return false
  432. }
  433. },
  434. validEmail: function (email) {
  435. var re = /(.+)@(.+){2,}\.(.+){2,}/
  436. if (email) {
  437. return re.test(email.toLowerCase())
  438. } else {
  439. return re.test(email)
  440. }
  441. },
  442. validPhoneNumber(number) {
  443. if (number) {
  444. const rx = /^\(?\d{3}\)?[-\s]?\d{3}[-\s]?\d{4}$/
  445. // const rx = /^[\+]?[(]?[0-9]{3}[)]?[-\s\.]?[0-9]{3}[-\s\.]?[0-9]{4,6}$/im
  446. return rx.test(String(number))
  447. } else {
  448. return true
  449. }
  450. },
  451. validatePage: function () {
  452. if (
  453. this.agent.name &&
  454. this.agent.surname &&
  455. this.agent.emailAddress &&
  456. this.agent.cellNumber &&
  457. this.agent.user.role &&
  458. this.validEmail(this.agent.emailAddress) &&
  459. this.validPhoneNumber(this.agent.cellNumber) &&
  460. this.validPhoneNumber(this.agent.telephone)
  461. ) {
  462. this.errorOccurred = ''
  463. this.errorMessage = ''
  464. this.boolValidationError = false
  465. return true
  466. } else {
  467. this.nameLoad = true
  468. this.surnameLoad = true
  469. this.emailAddressLoadLoad = true
  470. this.cellNumberLoad = true
  471. this.telephoneLoad = true
  472. this.userRoleLoad = true
  473. this.boolValidationError = true
  474. this.errorOccurred = 'ERROR'
  475. this.errorMessage = 'Please check form and correct all input fields!'
  476. return false
  477. }
  478. },
  479. },
  480. }
  481. </script>
  482. <style lang="scss" scoped></style>