├── .gitattributes ├── .gitignore ├── .mvn └── wrapper │ ├── maven-wrapper.jar │ └── maven-wrapper.properties ├── README.md ├── mvnw ├── mvnw.cmd ├── pom.xml └── src ├── main ├── java │ └── site │ │ └── easy │ │ └── to │ │ └── build │ │ └── crm │ │ ├── CrmApplication.java │ │ ├── config │ │ ├── CrmUserDetails.java │ │ ├── CustomAccessDeniedHandler.java │ │ ├── CustomerUserDetails.java │ │ ├── RestTemplateConfig.java │ │ ├── SecurityConfig.java │ │ ├── init │ │ │ └── OAuth2ClientIdInitializer.java │ │ └── oauth2 │ │ │ ├── CustomOAuth2User.java │ │ │ ├── CustomOAuth2UserService.java │ │ │ └── OAuthLoginSuccessHandler.java │ │ ├── controller │ │ ├── AccountConnectionController.java │ │ ├── ContractController.java │ │ ├── CustomErrorController.java │ │ ├── CustomerController.java │ │ ├── CustomerEmailSettingController.java │ │ ├── CustomerLoginController.java │ │ ├── CustomerProfileController.java │ │ ├── EmailSettingsController.java │ │ ├── EmailTemplatesController.java │ │ ├── GlobalController.java │ │ ├── GlobalControllerAdvice.java │ │ ├── GoogleSettingsController.java │ │ ├── HomePageController.java │ │ ├── LeadController.java │ │ ├── LoginController.java │ │ ├── LogoutController.java │ │ ├── ManagerController.java │ │ ├── RegisterController.java │ │ ├── TicketController.java │ │ ├── UrlAccessController.java │ │ └── UserProfileController.java │ │ ├── converter │ │ └── StringSetConverter.java │ │ ├── cron │ │ └── ContractExpirationChecker.java │ │ ├── customValidations │ │ ├── EndTimeAfterStartTime.java │ │ ├── EndTimeAfterStartTimeValidator.java │ │ ├── FutureDate.java │ │ ├── FutureDateValidator.java │ │ ├── SameDay.java │ │ ├── SameDayValidator.java │ │ ├── contract │ │ │ ├── StartDateBeforeEndDate.java │ │ │ └── StartDateBeforeEndDateValidator.java │ │ ├── customer │ │ │ ├── UniqueEmail.java │ │ │ └── UniqueEmailValidator.java │ │ └── user │ │ │ ├── UniqueEmail.java │ │ │ ├── UniqueEmailValidator.java │ │ │ ├── UniqueUsername.java │ │ │ └── UniqueUsernameValidator.java │ │ ├── entity │ │ ├── Contract.java │ │ ├── Customer.java │ │ ├── CustomerLoginInfo.java │ │ ├── EmailTemplate.java │ │ ├── File.java │ │ ├── GoogleDriveFile.java │ │ ├── Lead.java │ │ ├── LeadAction.java │ │ ├── OAuthUser.java │ │ ├── Role.java │ │ ├── Ticket.java │ │ ├── User.java │ │ ├── UserProfile.java │ │ ├── WeatherData.java │ │ └── settings │ │ │ ├── ContractEmailSettings.java │ │ │ ├── EmailSettings.java │ │ │ ├── LeadEmailSettings.java │ │ │ └── TicketEmailSettings.java │ │ ├── google │ │ ├── config │ │ │ ├── GoogleApiConfig.java │ │ │ ├── GoogleApiProperties.java │ │ │ └── GoogleAuthorizationCodeFlowWrapper.java │ │ ├── controller │ │ │ ├── GoogleCalendarController.java │ │ │ ├── GoogleDriveController.java │ │ │ └── GoogleGmailController.java │ │ ├── dao │ │ │ └── EventDateTime.java │ │ ├── model │ │ │ ├── calendar │ │ │ │ ├── AppointmentSlot.java │ │ │ │ ├── Event.java │ │ │ │ ├── EventAttendee.java │ │ │ │ ├── EventDateTime.java │ │ │ │ ├── EventDisplay.java │ │ │ │ ├── EventDisplayList.java │ │ │ │ └── EventList.java │ │ │ ├── drive │ │ │ │ ├── GoogleDriveFile.java │ │ │ │ └── GoogleDriveFolder.java │ │ │ └── gmail │ │ │ │ ├── Attachment.java │ │ │ │ ├── Body.java │ │ │ │ ├── CustomHeader.java │ │ │ │ ├── EmailPage.java │ │ │ │ ├── GmailApiMessage.java │ │ │ │ ├── GmailEmailInfo.java │ │ │ │ ├── GoogleGmailEmail.java │ │ │ │ ├── Part.java │ │ │ │ └── Payload.java │ │ ├── service │ │ │ ├── GoogleCalendarApiService.java │ │ │ ├── GoogleCalendarApiServiceImpl.java │ │ │ ├── acess │ │ │ │ ├── GoogleAccessService.java │ │ │ │ └── GoogleAccessServiceImpl.java │ │ │ ├── calendar │ │ │ │ ├── GoogleCalendarApiService.java │ │ │ │ └── GoogleCalendarApiServiceImpl.java │ │ │ ├── drive │ │ │ │ ├── GoogleDriveApiService.java │ │ │ │ └── GoogleDriveApiServiceImpl.java │ │ │ └── gmail │ │ │ │ ├── GmailEmailService.java │ │ │ │ ├── GoogleGmailApiService.java │ │ │ │ ├── GoogleGmailApiServiceImpl.java │ │ │ │ ├── GoogleGmailLabelService.java │ │ │ │ └── GoogleGmailLabelServiceImpl.java │ │ └── util │ │ │ ├── GoogleApiHelper.java │ │ │ ├── GsonUtil.java │ │ │ ├── PageTokenManager.java │ │ │ ├── StringSetWrapper.java │ │ │ ├── TimeDateUtil.java │ │ │ └── TimeZoneLabel.java │ │ ├── repository │ │ ├── ContractRepository.java │ │ ├── CustomerLoginInfoRepository.java │ │ ├── CustomerRepository.java │ │ ├── EmailTemplateRepository.java │ │ ├── FileRepository.java │ │ ├── GoogleDriveFileRepository.java │ │ ├── LeadActionRepository.java │ │ ├── LeadRepository.java │ │ ├── OAuthUserRepository.java │ │ ├── RoleRepository.java │ │ ├── TicketRepository.java │ │ ├── UserProfileRepository.java │ │ ├── UserRepository.java │ │ └── settings │ │ │ ├── ContractEmailSettingsRepository.java │ │ │ ├── LeadEmailSettingsRepository.java │ │ │ └── TicketEmailSettingsRepository.java │ │ ├── service │ │ ├── contract │ │ │ ├── ContractService.java │ │ │ └── ContractServiceImpl.java │ │ ├── customer │ │ │ ├── CustomerLoginInfoService.java │ │ │ ├── CustomerLoginInfoServiceImpl.java │ │ │ ├── CustomerService.java │ │ │ └── CustomerServiceImpl.java │ │ ├── drive │ │ │ ├── GoogleDriveFileService.java │ │ │ └── GoogleDriveFileServiceImpl.java │ │ ├── email │ │ │ ├── EmailTemplateService.java │ │ │ └── EmailTemplateServiceImpl.java │ │ ├── file │ │ │ ├── FileService.java │ │ │ └── FileServiceImpl.java │ │ ├── lead │ │ │ ├── LeadActionService.java │ │ │ ├── LeadActionServiceImpl.java │ │ │ ├── LeadService.java │ │ │ └── LeadServiceImpl.java │ │ ├── role │ │ │ ├── RoleService.java │ │ │ └── RoleServiceImpl.java │ │ ├── settings │ │ │ ├── ContractEmailSettingsService.java │ │ │ ├── LeadEmailSettingsService.java │ │ │ └── TicketEmailSettingsService.java │ │ ├── ticket │ │ │ ├── TicketService.java │ │ │ └── TicketServiceImpl.java │ │ ├── user │ │ │ ├── OAuthUserService.java │ │ │ ├── OAuthUserServiceImpl.java │ │ │ ├── UserProfileService.java │ │ │ ├── UserProfileServiceImpl.java │ │ │ ├── UserService.java │ │ │ └── UserServiceImpl.java │ │ └── weather │ │ │ └── WeatherService.java │ │ └── util │ │ ├── AuthenticationUtils.java │ │ ├── AuthorizationUtil.java │ │ ├── DatabaseUtil.java │ │ ├── DateUtil.java │ │ ├── EmailTokenUtils.java │ │ ├── FileUtil.java │ │ ├── LogEntityChanges.java │ │ ├── SessionUtils.java │ │ ├── StringUtils.java │ │ └── TomcatWebAppValidator.java └── resources │ ├── META-INF │ └── spring.factories │ ├── application.properties │ ├── schema.sql │ ├── static │ ├── css │ │ ├── all.css │ │ ├── bootstrap-datepicker.min.css │ │ ├── bootstrap-material-datetimepicker.css │ │ ├── bootstrap-wysihtml5.css │ │ ├── bootstrap.min.css │ │ ├── dashboard4.css │ │ ├── dataTables.bootstrap4.css │ │ ├── dropzone.css │ │ ├── form-icheck.css │ │ ├── fullcalendar.css │ │ ├── jquery-clockpicker.min.css │ │ ├── jquery.toast.css │ │ ├── jsgrid-theme.min.css │ │ ├── jsgrid.min.css │ │ ├── login-register-lock.css │ │ ├── morris.css │ │ ├── pages │ │ │ ├── error-pages.css │ │ │ └── inbox.css │ │ ├── responsive.dataTables.min.css │ │ ├── ribbon-page.css │ │ ├── style.min.css │ │ ├── tagify.css │ │ └── wysiwyg-color.css │ ├── flag-icon-css │ │ ├── flag-icon.min.css │ │ └── flags │ │ │ ├── ad.svg │ │ │ ├── ae.svg │ │ │ ├── af.svg │ │ │ ├── ag.svg │ │ │ ├── ai.svg │ │ │ ├── al.svg │ │ │ ├── am.svg │ │ │ ├── ao.svg │ │ │ ├── aq.svg │ │ │ ├── ar.svg │ │ │ ├── as.svg │ │ │ ├── at.svg │ │ │ ├── au.svg │ │ │ ├── aw.svg │ │ │ ├── ax.svg │ │ │ ├── az.svg │ │ │ ├── ba.svg │ │ │ ├── bb.svg │ │ │ ├── bd.svg │ │ │ ├── be.svg │ │ │ ├── bf.svg │ │ │ ├── bg.svg │ │ │ ├── bh.svg │ │ │ ├── bi.svg │ │ │ ├── bj.svg │ │ │ ├── bl.svg │ │ │ ├── bm.svg │ │ │ ├── bn.svg │ │ │ ├── bo.svg │ │ │ ├── bq.svg │ │ │ ├── br.svg │ │ │ ├── bs.svg │ │ │ ├── bt.svg │ │ │ ├── bv.svg │ │ │ ├── bw.svg │ │ │ ├── by.svg │ │ │ ├── bz.svg │ │ │ ├── ca.svg │ │ │ ├── cc.svg │ │ │ ├── cd.svg │ │ │ ├── cf.svg │ │ │ ├── cg.svg │ │ │ ├── ch.svg │ │ │ ├── ci.svg │ │ │ ├── ck.svg │ │ │ ├── cl.svg │ │ │ ├── cm.svg │ │ │ ├── cn.svg │ │ │ ├── co.svg │ │ │ ├── cr.svg │ │ │ ├── cu.svg │ │ │ ├── cv.svg │ │ │ ├── cw.svg │ │ │ ├── cx.svg │ │ │ ├── cy.svg │ │ │ ├── cz.svg │ │ │ ├── de.svg │ │ │ ├── dj.svg │ │ │ ├── dk.svg │ │ │ ├── dm.svg │ │ │ ├── do.svg │ │ │ ├── dz.svg │ │ │ ├── ec.svg │ │ │ ├── ee.svg │ │ │ ├── eg.svg │ │ │ ├── eh.svg │ │ │ ├── er.svg │ │ │ ├── es.svg │ │ │ ├── et.svg │ │ │ ├── fi.svg │ │ │ ├── fj.svg │ │ │ ├── fk.svg │ │ │ ├── fm.svg │ │ │ ├── fo.svg │ │ │ ├── fr.svg │ │ │ ├── ga.svg │ │ │ ├── gb.svg │ │ │ ├── gd.svg │ │ │ ├── ge.svg │ │ │ ├── gf.svg │ │ │ ├── gg.svg │ │ │ ├── gh.svg │ │ │ ├── gi.svg │ │ │ ├── gl.svg │ │ │ ├── gm.svg │ │ │ ├── gn.svg │ │ │ ├── gp.svg │ │ │ ├── gq.svg │ │ │ ├── gr.svg │ │ │ ├── gs.svg │ │ │ ├── gt.svg │ │ │ ├── gu.svg │ │ │ ├── gw.svg │ │ │ ├── gy.svg │ │ │ ├── hk.svg │ │ │ ├── hm.svg │ │ │ ├── hn.svg │ │ │ ├── hr.svg │ │ │ ├── ht.svg │ │ │ ├── hu.svg │ │ │ ├── id.svg │ │ │ ├── ie.svg │ │ │ ├── il.svg │ │ │ ├── im.svg │ │ │ ├── in.svg │ │ │ ├── io.svg │ │ │ ├── iq.svg │ │ │ ├── ir.svg │ │ │ ├── is.svg │ │ │ ├── it.svg │ │ │ ├── je.svg │ │ │ ├── jm.svg │ │ │ ├── jo.svg │ │ │ ├── jp.svg │ │ │ ├── ke.svg │ │ │ ├── kg.svg │ │ │ ├── kh.svg │ │ │ ├── ki.svg │ │ │ ├── km.svg │ │ │ ├── kn.svg │ │ │ ├── kp.svg │ │ │ ├── kr.svg │ │ │ ├── kw.svg │ │ │ ├── ky.svg │ │ │ ├── kz.svg │ │ │ ├── la.svg │ │ │ ├── lb.svg │ │ │ ├── lc.svg │ │ │ ├── li.svg │ │ │ ├── lk.svg │ │ │ ├── lr.svg │ │ │ ├── ls.svg │ │ │ ├── lt.svg │ │ │ ├── lu.svg │ │ │ ├── lv.svg │ │ │ ├── ly.svg │ │ │ ├── ma.svg │ │ │ ├── mc.svg │ │ │ ├── md.svg │ │ │ ├── me.svg │ │ │ ├── mf.svg │ │ │ ├── mg.svg │ │ │ ├── mh.svg │ │ │ ├── mk.svg │ │ │ ├── ml.svg │ │ │ ├── mm.svg │ │ │ ├── mn.svg │ │ │ ├── mo.svg │ │ │ ├── mp.svg │ │ │ ├── mq.svg │ │ │ ├── mr.svg │ │ │ ├── ms.svg │ │ │ ├── mt.svg │ │ │ ├── mu.svg │ │ │ ├── mv.svg │ │ │ ├── mw.svg │ │ │ ├── mx.svg │ │ │ ├── my.svg │ │ │ ├── mz.svg │ │ │ ├── na.svg │ │ │ ├── nc.svg │ │ │ ├── ne.svg │ │ │ ├── nf.svg │ │ │ ├── ng.svg │ │ │ ├── ni.svg │ │ │ ├── nl.svg │ │ │ ├── no.svg │ │ │ ├── np.svg │ │ │ ├── nr.svg │ │ │ ├── nu.svg │ │ │ ├── nz.svg │ │ │ ├── om.svg │ │ │ ├── pa.svg │ │ │ ├── pe.svg │ │ │ ├── pf.svg │ │ │ ├── pg.svg │ │ │ ├── ph.svg │ │ │ ├── pk.svg │ │ │ ├── pl.svg │ │ │ ├── pm.svg │ │ │ ├── pn.svg │ │ │ ├── pr.svg │ │ │ ├── ps.svg │ │ │ ├── pt.svg │ │ │ ├── pw.svg │ │ │ ├── py.svg │ │ │ ├── qa.svg │ │ │ ├── re.svg │ │ │ ├── ro.svg │ │ │ ├── rs.svg │ │ │ ├── ru.svg │ │ │ ├── rw.svg │ │ │ ├── sa.svg │ │ │ ├── sb.svg │ │ │ ├── sc.svg │ │ │ ├── sd.svg │ │ │ ├── se.svg │ │ │ ├── sg.svg │ │ │ ├── sh.svg │ │ │ ├── si.svg │ │ │ ├── sj.svg │ │ │ ├── sk.svg │ │ │ ├── sl.svg │ │ │ ├── sm.svg │ │ │ ├── sn.svg │ │ │ ├── so.svg │ │ │ ├── sr.svg │ │ │ ├── ss.svg │ │ │ ├── st.svg │ │ │ ├── sv.svg │ │ │ ├── sx.svg │ │ │ ├── sy.svg │ │ │ ├── sz.svg │ │ │ ├── tc.svg │ │ │ ├── td.svg │ │ │ ├── tf.svg │ │ │ ├── tg.svg │ │ │ ├── th.svg │ │ │ ├── tj.svg │ │ │ ├── tk.svg │ │ │ ├── tl.svg │ │ │ ├── tm.svg │ │ │ ├── tn.svg │ │ │ ├── to.svg │ │ │ ├── tr.svg │ │ │ ├── tt.svg │ │ │ ├── tv.svg │ │ │ ├── tw.svg │ │ │ ├── tz.svg │ │ │ ├── ua.svg │ │ │ ├── ug.svg │ │ │ ├── um.svg │ │ │ ├── us.svg │ │ │ ├── uy.svg │ │ │ ├── uz.svg │ │ │ ├── va.svg │ │ │ ├── vc.svg │ │ │ ├── ve.svg │ │ │ ├── vg.svg │ │ │ ├── vi.svg │ │ │ ├── vn.svg │ │ │ ├── vu.svg │ │ │ ├── wf.svg │ │ │ ├── ws.svg │ │ │ ├── ye.svg │ │ │ ├── yt.svg │ │ │ ├── za.svg │ │ │ ├── zm.svg │ │ │ └── zw.svg │ ├── flat │ │ ├── _all.css │ │ ├── aero.css │ │ ├── aero.png │ │ ├── aero@2x.png │ │ ├── blue.css │ │ ├── blue.png │ │ ├── blue@2x.png │ │ ├── flat.css │ │ ├── flat.png │ │ ├── flat@2x.png │ │ ├── green.css │ │ ├── green.png │ │ ├── green@2x.png │ │ ├── grey.css │ │ ├── grey.png │ │ ├── grey@2x.png │ │ ├── orange.css │ │ ├── orange.png │ │ ├── orange@2x.png │ │ ├── pink.css │ │ ├── pink.png │ │ ├── pink@2x.png │ │ ├── purple.css │ │ ├── purple.png │ │ ├── purple@2x.png │ │ ├── red.css │ │ ├── red.png │ │ ├── red@2x.png │ │ ├── yellow.css │ │ ├── yellow.png │ │ └── yellow@2x.png │ ├── font-awesome │ │ ├── css │ │ │ ├── all.css │ │ │ ├── all.min.css │ │ │ ├── brands.css │ │ │ ├── brands.min.css │ │ │ ├── fontawesome.css │ │ │ ├── fontawesome.min.css │ │ │ ├── regular.css │ │ │ ├── regular.min.css │ │ │ ├── solid.css │ │ │ ├── solid.min.css │ │ │ ├── svg-with-js.css │ │ │ ├── svg-with-js.min.css │ │ │ ├── v4-shims.css │ │ │ └── v4-shims.min.css │ │ ├── less │ │ │ ├── _animated.less │ │ │ ├── _bordered-pulled.less │ │ │ ├── _core.less │ │ │ ├── _fixed-width.less │ │ │ ├── _icons.less │ │ │ ├── _larger.less │ │ │ ├── _list.less │ │ │ ├── _mixins.less │ │ │ ├── _rotated-flipped.less │ │ │ ├── _screen-reader.less │ │ │ ├── _shims.less │ │ │ ├── _stacked.less │ │ │ ├── _variables.less │ │ │ ├── brands.less │ │ │ ├── fontawesome.less │ │ │ ├── regular.less │ │ │ ├── solid.less │ │ │ └── v4-shims.less │ │ ├── scss │ │ │ ├── _animated.scss │ │ │ ├── _bordered-pulled.scss │ │ │ ├── _core.scss │ │ │ ├── _fixed-width.scss │ │ │ ├── _icons.scss │ │ │ ├── _larger.scss │ │ │ ├── _list.scss │ │ │ ├── _mixins.scss │ │ │ ├── _rotated-flipped.scss │ │ │ ├── _screen-reader.scss │ │ │ ├── _shims.scss │ │ │ ├── _stacked.scss │ │ │ ├── _variables.scss │ │ │ ├── brands.scss │ │ │ ├── fontawesome.scss │ │ │ ├── regular.scss │ │ │ ├── solid.scss │ │ │ └── v4-shims.scss │ │ └── webfonts │ │ │ ├── fa-brands-400.eot │ │ │ ├── fa-brands-400.svg │ │ │ ├── fa-brands-400.ttf │ │ │ ├── fa-brands-400.woff │ │ │ ├── fa-brands-400.woff2 │ │ │ ├── fa-regular-400.eot │ │ │ ├── fa-regular-400.svg │ │ │ ├── fa-regular-400.ttf │ │ │ ├── fa-regular-400.woff │ │ │ ├── fa-regular-400.woff2 │ │ │ ├── fa-solid-900.eot │ │ │ ├── fa-solid-900.svg │ │ │ ├── fa-solid-900.ttf │ │ │ ├── fa-solid-900.woff │ │ │ └── fa-solid-900.woff2 │ ├── fonts │ │ ├── Material-Design-Iconic-Font.eot │ │ ├── Material-Design-Iconic-Font.svg │ │ ├── Material-Design-Iconic-Font.ttf │ │ ├── Material-Design-Iconic-Font.woff │ │ ├── Material-Design-Iconic-Font.woff2 │ │ ├── Simple-Line-Icons.eot │ │ ├── Simple-Line-Icons.svg │ │ ├── Simple-Line-Icons.ttf │ │ ├── Simple-Line-Icons.woff │ │ ├── Simple-Line-Icons.woff2 │ │ ├── cryptocoins-colors.css │ │ ├── cryptocoins.css │ │ ├── cryptocoins.ttf │ │ ├── cryptocoins.woff │ │ ├── cryptocoins.woff2 │ │ ├── fontawesome-webfont.ttf │ │ ├── icomoon.eot │ │ ├── icomoon.svg │ │ ├── icomoon.ttf │ │ ├── icomoon.woff │ │ ├── materialdesignicons-webfont.eot │ │ ├── materialdesignicons-webfont.svg │ │ ├── materialdesignicons-webfont.ttf │ │ ├── materialdesignicons-webfont.woff │ │ ├── materialdesignicons-webfont.woff2 │ │ ├── themify.eot │ │ ├── themify.svg │ │ ├── themify.ttf │ │ ├── themify.woff │ │ ├── weathericons-regular-webfont.eot │ │ ├── weathericons-regular-webfont.svg │ │ ├── weathericons-regular-webfont.ttf │ │ ├── weathericons-regular-webfont.woff │ │ └── weathericons-regular-webfont.woff2 │ ├── futurico │ │ ├── futurico.css │ │ ├── futurico.png │ │ └── futurico@2x.png │ ├── images │ │ ├── 1.jpg │ │ ├── 2.jpg │ │ ├── 3.jpg │ │ ├── 4.jpg │ │ ├── 5.jpg │ │ ├── 6.jpg │ │ ├── 7.jpg │ │ ├── 8.jpg │ │ ├── dots.png │ │ ├── error-bg.jpg │ │ ├── favicon.png │ │ ├── folder.png │ │ ├── google-docs.png │ │ ├── google.png │ │ ├── img1.jpg │ │ ├── img2.jpg │ │ ├── img3.jpg │ │ ├── img4.jpg │ │ ├── img5.jpg │ │ ├── img6.jpg │ │ ├── login-register.jpg │ │ ├── logo-icon.png │ │ ├── logo-light-icon.png │ │ ├── logo-light-text.png │ │ ├── logo-text.png │ │ ├── pp.png │ │ ├── sheets.png │ │ └── slides.png │ ├── js │ │ ├── cal-init.js │ │ ├── custom-dropzone.js │ │ ├── custom-email-template.js │ │ ├── custom-unlayer.js │ │ ├── custom.js │ │ ├── dashboard4.js │ │ ├── db.js │ │ ├── drive.js │ │ ├── general-dropzone.js │ │ └── library │ │ │ ├── bootstrap-datepicker.min.js │ │ │ ├── bootstrap-material-datetimepicker.js │ │ │ ├── bootstrap-wysihtml5.js │ │ │ ├── bootstrap.js │ │ │ ├── bootstrap.min.js │ │ │ ├── bootstrap.min.js.map │ │ │ ├── custom.min.js │ │ │ ├── dataTables.responsive.min.js │ │ │ ├── dff.js │ │ │ ├── dropzone.js │ │ │ ├── fullcalendar.min.js │ │ │ ├── icheck.init.js │ │ │ ├── icheck.min.js │ │ │ ├── jquery-3.2.1.min.js │ │ │ ├── jquery-clockpicker.min.js │ │ │ ├── jquery-ui.min.js │ │ │ ├── jquery.dataTables.min.js │ │ │ ├── jquery.sparkline.min.js │ │ │ ├── jquery.toast.js │ │ │ ├── jsgrid-init.js │ │ │ ├── jsgrid.min.js │ │ │ ├── moment.js │ │ │ ├── morris.min.js │ │ │ ├── perfect-scrollbar.jquery.min.js │ │ │ ├── popper.min.js │ │ │ ├── raphael-min.js │ │ │ ├── sidebarmenu.js │ │ │ ├── skycons.js │ │ │ ├── sticky-kit.min.js │ │ │ ├── tagify.min.js │ │ │ ├── tagify.polyfills.min.js │ │ │ ├── waves.js │ │ │ └── wysihtml5-0.3.0.js │ ├── line │ │ ├── _all.css │ │ ├── aero.css │ │ ├── blue.css │ │ ├── green.css │ │ ├── grey.css │ │ ├── line.css │ │ ├── line.png │ │ ├── line@2x.png │ │ ├── orange.css │ │ ├── pink.css │ │ ├── purple.css │ │ ├── red.css │ │ └── yellow.css │ ├── minimal │ │ ├── _all.css │ │ ├── aero.css │ │ ├── aero.png │ │ ├── aero@2x.png │ │ ├── blue.css │ │ ├── blue.png │ │ ├── blue@2x.png │ │ ├── green.css │ │ ├── green.png │ │ ├── green@2x.png │ │ ├── grey.css │ │ ├── grey.png │ │ ├── grey@2x.png │ │ ├── minimal.css │ │ ├── minimal.png │ │ ├── minimal@2x.png │ │ ├── orange.css │ │ ├── orange.png │ │ ├── orange@2x.png │ │ ├── pink.css │ │ ├── pink.png │ │ ├── pink@2x.png │ │ ├── purple.css │ │ ├── purple.png │ │ ├── purple@2x.png │ │ ├── red.css │ │ ├── red.png │ │ ├── red@2x.png │ │ ├── yellow.css │ │ ├── yellow.png │ │ └── yellow@2x.png │ ├── polaris │ │ ├── polaris.css │ │ ├── polaris.png │ │ └── polaris@2x.png │ └── square │ │ ├── _all.css │ │ ├── aero.css │ │ ├── aero.png │ │ ├── aero@2x.png │ │ ├── blue.css │ │ ├── blue.png │ │ ├── blue@2x.png │ │ ├── green.css │ │ ├── green.png │ │ ├── green@2x.png │ │ ├── grey.css │ │ ├── grey.png │ │ ├── grey@2x.png │ │ ├── orange.css │ │ ├── orange.png │ │ ├── orange@2x.png │ │ ├── pink.css │ │ ├── pink.png │ │ ├── pink@2x.png │ │ ├── purple.css │ │ ├── purple.png │ │ ├── purple@2x.png │ │ ├── red.css │ │ ├── red.png │ │ ├── red@2x.png │ │ ├── square.css │ │ ├── square.png │ │ ├── square@2x.png │ │ ├── yellow.css │ │ ├── yellow.png │ │ └── yellow@2x.png │ └── templates │ ├── calendar │ ├── calendar.html │ └── event-form.html │ ├── change-password.html │ ├── coming-soon.html │ ├── connect-accounts.html │ ├── contract │ ├── contracts.html │ ├── create.html │ ├── show-details.html │ └── update.html │ ├── customer-dashboard.html │ ├── customer-info │ ├── contract-detail.html │ ├── lead-detail.html │ ├── my-contracts.html │ ├── my-leads.html │ ├── my-tickets.html │ └── ticket-detail.html │ ├── customer-login.html │ ├── customer-profile.html │ ├── customer │ ├── all-customers.html │ ├── create-customer.html │ ├── customer-details.html │ ├── register-customer.html │ └── update-customer.html │ ├── email-template │ ├── create-template.html │ ├── email-tags.html │ ├── show-all.html │ ├── show-tags.html │ ├── show-template.html │ └── update-template.html │ ├── error │ ├── 400.html │ ├── 500.html │ ├── 503.html │ ├── access-denied.html │ ├── account-inactive.html │ ├── account-suspended.html │ ├── error.html │ └── not-found.html │ ├── general │ ├── footer.html │ ├── head.html │ ├── header.html │ ├── left-sidebar.html │ ├── page-titles.html │ └── right-sidebar.html │ ├── gmail │ ├── email-details.html │ ├── email-form-draft.html │ ├── email-form.html │ ├── emails-label.html │ ├── emails.html │ ├── error.html │ └── template │ │ ├── filter-menu.html │ │ └── side-bar-labels.html │ ├── google-drive │ ├── create-file.html │ ├── create-folder.html │ ├── list-files-in-folder.html │ └── list-files.html │ ├── google-error.html │ ├── google-settings.html │ ├── index.html │ ├── lead │ ├── create-lead.html │ ├── show-details.html │ ├── show-my-leads.html │ └── update-lead.html │ ├── login.html │ ├── logout.html │ ├── manager │ ├── all-users.html │ ├── register-user.html │ ├── show-user.html │ └── update-user.html │ ├── profile.html │ ├── register.html │ ├── set-employee-password.html │ ├── set-password.html │ ├── settings │ ├── customer-email.html │ └── email.html │ ├── ticket │ ├── create-ticket.html │ ├── my-tickets.html │ ├── show-ticket.html │ └── update-ticket.html │ └── url │ └── all.html └── test └── java └── site └── easy └── to └── build └── crm └── CrmApplicationTests.java /.gitattributes: -------------------------------------------------------------------------------- 1 | * linguist-detectable=true 2 | *.svg linguist-vendored 3 | *.html linguist-vendored 4 | *.css linguist-vendored 5 | /src/main/resources/static/js/library/*.js linguist-vendored 6 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | HELP.md 2 | target/ 3 | !.mvn/wrapper/maven-wrapper.jar 4 | !**/src/main/**/target/ 5 | !**/src/test/**/target/ 6 | 7 | ### STS ### 8 | .apt_generated 9 | .classpath 10 | .factorypath 11 | .project 12 | .settings 13 | .springBeans 14 | .sts4-cache 15 | 16 | ### IntelliJ IDEA ### 17 | .idea 18 | *.iws 19 | *.iml 20 | *.ipr 21 | 22 | ### NetBeans ### 23 | /nbproject/private/ 24 | /nbbuild/ 25 | /dist/ 26 | /nbdist/ 27 | /.nb-gradle/ 28 | build/ 29 | !**/src/main/**/build/ 30 | !**/src/test/**/build/ 31 | 32 | ### VS Code ### 33 | .vscode/ 34 | -------------------------------------------------------------------------------- /.mvn/wrapper/maven-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/.mvn/wrapper/maven-wrapper.jar -------------------------------------------------------------------------------- /.mvn/wrapper/maven-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.2/apache-maven-3.9.2-bin.zip 2 | wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar 3 | -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/CrmApplication.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm; 2 | // 3 | //import org.springframework.boot.SpringApplication; 4 | //import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | // 6 | //@SpringBootApplication 7 | //public class CrmApplication { 8 | // 9 | // public static void main(String[] args) { 10 | // SpringApplication.run(CrmApplication.class, args); 11 | // } 12 | // 13 | //} 14 | 15 | import org.springframework.boot.SpringApplication; 16 | import org.springframework.boot.autoconfigure.SpringBootApplication; 17 | import org.springframework.boot.builder.SpringApplicationBuilder; 18 | import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; 19 | 20 | @SpringBootApplication 21 | public class CrmApplication extends SpringBootServletInitializer { 22 | 23 | @Override 24 | protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 25 | return application.sources(CrmApplication.class); 26 | } 27 | 28 | public static void main(String[] args) { 29 | SpringApplication.run(CrmApplication.class, args); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/config/CustomAccessDeniedHandler.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.config; 2 | 3 | import jakarta.servlet.http.HttpServletRequest; 4 | import jakarta.servlet.http.HttpServletResponse; 5 | import org.springframework.security.access.AccessDeniedException; 6 | import org.springframework.security.web.access.AccessDeniedHandler; 7 | 8 | import java.io.IOException; 9 | 10 | public class CustomAccessDeniedHandler implements AccessDeniedHandler { 11 | @Override 12 | public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException accessDeniedException) throws IOException { 13 | response.sendRedirect("/access-denied"); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/config/RestTemplateConfig.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.config; 2 | 3 | import org.springframework.context.annotation.Bean; 4 | import org.springframework.context.annotation.Configuration; 5 | import org.springframework.web.client.RestTemplate; 6 | 7 | @Configuration 8 | public class RestTemplateConfig { 9 | @Bean 10 | public RestTemplate restTemplate() { 11 | return new RestTemplate(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/controller/GlobalController.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.controller; 2 | 3 | import org.springframework.stereotype.Controller; 4 | import org.springframework.web.bind.annotation.GetMapping; 5 | 6 | @Controller 7 | public class GlobalController { 8 | @GetMapping("/coming-soon") 9 | public String comingSoon(){ 10 | return "coming-soon"; 11 | } 12 | 13 | @GetMapping("/google-error") 14 | public String unauthorizedGoogleErrorPage(){ 15 | return "google-error"; 16 | } 17 | 18 | @GetMapping("/not-found") 19 | public String notFound(){ 20 | return "error/not-found"; 21 | } 22 | 23 | @GetMapping("/access-denied") 24 | public String accessDenied() { 25 | return "error/access-denied"; 26 | } 27 | 28 | @GetMapping("/account-inactive") 29 | public String accountInactive() { 30 | return "error/account-inactive"; 31 | } 32 | 33 | @GetMapping("/account-suspended") 34 | public String accountSuspended() { 35 | return "error/account-suspended"; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/controller/GlobalControllerAdvice.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.controller; 2 | 3 | import jakarta.servlet.http.HttpServletRequest; 4 | import org.springframework.ui.Model; 5 | import org.springframework.web.bind.annotation.ControllerAdvice; 6 | import org.springframework.web.bind.annotation.ModelAttribute; 7 | 8 | @ControllerAdvice 9 | public class GlobalControllerAdvice { 10 | 11 | @ModelAttribute 12 | public void addGlobalAttributes(Model model, HttpServletRequest request) { 13 | String homeLink = request.getContextPath().isEmpty() ? "/" : request.getContextPath() + "/"; 14 | model.addAttribute("home", homeLink); 15 | } 16 | } -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/controller/LogoutController.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.controller; 2 | 3 | import jakarta.servlet.ServletException; 4 | import jakarta.servlet.http.HttpServletRequest; 5 | import jakarta.servlet.http.HttpServletResponse; 6 | import org.springframework.security.core.Authentication; 7 | import org.springframework.security.core.context.SecurityContextHolder; 8 | import org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler; 9 | import org.springframework.stereotype.Controller; 10 | import org.springframework.web.bind.annotation.PostMapping; 11 | 12 | @Controller 13 | public class LogoutController { 14 | 15 | @PostMapping("/logout") 16 | public String logout(HttpServletRequest request, HttpServletResponse response) throws ServletException { 17 | Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); 18 | if (authentication != null) { 19 | new SecurityContextLogoutHandler().logout(request, response, authentication); 20 | } 21 | return "redirect:/login"; 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/converter/StringSetConverter.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.converter; 2 | 3 | import jakarta.persistence.AttributeConverter; 4 | import jakarta.persistence.Converter; 5 | 6 | import java.util.Arrays; 7 | import java.util.HashSet; 8 | import java.util.Set; 9 | import java.util.stream.Collectors; 10 | 11 | @Converter 12 | public class StringSetConverter implements AttributeConverter, String> { 13 | 14 | private static final String SPLIT_CHAR = ","; 15 | 16 | @Override 17 | public String convertToDatabaseColumn(Set stringSet) { 18 | if (stringSet == null || stringSet.isEmpty()) { 19 | return null; 20 | } 21 | return String.join(SPLIT_CHAR, stringSet); 22 | } 23 | 24 | @Override 25 | public Set convertToEntityAttribute(String dbData) { 26 | if (dbData == null || dbData.isEmpty()) { 27 | return new HashSet<>(); 28 | } 29 | return Arrays.stream(dbData.split(SPLIT_CHAR)) 30 | .collect(Collectors.toSet()); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/customValidations/EndTimeAfterStartTime.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.customValidations; 2 | 3 | import jakarta.validation.Constraint; 4 | import jakarta.validation.Payload; 5 | 6 | import java.lang.annotation.ElementType; 7 | import java.lang.annotation.Retention; 8 | import java.lang.annotation.RetentionPolicy; 9 | import java.lang.annotation.Target; 10 | 11 | @Target({ElementType.TYPE}) 12 | @Retention(RetentionPolicy.RUNTIME) 13 | @Constraint(validatedBy = EndTimeAfterStartTimeValidator.class) 14 | public @interface EndTimeAfterStartTime { 15 | 16 | String message() default "End time must be after start time"; 17 | 18 | Class[] groups() default {}; 19 | 20 | Class[] payload() default {}; 21 | } -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/customValidations/FutureDate.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.customValidations; 2 | 3 | import jakarta.validation.Constraint; 4 | import jakarta.validation.Payload; 5 | 6 | import java.lang.annotation.ElementType; 7 | import java.lang.annotation.Retention; 8 | import java.lang.annotation.RetentionPolicy; 9 | import java.lang.annotation.Target; 10 | 11 | @Constraint(validatedBy = FutureDateValidator.class) 12 | @Target({ElementType.FIELD, ElementType.PARAMETER}) 13 | @Retention(RetentionPolicy.RUNTIME) 14 | public @interface FutureDate { 15 | String message() default "Date must be in the future"; 16 | 17 | Class[] groups() default {}; 18 | 19 | Class[] payload() default {}; 20 | } -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/customValidations/FutureDateValidator.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.customValidations; 2 | import jakarta.validation.ConstraintValidator; 3 | import jakarta.validation.ConstraintValidatorContext; 4 | import java.time.LocalDate; 5 | import java.time.format.DateTimeParseException; 6 | 7 | public class FutureDateValidator implements ConstraintValidator { 8 | @Override 9 | public void initialize(FutureDate constraintAnnotation) { 10 | // No initialization needed 11 | } 12 | 13 | @Override 14 | public boolean isValid(String dateString, ConstraintValidatorContext context) { 15 | if (dateString == null || dateString.isEmpty()) { 16 | return false; 17 | } 18 | 19 | try { 20 | LocalDate date = LocalDate.parse(dateString); 21 | return date.isAfter(LocalDate.now()); // Check if the date is in the future 22 | } catch (DateTimeParseException e) { 23 | return false; // Invalid date format 24 | } 25 | } 26 | } -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/customValidations/SameDay.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.customValidations; 2 | 3 | import jakarta.validation.Constraint; 4 | import jakarta.validation.Payload; 5 | 6 | import java.lang.annotation.ElementType; 7 | import java.lang.annotation.Retention; 8 | import java.lang.annotation.RetentionPolicy; 9 | import java.lang.annotation.Target; 10 | 11 | @Target({ElementType.TYPE}) 12 | @Retention(RetentionPolicy.RUNTIME) 13 | @Constraint(validatedBy = SameDayValidator.class) 14 | public @interface SameDay { 15 | String message() default "Start and end dates must be equal and on the same day"; 16 | 17 | Class[] groups() default {}; 18 | 19 | Class[] payload() default {}; 20 | } -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/customValidations/contract/StartDateBeforeEndDate.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.customValidations.contract; 2 | 3 | import jakarta.validation.Constraint; 4 | import jakarta.validation.Payload; 5 | 6 | import java.lang.annotation.ElementType; 7 | import java.lang.annotation.Retention; 8 | import java.lang.annotation.RetentionPolicy; 9 | import java.lang.annotation.Target; 10 | 11 | @Target({ElementType.TYPE, ElementType.ANNOTATION_TYPE}) 12 | @Retention(RetentionPolicy.RUNTIME) 13 | @Constraint(validatedBy = StartDateBeforeEndDateValidator.class) 14 | public @interface StartDateBeforeEndDate { 15 | String message() default "Start date must be before end date"; 16 | Class[] groups() default {}; 17 | Class[] payload() default {}; 18 | } -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/customValidations/customer/UniqueEmail.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.customValidations.customer; 2 | 3 | import jakarta.validation.Constraint; 4 | import jakarta.validation.Payload; 5 | 6 | import java.lang.annotation.ElementType; 7 | import java.lang.annotation.Retention; 8 | import java.lang.annotation.RetentionPolicy; 9 | import java.lang.annotation.Target; 10 | 11 | @Constraint(validatedBy = UniqueEmailValidator.class) 12 | @Target({ElementType.FIELD, ElementType.METHOD}) 13 | @Retention(RetentionPolicy.RUNTIME) 14 | public @interface UniqueEmail { 15 | String message() default "The email you entered is already registered. Please choose a different email address."; 16 | 17 | Class[] groups() default {}; 18 | 19 | Class[] payload() default {}; 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/customValidations/user/UniqueEmail.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.customValidations.user; 2 | 3 | import jakarta.validation.Constraint; 4 | import jakarta.validation.Payload; 5 | 6 | import java.lang.annotation.ElementType; 7 | import java.lang.annotation.Retention; 8 | import java.lang.annotation.RetentionPolicy; 9 | import java.lang.annotation.Target; 10 | 11 | @Constraint(validatedBy = UniqueEmailValidator.class) 12 | @Target({ElementType.FIELD, ElementType.METHOD}) 13 | @Retention(RetentionPolicy.RUNTIME) 14 | public @interface UniqueEmail { 15 | String message() default "The email you entered is already registered. Please choose a different email address."; 16 | 17 | Class[] groups() default {}; 18 | 19 | Class[] payload() default {}; 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/customValidations/user/UniqueUsername.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.customValidations.user; 2 | 3 | import jakarta.validation.Constraint; 4 | import jakarta.validation.Payload; 5 | 6 | import java.lang.annotation.ElementType; 7 | import java.lang.annotation.Retention; 8 | import java.lang.annotation.RetentionPolicy; 9 | import java.lang.annotation.Target; 10 | 11 | @Constraint(validatedBy = UniqueUsernameValidator.class) 12 | @Target({ElementType.FIELD, ElementType.METHOD}) 13 | @Retention(RetentionPolicy.RUNTIME) 14 | public @interface UniqueUsername { 15 | String message() default "The username you entered is already registered. Please choose a different username."; 16 | 17 | Class[] groups() default {}; 18 | 19 | Class[] payload() default {}; 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/entity/Role.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.entity; 2 | 3 | import jakarta.persistence.*; 4 | 5 | @Entity 6 | @Table(name = "roles") 7 | public class Role { 8 | 9 | @Id 10 | @GeneratedValue(strategy = GenerationType.IDENTITY) 11 | private int id; 12 | 13 | @Column(name = "name") 14 | private String name; 15 | 16 | public Role() { 17 | } 18 | 19 | public Role(String name) { 20 | this.name = name; 21 | } 22 | 23 | public int getId() { 24 | return id; 25 | } 26 | 27 | public void setId(int id) { 28 | this.id = id; 29 | } 30 | 31 | public String getName() { 32 | return name; 33 | } 34 | 35 | public void setName(String name) { 36 | this.name = name; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/entity/settings/EmailSettings.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.entity.settings; 2 | 3 | public class EmailSettings { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/google/config/GoogleApiConfig.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.google.config; 2 | 3 | import org.springframework.beans.factory.annotation.Value; 4 | import org.springframework.context.annotation.Bean; 5 | import org.springframework.context.annotation.Configuration; 6 | 7 | @Configuration 8 | public class GoogleApiConfig { 9 | 10 | @Value("${spring.security.oauth2.client.registration.google.client-id}") 11 | private String clientId; 12 | 13 | @Value("${spring.security.oauth2.client.registration.google.client-secret}") 14 | private String clientSecret; 15 | 16 | @Bean 17 | public GoogleAuthorizationCodeFlowWrapper googleAuthorizationCodeFlowWrapper() { 18 | return new GoogleAuthorizationCodeFlowWrapper(clientId, clientSecret); 19 | } 20 | } -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/google/dao/EventDateTime.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.google.dao; 2 | 3 | public class EventDateTime { 4 | private String dateTime; 5 | 6 | public String getDateTime() { 7 | return dateTime; 8 | } 9 | 10 | public void setDateTime(String dateTime) { 11 | this.dateTime = dateTime; 12 | } 13 | } -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/google/model/calendar/AppointmentSlot.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.google.model.calendar; 2 | 3 | public class AppointmentSlot { 4 | private String summary; 5 | private String startTime; 6 | private String endTime; 7 | private String timeZone; 8 | 9 | public String getSummary() { 10 | return summary; 11 | } 12 | 13 | public void setSummary(String summary) { 14 | this.summary = summary; 15 | } 16 | 17 | public String getStartTime() { 18 | return startTime; 19 | } 20 | 21 | public void setStartTime(String startTime) { 22 | this.startTime = startTime; 23 | } 24 | 25 | public String getEndTime() { 26 | return endTime; 27 | } 28 | 29 | public void setEndTime(String endTime) { 30 | this.endTime = endTime; 31 | } 32 | 33 | public String getTimeZone() { 34 | return timeZone; 35 | } 36 | 37 | public void setTimeZone(String timeZone) { 38 | this.timeZone = timeZone; 39 | } 40 | } -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/google/model/calendar/EventAttendee.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.google.model.calendar; 2 | 3 | public class EventAttendee { 4 | private String email; 5 | 6 | public String getEmail() { 7 | return email; 8 | } 9 | 10 | public void setEmail(String email) { 11 | this.email = email; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/google/model/calendar/EventDateTime.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.google.model.calendar; 2 | 3 | public class EventDateTime { 4 | // private String date; 5 | private String dateTime; 6 | 7 | private String timeZone; 8 | // Getters and setters 9 | 10 | public String getDateTime() { 11 | return dateTime; 12 | } 13 | 14 | public void setDateTime(String dateTime) { 15 | this.dateTime = dateTime; 16 | } 17 | 18 | public String getTimeZone() { 19 | return timeZone; 20 | } 21 | 22 | public void setTimeZone(String timeZone) { 23 | this.timeZone = timeZone; 24 | } 25 | } -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/google/model/calendar/EventDisplayList.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.google.model.calendar; 2 | 3 | import java.util.List; 4 | 5 | public class EventDisplayList { 6 | private List items; 7 | 8 | public EventDisplayList(List items) { 9 | this.items = items; 10 | } 11 | 12 | public List getItems() { 13 | return items; 14 | } 15 | 16 | public void setItems(List items) { 17 | this.items = items; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/google/model/calendar/EventList.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.google.model.calendar; 2 | 3 | import java.util.List; 4 | 5 | public class EventList { 6 | 7 | private List items; 8 | 9 | 10 | public List getItems() { 11 | return items; 12 | } 13 | 14 | public void setItems(List items) { 15 | this.items = items; 16 | } 17 | } -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/google/model/drive/GoogleDriveFolder.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.google.model.drive; 2 | 3 | import jakarta.validation.constraints.NotBlank; 4 | 5 | public class GoogleDriveFolder { 6 | private String id; 7 | @NotBlank(message = "Folder name is required") 8 | private String name; 9 | 10 | public String getId() { 11 | return id; 12 | } 13 | 14 | public void setId(String id) { 15 | this.id = id; 16 | } 17 | 18 | public String getName() { 19 | return name; 20 | } 21 | 22 | public void setName(String name) { 23 | this.name = name; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/google/model/gmail/Body.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.google.model.gmail; 2 | 3 | public class Body { 4 | private String data; 5 | 6 | private String attachmentId; 7 | 8 | private int size; 9 | 10 | // Getters and setters 11 | public String getData() { 12 | return data; 13 | } 14 | 15 | public void setData(String data) { 16 | this.data = data; 17 | } 18 | 19 | public String getAttachmentId() { 20 | return attachmentId; 21 | } 22 | 23 | public void setAttachmentId(String attachmentId) { 24 | this.attachmentId = attachmentId; 25 | } 26 | 27 | public int getSize() { 28 | return size; 29 | } 30 | 31 | public void setSize(int size) { 32 | this.size = size; 33 | } 34 | } -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/google/model/gmail/CustomHeader.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.google.model.gmail; 2 | 3 | public class CustomHeader { 4 | private String name; 5 | private String value; 6 | 7 | // Getters and setters 8 | public String getName() { 9 | return name; 10 | } 11 | 12 | public void setName(String name) { 13 | this.name = name; 14 | } 15 | 16 | public String getValue() { 17 | return value; 18 | } 19 | 20 | public void setValue(String value) { 21 | this.value = value; 22 | } 23 | } -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/google/model/gmail/EmailPage.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.google.model.gmail; 2 | 3 | import java.util.List; 4 | 5 | public class EmailPage { 6 | private List emails; 7 | private String nextPageToken; 8 | private int page; 9 | 10 | public int getPage() { 11 | return page; 12 | } 13 | 14 | public void setPage(int page) { 15 | this.page = page; 16 | } 17 | 18 | public List getEmails() { 19 | return emails; 20 | } 21 | 22 | public void setEmails(List emails) { 23 | this.emails = emails; 24 | } 25 | 26 | public String getNextPageToken() { 27 | return nextPageToken; 28 | } 29 | 30 | public void setNextPageToken(String nextPageToken) { 31 | this.nextPageToken = nextPageToken; 32 | } 33 | } -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/google/model/gmail/GoogleGmailEmail.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.google.model.gmail; 2 | 3 | public class GoogleGmailEmail { 4 | 5 | private String id; 6 | private String threadId; 7 | 8 | public String getId() { 9 | return id; 10 | } 11 | 12 | public void setId(String id) { 13 | this.id = id; 14 | } 15 | 16 | public String getThreadId() { 17 | return threadId; 18 | } 19 | 20 | public void setThreadId(String threadId) { 21 | this.threadId = threadId; 22 | } 23 | } -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/google/model/gmail/Part.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.google.model.gmail; 2 | 3 | import java.util.List; 4 | 5 | public class Part { 6 | private String mimeType; 7 | private List headers; 8 | private Body body; 9 | private List parts; 10 | 11 | // Getters and setters 12 | public String getMimeType() { 13 | return mimeType; 14 | } 15 | 16 | public void setMimeType(String mimeType) { 17 | this.mimeType = mimeType; 18 | } 19 | 20 | public List getHeaders() { 21 | return headers; 22 | } 23 | 24 | public void setHeaders(List headers) { 25 | this.headers = headers; 26 | } 27 | 28 | public Body getBody() { 29 | return body; 30 | } 31 | 32 | public void setBody(Body body) { 33 | this.body = body; 34 | } 35 | 36 | public List getParts() { 37 | return parts; 38 | } 39 | 40 | public void setParts(List parts) { 41 | this.parts = parts; 42 | } 43 | } -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/google/model/gmail/Payload.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.google.model.gmail; 2 | 3 | import java.util.List; 4 | 5 | public class Payload { 6 | private String mimeType; 7 | private List headers; 8 | private Body body; 9 | private List parts; 10 | 11 | // Getters and setters 12 | 13 | public String getMimeType() { 14 | return mimeType; 15 | } 16 | 17 | public void setMimeType(String mimeType) { 18 | this.mimeType = mimeType; 19 | } 20 | 21 | public List getHeaders() { 22 | return headers; 23 | } 24 | 25 | public void setHeaders(List headers) { 26 | this.headers = headers; 27 | } 28 | 29 | public Body getBody() { 30 | return body; 31 | } 32 | 33 | public void setBody(Body body) { 34 | this.body = body; 35 | } 36 | 37 | public List getParts() { 38 | return parts; 39 | } 40 | 41 | public void setParts(List parts) { 42 | this.parts = parts; 43 | } 44 | } -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/google/service/GoogleCalendarApiService.java: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/google/service/GoogleCalendarApiServiceImpl.java: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/google/service/gmail/GoogleGmailLabelService.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.google.service.gmail; 2 | 3 | 4 | import site.easy.to.build.crm.entity.OAuthUser; 5 | 6 | import java.io.IOException; 7 | import java.security.GeneralSecurityException; 8 | import java.util.List; 9 | 10 | public interface GoogleGmailLabelService { 11 | List fetchAllLabels(OAuthUser oAuthUser) throws IOException, GeneralSecurityException; 12 | 13 | String createLabel(OAuthUser oAuthUser, String labelName) throws IOException, GeneralSecurityException; 14 | 15 | void deleteLabel(OAuthUser oAuthUser, String labelId) throws IOException, GeneralSecurityException; 16 | 17 | void assignLabelToEmails(OAuthUser oAuthUser, List emailIds, String labelId) throws IOException, GeneralSecurityException; 18 | } -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/google/util/GsonUtil.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.google.util; 2 | 3 | import com.google.gson.Gson; 4 | import com.google.gson.JsonObject; 5 | 6 | import com.google.gson.JsonElement; 7 | 8 | import java.io.Reader; 9 | import java.lang.reflect.Type; 10 | 11 | public class GsonUtil { 12 | private static final Gson gson = new Gson(); 13 | 14 | public static T fromJson(String json, Class classOfT) { 15 | return gson.fromJson(json, classOfT); 16 | } 17 | 18 | public static T fromJson(JsonElement jsonElement, Type typeOfT) { 19 | return gson.fromJson(jsonElement, typeOfT); 20 | } 21 | 22 | public static JsonObject fromJson(String json) { 23 | return gson.fromJson(json, JsonObject.class); 24 | } 25 | 26 | public static T fromJson(Reader reader, Class classOfT) { 27 | return gson.fromJson(reader, classOfT); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/google/util/StringSetWrapper.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.google.util; 2 | 3 | import java.util.Set; 4 | 5 | public class StringSetWrapper { 6 | private Set stringSet; 7 | 8 | public StringSetWrapper(Set stringSet) { 9 | this.stringSet = stringSet; 10 | } 11 | 12 | public Set getStringSet() { 13 | return stringSet; 14 | } 15 | 16 | public void setStringSet(Set stringSet) { 17 | this.stringSet = stringSet; 18 | } 19 | } -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/google/util/TimeZoneLabel.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.google.util; 2 | 3 | public class TimeZoneLabel { 4 | private String label; 5 | private String offset; 6 | 7 | public TimeZoneLabel(String label, String offset) { 8 | this.label = label; 9 | this.offset = offset; 10 | } 11 | 12 | public String getLabel() { 13 | return label; 14 | } 15 | 16 | public void setLabel(String label) { 17 | this.label = label; 18 | } 19 | 20 | public String getOffset() { 21 | return offset; 22 | } 23 | 24 | public void setOffset(String offset) { 25 | this.offset = offset; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/repository/ContractRepository.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.repository; 2 | 3 | import org.springframework.data.domain.Pageable; 4 | import org.springframework.data.jpa.repository.JpaRepository; 5 | import org.springframework.stereotype.Repository; 6 | import site.easy.to.build.crm.entity.Contract; 7 | import site.easy.to.build.crm.entity.Customer; 8 | 9 | import java.util.List; 10 | 11 | @Repository 12 | public interface ContractRepository extends JpaRepository { 13 | public Contract findByContractId(int contractId); 14 | 15 | public List findByUserId(int userId); 16 | 17 | public List findByCustomerCustomerId(int customerId); 18 | 19 | public List findByUserIdOrderByCreatedAtDesc(int userId, Pageable pageable); 20 | 21 | public List findByCustomerCustomerIdOrderByCreatedAtDesc(int customerId, Pageable pageable); 22 | 23 | long countByUserId(int userId); 24 | 25 | long countByCustomerCustomerId(int customerId); 26 | 27 | void deleteAllByCustomer(Customer customer); 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/repository/CustomerLoginInfoRepository.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.repository; 2 | 3 | import org.springframework.data.jpa.repository.JpaRepository; 4 | import site.easy.to.build.crm.entity.CustomerLoginInfo; 5 | 6 | public interface CustomerLoginInfoRepository extends JpaRepository { 7 | public CustomerLoginInfo findById(int id); 8 | 9 | public CustomerLoginInfo findByToken(String token); 10 | 11 | public CustomerLoginInfo findByUsername(String email); 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/repository/CustomerRepository.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.repository; 2 | 3 | import org.springframework.data.domain.Pageable; 4 | import org.springframework.data.jpa.repository.JpaRepository; 5 | import org.springframework.stereotype.Repository; 6 | import site.easy.to.build.crm.entity.Customer; 7 | 8 | 9 | import java.util.List; 10 | 11 | @Repository 12 | public interface CustomerRepository extends JpaRepository { 13 | public Customer findByCustomerId(int customerId); 14 | 15 | public List findByUserId(int userId); 16 | 17 | public Customer findByEmail(String email); 18 | 19 | public List findAll(); 20 | 21 | public List findByUserIdOrderByCreatedAtDesc(int userId, Pageable pageable); 22 | 23 | long countByUserId(int userId); 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/repository/EmailTemplateRepository.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.repository; 2 | 3 | import org.springframework.data.domain.Pageable; 4 | import org.springframework.data.jpa.repository.JpaRepository; 5 | import org.springframework.stereotype.Repository; 6 | import site.easy.to.build.crm.entity.EmailTemplate; 7 | 8 | import java.util.List; 9 | 10 | @Repository 11 | public interface EmailTemplateRepository extends JpaRepository { 12 | public EmailTemplate findByTemplateId(int id); 13 | public EmailTemplate findByName(String name); 14 | public List findAll(); 15 | public List findByUserId(int userId); 16 | public List findTopNByOrderByCreatedAtDesc(int limit, Pageable pageable); 17 | 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/repository/FileRepository.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.repository; 2 | 3 | import org.springframework.data.jpa.repository.JpaRepository; 4 | import org.springframework.stereotype.Repository; 5 | import site.easy.to.build.crm.entity.File; 6 | 7 | import java.util.List; 8 | 9 | @Repository 10 | public interface FileRepository extends JpaRepository { 11 | public List findByLeadLeadId(int leadId); 12 | 13 | public List findByContractContractId(int contractId); 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/repository/GoogleDriveFileRepository.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.repository; 2 | 3 | import org.springframework.data.jpa.repository.JpaRepository; 4 | import org.springframework.stereotype.Repository; 5 | import site.easy.to.build.crm.entity.GoogleDriveFile; 6 | 7 | import java.util.List; 8 | 9 | @Repository 10 | public interface GoogleDriveFileRepository extends JpaRepository { 11 | public List findByLeadLeadId(int leadId); 12 | 13 | public List findByContractContractId(int contractId); 14 | 15 | void deleteById(int id); 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/repository/LeadActionRepository.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.repository; 2 | 3 | import org.springframework.data.jpa.repository.JpaRepository; 4 | import org.springframework.stereotype.Repository; 5 | import site.easy.to.build.crm.entity.LeadAction; 6 | 7 | @Repository 8 | public interface LeadActionRepository extends JpaRepository { 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/repository/OAuthUserRepository.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.repository; 2 | 3 | import org.springframework.data.jpa.repository.JpaRepository; 4 | import org.springframework.stereotype.Repository; 5 | import site.easy.to.build.crm.entity.OAuthUser; 6 | import site.easy.to.build.crm.entity.User; 7 | 8 | @Repository 9 | public interface OAuthUserRepository extends JpaRepository { 10 | 11 | public OAuthUser findById(int id); 12 | 13 | public OAuthUser getOAuthUserByUser(User user); 14 | 15 | public OAuthUser findByEmail(String email); 16 | 17 | public void deleteById(int id); 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/repository/RoleRepository.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.repository; 2 | 3 | import org.springframework.data.jpa.repository.JpaRepository; 4 | import org.springframework.stereotype.Repository; 5 | import site.easy.to.build.crm.entity.Role; 6 | 7 | @Repository 8 | public interface RoleRepository extends JpaRepository { 9 | Role findByName(String name); 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/repository/UserProfileRepository.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.repository; 2 | 3 | import org.springframework.data.jpa.repository.JpaRepository; 4 | import org.springframework.stereotype.Repository; 5 | import site.easy.to.build.crm.entity.UserProfile; 6 | 7 | @Repository 8 | public interface UserProfileRepository extends JpaRepository { 9 | UserProfile findByUserId(int userId); 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/repository/UserRepository.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.repository; 2 | 3 | import org.springframework.data.domain.Pageable; 4 | import org.springframework.data.jpa.repository.JpaRepository; 5 | import org.springframework.stereotype.Repository; 6 | import site.easy.to.build.crm.entity.User; 7 | 8 | import java.util.List; 9 | 10 | @Repository 11 | public interface UserRepository extends JpaRepository { 12 | 13 | public User findById(int id); 14 | 15 | public List findByUsername(String username); 16 | 17 | public User findByEmail(String email); 18 | 19 | public void deleteById(int id); 20 | 21 | public List findAll(); 22 | 23 | public User findByToken(String token); 24 | 25 | long count(); 26 | 27 | public List findTopNByOrderByCreatedAtDesc(int limit, Pageable pageable); 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/repository/settings/ContractEmailSettingsRepository.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.repository.settings; 2 | 3 | import org.springframework.data.jpa.repository.JpaRepository; 4 | import org.springframework.stereotype.Repository; 5 | import site.easy.to.build.crm.entity.settings.ContractEmailSettings; 6 | 7 | @Repository 8 | public interface ContractEmailSettingsRepository extends JpaRepository{ 9 | public ContractEmailSettings findByUserId(int userId); 10 | 11 | public ContractEmailSettings findByCustomerLoginInfoId(int customerId); 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/repository/settings/LeadEmailSettingsRepository.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.repository.settings; 2 | 3 | import org.springframework.data.jpa.repository.JpaRepository; 4 | import org.springframework.stereotype.Repository; 5 | import site.easy.to.build.crm.entity.settings.LeadEmailSettings; 6 | 7 | @Repository 8 | public interface LeadEmailSettingsRepository extends JpaRepository { 9 | public LeadEmailSettings findByUserId(int userId); 10 | 11 | public LeadEmailSettings findByCustomerLoginInfoId(int customerId); 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/repository/settings/TicketEmailSettingsRepository.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.repository.settings; 2 | 3 | import org.springframework.data.jpa.repository.JpaRepository; 4 | import org.springframework.stereotype.Repository; 5 | import site.easy.to.build.crm.entity.settings.TicketEmailSettings; 6 | 7 | @Repository 8 | public interface TicketEmailSettingsRepository extends JpaRepository{ 9 | 10 | public TicketEmailSettings findByUserId(int userId); 11 | 12 | public TicketEmailSettings findByCustomerLoginInfoId(int customerId); 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/service/contract/ContractService.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.service.contract; 2 | 3 | import site.easy.to.build.crm.entity.Contract; 4 | import site.easy.to.build.crm.entity.Customer; 5 | 6 | import java.util.List; 7 | 8 | public interface ContractService { 9 | public Contract findByContractId(int id); 10 | 11 | public List findAll(); 12 | 13 | public List getCustomerContracts(int customerId); 14 | 15 | public List getEmployeeCreatedContracts(int userId); 16 | 17 | public Contract save(Contract contract); 18 | 19 | public void delete(Contract contract); 20 | 21 | public List getRecentContracts(int userId, int limit); 22 | 23 | public List getRecentCustomerContracts(int customerId, int limit); 24 | 25 | public long countByCustomerId(int customerId); 26 | 27 | public long countByUserId(int userId); 28 | 29 | public void deleteAllByCustomer(Customer customer); 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/service/customer/CustomerLoginInfoService.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.service.customer; 2 | 3 | import site.easy.to.build.crm.entity.CustomerLoginInfo; 4 | 5 | public interface CustomerLoginInfoService { 6 | public CustomerLoginInfo findById(int id); 7 | 8 | public CustomerLoginInfo findByEmail(String email); 9 | 10 | public CustomerLoginInfo findByToken(String token); 11 | 12 | public CustomerLoginInfo save(CustomerLoginInfo customerLoginInfo); 13 | 14 | public void delete(CustomerLoginInfo customerLoginInfo); 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/service/customer/CustomerService.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.service.customer; 2 | 3 | import org.checkerframework.checker.units.qual.C; 4 | import site.easy.to.build.crm.entity.Customer; 5 | 6 | import java.util.List; 7 | 8 | public interface CustomerService { 9 | 10 | public Customer findByCustomerId(int customerId); 11 | 12 | public List findByUserId(int userId); 13 | 14 | public Customer findByEmail(String email); 15 | 16 | public List findAll(); 17 | 18 | public Customer save(Customer customer); 19 | 20 | public void delete(Customer customer); 21 | 22 | public List getRecentCustomers(int userId, int limit); 23 | 24 | long countByUserId(int userId); 25 | 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/service/drive/GoogleDriveFileService.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.service.drive; 2 | 3 | import org.springframework.stereotype.Service; 4 | import site.easy.to.build.crm.entity.GoogleDriveFile; 5 | 6 | import java.util.List; 7 | 8 | public interface GoogleDriveFileService { 9 | public List getAllDriveFileByLeadId(int leadId); 10 | 11 | public List getAllDriveFileByContactId(int contractId); 12 | 13 | public void save(GoogleDriveFile googleDriveFile); 14 | 15 | public void delete(int id); 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/service/email/EmailTemplateService.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.service.email; 2 | 3 | import org.springframework.security.core.Authentication; 4 | import site.easy.to.build.crm.entity.EmailTemplate; 5 | 6 | import java.util.List; 7 | 8 | public interface EmailTemplateService { 9 | public EmailTemplate findByTemplateId(int id); 10 | 11 | public EmailTemplate findByName(String name); 12 | 13 | public List getAllTemplates(); 14 | 15 | public void save(EmailTemplate emailTemplate, Authentication authentication); 16 | 17 | public List findByUserId(int userId); 18 | 19 | public void delete(int id); 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/service/file/FileService.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.service.file; 2 | 3 | import site.easy.to.build.crm.entity.File; 4 | 5 | import java.util.List; 6 | 7 | public interface FileService { 8 | public List findByLeadId(int leadId); 9 | 10 | public List getContractFiles(int contractId); 11 | 12 | public void save(File file); 13 | 14 | public void delete(File file); 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/service/file/FileServiceImpl.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.service.file; 2 | 3 | import org.springframework.stereotype.Service; 4 | import site.easy.to.build.crm.entity.File; 5 | import site.easy.to.build.crm.repository.FileRepository; 6 | 7 | import java.util.List; 8 | 9 | @Service 10 | public class FileServiceImpl implements FileService { 11 | 12 | private final FileRepository fileRepository; 13 | 14 | public FileServiceImpl(FileRepository fileRepository) { 15 | this.fileRepository = fileRepository; 16 | } 17 | 18 | @Override 19 | public List findByLeadId(int leadId) { 20 | return fileRepository.findByLeadLeadId(leadId); 21 | } 22 | 23 | @Override 24 | public List getContractFiles(int contractId) { 25 | return fileRepository.findByContractContractId(contractId); 26 | } 27 | 28 | @Override 29 | public void save(File file) { 30 | fileRepository.save(file); 31 | } 32 | 33 | @Override 34 | public void delete(File file) { 35 | fileRepository.delete(file); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/service/lead/LeadActionService.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.service.lead; 2 | 3 | import site.easy.to.build.crm.entity.LeadAction; 4 | 5 | public interface LeadActionService { 6 | public void save(LeadAction leadAction); 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/service/lead/LeadActionServiceImpl.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.service.lead; 2 | 3 | import org.springframework.stereotype.Service; 4 | import site.easy.to.build.crm.repository.LeadActionRepository; 5 | import site.easy.to.build.crm.entity.LeadAction; 6 | 7 | @Service 8 | public class LeadActionServiceImpl implements LeadActionService{ 9 | 10 | private final LeadActionRepository leadActionRepository; 11 | 12 | public LeadActionServiceImpl(LeadActionRepository leadActionRepository) { 13 | this.leadActionRepository = leadActionRepository; 14 | } 15 | 16 | @Override 17 | public void save(LeadAction leadAction) { 18 | leadActionRepository.save(leadAction); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/service/role/RoleService.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.service.role; 2 | 3 | import site.easy.to.build.crm.entity.Role; 4 | 5 | import java.util.List; 6 | import java.util.Optional; 7 | 8 | public interface RoleService { 9 | public List getAllRoles(); 10 | public Role findByName(String name); 11 | public Optional findById(int RoleId); 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/service/role/RoleServiceImpl.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.service.role; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.stereotype.Service; 5 | import site.easy.to.build.crm.entity.Role; 6 | import site.easy.to.build.crm.repository.RoleRepository; 7 | 8 | import java.util.List; 9 | import java.util.Optional; 10 | 11 | @Service 12 | public class RoleServiceImpl implements RoleService{ 13 | 14 | private final RoleRepository roleRepository; 15 | 16 | @Autowired 17 | public RoleServiceImpl(RoleRepository roleRepository) { 18 | this.roleRepository = roleRepository; 19 | } 20 | 21 | @Override 22 | public List getAllRoles() { 23 | return roleRepository.findAll(); 24 | } 25 | 26 | @Override 27 | public Role findByName(String name) { 28 | return roleRepository.findByName(name); 29 | } 30 | 31 | @Override 32 | public Optional findById(int RoleId) { 33 | return roleRepository.findById(RoleId); 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/service/ticket/TicketService.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.service.ticket; 2 | 3 | import site.easy.to.build.crm.entity.Customer; 4 | import site.easy.to.build.crm.entity.Ticket; 5 | 6 | import java.util.List; 7 | 8 | public interface TicketService { 9 | public Ticket findByTicketId(int id); 10 | 11 | public Ticket save(Ticket ticket); 12 | 13 | public void delete(Ticket ticket); 14 | 15 | public List findManagerTickets(int id); 16 | 17 | public List findEmployeeTickets(int id); 18 | 19 | public List findAll(); 20 | 21 | public List findCustomerTickets(int id); 22 | 23 | List getRecentTickets(int managerId, int limit); 24 | 25 | List getRecentEmployeeTickets(int employeeId, int limit); 26 | 27 | List getRecentCustomerTickets(int customerId, int limit); 28 | 29 | long countByEmployeeId(int employeeId); 30 | 31 | long countByManagerId(int managerId); 32 | 33 | long countByCustomerCustomerId(int customerId); 34 | 35 | void deleteAllByCustomer(Customer customer); 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/service/user/OAuthUserService.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.service.user; 2 | 3 | import org.springframework.security.oauth2.core.OAuth2AccessToken; 4 | import org.springframework.security.oauth2.core.OAuth2RefreshToken; 5 | import site.easy.to.build.crm.entity.OAuthUser; 6 | import site.easy.to.build.crm.entity.User; 7 | 8 | 9 | public interface OAuthUserService { 10 | 11 | public OAuthUser findById(int id); 12 | 13 | public OAuthUser findBtEmail(String email); 14 | 15 | public OAuthUser getOAuthUserByUser(User user); 16 | 17 | public String refreshAccessTokenIfNeeded(OAuthUser oauthUser); 18 | 19 | public void revokeAccess(OAuthUser oAuthUser); 20 | 21 | public void save(OAuthUser oAuthUser, User user); 22 | 23 | public void save(OAuthUser oAuthUser); 24 | 25 | public void deleteById(int id); 26 | 27 | public void updateOAuthUserTokens(OAuthUser oAuthUser, OAuth2AccessToken oAuth2AccessToken, OAuth2RefreshToken oAuth2RefreshToken); 28 | 29 | 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/service/user/UserProfileService.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.service.user; 2 | 3 | import site.easy.to.build.crm.entity.UserProfile; 4 | 5 | import java.util.List; 6 | import java.util.Optional; 7 | 8 | public interface UserProfileService { 9 | 10 | public Optional findById(int id); 11 | 12 | public UserProfile save(UserProfile userProfile); 13 | 14 | public UserProfile findByUserId(int userId); 15 | 16 | public List getAllProfiles(); 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/service/user/UserService.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.service.user; 2 | 3 | import site.easy.to.build.crm.entity.User; 4 | 5 | import java.util.List; 6 | 7 | public interface UserService { 8 | 9 | public long countAllUsers(); 10 | 11 | public User findById(int id); 12 | 13 | public List findByUsername(String username); 14 | 15 | public User findByEmail(String email); 16 | 17 | public User findByToken(String token); 18 | 19 | public User save(User user); 20 | 21 | public void deleteById(int id); 22 | 23 | public List findAll(); 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/util/AuthorizationUtil.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.util; 2 | 3 | import org.springframework.security.core.Authentication; 4 | import org.springframework.security.core.GrantedAuthority; 5 | import org.springframework.security.core.authority.SimpleGrantedAuthority; 6 | import site.easy.to.build.crm.entity.User; 7 | 8 | import java.util.Objects; 9 | 10 | public class AuthorizationUtil { 11 | 12 | public static Boolean checkIfUserAuthorized(User employee, User loggedinUser) { 13 | return Objects.equals(loggedinUser.getId(), employee.getId()); 14 | } 15 | 16 | public static Boolean hasRole(Authentication authentication, String role) { 17 | GrantedAuthority authorityToCheck = new SimpleGrantedAuthority(role); 18 | return authentication.getAuthorities().contains(authorityToCheck); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/util/DateUtil.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.util; 2 | 3 | import java.time.LocalDate; 4 | import java.time.format.DateTimeFormatter; 5 | 6 | public class DateUtil { 7 | 8 | public static String convertDateFormat(LocalDate inputDate) { 9 | DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); 10 | return inputDate.format(outputFormatter); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/util/SessionUtils.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.util; 2 | 3 | import jakarta.servlet.http.HttpSession; 4 | 5 | public class SessionUtils { 6 | 7 | public static T getSessionAttribute(HttpSession session, String attributeName, Class wrapperClass) { 8 | Object attribute = session.getAttribute(attributeName); 9 | if (wrapperClass.isInstance(attribute)) { 10 | return wrapperClass.cast(attribute); 11 | } 12 | return null; 13 | } 14 | 15 | } -------------------------------------------------------------------------------- /src/main/java/site/easy/to/build/crm/util/TomcatWebAppValidator.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm.util; 2 | 3 | import org.springframework.stereotype.Component; 4 | import org.springframework.web.context.ServletContextAware; 5 | 6 | import jakarta.servlet.ServletContext; 7 | 8 | @Component 9 | public class TomcatWebAppValidator implements ServletContextAware { 10 | 11 | private ServletContext servletContext; 12 | 13 | @Override 14 | public void setServletContext(ServletContext servletContext) { 15 | this.servletContext = servletContext; 16 | } 17 | 18 | public boolean isValidWebApp(String webAppPath) { 19 | String realPath = servletContext.getRealPath(webAppPath); 20 | return realPath != null; 21 | } 22 | } -------------------------------------------------------------------------------- /src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | org.springframework.boot.env.EnvironmentPostProcessor=site.easy.to.build.crm.config.init.OAuth2ClientIdInitializer -------------------------------------------------------------------------------- /src/main/resources/static/css/dashboard4.css: -------------------------------------------------------------------------------- 1 | /* 2 | Template Name: Admin Template 3 | Author: Wrappixel 4 | 5 | File: scss 6 | */ 7 | @import url(https://fonts.googleapis.com/css?family=Poppins:300,400,500,600,700); 8 | /*Theme Colors*/ 9 | /** 10 | * Table Of Content 11 | * 12 | * 1. Color system 13 | * 2. Options 14 | * 3. Body 15 | * 4. Typography 16 | * 5. Breadcrumbs 17 | * 6. Cards 18 | * 7. Dropdowns 19 | * 8. Buttons 20 | * 9. Typography 21 | * 10. Progress bars 22 | * 11. Tables 23 | * 12. Forms 24 | * 14. Component 25 | */ 26 | /******************* 27 | Our income 28 | *******************/ 29 | .o-income .c3 line, .o-income .c3 path { 30 | stroke: #e9ecef; } 31 | -------------------------------------------------------------------------------- /src/main/resources/static/css/morris.css: -------------------------------------------------------------------------------- 1 | .morris-hover { 2 | position:absolute; 3 | z-index:1; 4 | } 5 | 6 | .morris-hover.morris-default-style .morris-hover-row-label { 7 | font-weight:bold; 8 | margin:0.25em 0 9 | } 10 | .morris-hover.morris-default-style .morris-hover-point { 11 | white-space:nowrap; 12 | margin:0.1em 0 13 | } 14 | .morris-hover.morris-default-style { 15 | border-radius: 4px; 16 | padding: 10px 12px; 17 | color: #666; 18 | background:#63676b; 19 | border: none; 20 | color: #fff!important ; 21 | box-shadow: none; 22 | font-size:14px; 23 | } 24 | .morris-hover-point { 25 | color: rgba(257, 257, 257, 0.8)!important ; 26 | } 27 | -------------------------------------------------------------------------------- /src/main/resources/static/css/pages/error-pages.css: -------------------------------------------------------------------------------- 1 | /* 2 | Template Name: Admin Template 3 | Author: Wrappixel 4 | 5 | File: scss 6 | */ 7 | @import url(https://fonts.googleapis.com/css?family=Poppins:300,400,500,600,700); 8 | /*Theme Colors*/ 9 | /** 10 | * Table Of Content 11 | * 12 | * 1. Color system 13 | * 2. Options 14 | * 3. Body 15 | * 4. Typography 16 | * 5. Breadcrumbs 17 | * 6. Cards 18 | * 7. Dropdowns 19 | * 8. Buttons 20 | * 9. Typography 21 | * 10. Progress bars 22 | * 11. Tables 23 | * 12. Forms 24 | * 14. Component 25 | */ 26 | /******************* 27 | Error Page 28 | ******************/ 29 | .error-box { 30 | height: 100%; 31 | position: fixed; 32 | background: url(/images/error-bg.jpg) no-repeat center center #fff; 33 | width: 100%; } 34 | .error-box .footer { 35 | width: 100%; 36 | left: 0px; 37 | right: 0px; } 38 | 39 | .error-body { 40 | padding-top: 5%; } 41 | .error-body h1 { 42 | font-size: 210px; 43 | font-weight: 900; 44 | text-shadow: 4px 4px 0 #fff, 6px 6px 0 #343a40; 45 | line-height: 210px; } 46 | -------------------------------------------------------------------------------- /src/main/resources/static/css/wysiwyg-color.css: -------------------------------------------------------------------------------- 1 | .wysiwyg-color-black { 2 | color: black; 3 | } 4 | 5 | .wysiwyg-color-silver { 6 | color: silver; 7 | } 8 | 9 | .wysiwyg-color-gray { 10 | color: gray; 11 | } 12 | 13 | .wysiwyg-color-white { 14 | color: white; 15 | } 16 | 17 | .wysiwyg-color-maroon { 18 | color: maroon; 19 | } 20 | 21 | .wysiwyg-color-red { 22 | color: red; 23 | } 24 | 25 | .wysiwyg-color-purple { 26 | color: purple; 27 | } 28 | 29 | .wysiwyg-color-fuchsia { 30 | color: fuchsia; 31 | } 32 | 33 | .wysiwyg-color-green { 34 | color: green; 35 | } 36 | 37 | .wysiwyg-color-lime { 38 | color: lime; 39 | } 40 | 41 | .wysiwyg-color-olive { 42 | color: olive; 43 | } 44 | 45 | .wysiwyg-color-yellow { 46 | color: yellow; 47 | } 48 | 49 | .wysiwyg-color-navy { 50 | color: navy; 51 | } 52 | 53 | .wysiwyg-color-blue { 54 | color: blue; 55 | } 56 | 57 | .wysiwyg-color-teal { 58 | color: teal; 59 | } 60 | 61 | .wysiwyg-color-aqua { 62 | color: aqua; 63 | } 64 | 65 | .wysiwyg-color-orange { 66 | color: orange; 67 | } -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/ae.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/ag.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/am.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/at.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/ax.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/az.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/bb.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/bd.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/be.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/bf.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/bg.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/bh.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/bj.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/bl.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/bo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/bq.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/bs.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/bv.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/bw.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/cd.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/cf.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/cg.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/ch.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/ci.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/cl.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/cm.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/cn.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | Flag of the People's Republic of China 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/co.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/cr.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/cu.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/cw.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/cz.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/de.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/dj.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/dk.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/dz.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/ee.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/fi.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/fm.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/fo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/fr.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/ga.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/gb.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/gf.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/gg.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/gh.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/gl.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/gm.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/gn.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/gp.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/gr.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/gw.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/gy.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/hu.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/id.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/ie.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/il.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/is.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/it.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/jm.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/jo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/jp.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/kn.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/kp.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/kw.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/la.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/lc.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/lr.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/lt.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/lu.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/lv.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/ly.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/ma.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/mc.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/mf.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/mg.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/mh.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/mk.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/ml.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/mm.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/mq.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/mr.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/mu.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/mv.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/nc.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/ne.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/ng.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/nl.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/no.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/nr.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/pa.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/pe.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/pk.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/pl.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/pm.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/pr.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/ps.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/pw.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/qa.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/re.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/ro.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/ru.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/rw.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/sc.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/sd.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/se.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/sj.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/sl.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/sn.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/so.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/sr.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/ss.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | Flag of South Sudan 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/st.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/sy.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/td.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/tg.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/th.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/tk.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/tl.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/tn.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/to.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/tr.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/tt.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/tz.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/ua.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/vc.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/vn.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/wf.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/ws.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/ye.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/main/resources/static/flag-icon-css/flags/yt.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/main/resources/static/flat/aero.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/flat/aero.png -------------------------------------------------------------------------------- /src/main/resources/static/flat/aero@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/flat/aero@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/flat/blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/flat/blue.png -------------------------------------------------------------------------------- /src/main/resources/static/flat/blue@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/flat/blue@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/flat/flat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/flat/flat.png -------------------------------------------------------------------------------- /src/main/resources/static/flat/flat@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/flat/flat@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/flat/green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/flat/green.png -------------------------------------------------------------------------------- /src/main/resources/static/flat/green@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/flat/green@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/flat/grey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/flat/grey.png -------------------------------------------------------------------------------- /src/main/resources/static/flat/grey@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/flat/grey@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/flat/orange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/flat/orange.png -------------------------------------------------------------------------------- /src/main/resources/static/flat/orange@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/flat/orange@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/flat/pink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/flat/pink.png -------------------------------------------------------------------------------- /src/main/resources/static/flat/pink@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/flat/pink@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/flat/purple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/flat/purple.png -------------------------------------------------------------------------------- /src/main/resources/static/flat/purple@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/flat/purple@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/flat/red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/flat/red.png -------------------------------------------------------------------------------- /src/main/resources/static/flat/red@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/flat/red@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/flat/yellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/flat/yellow.png -------------------------------------------------------------------------------- /src/main/resources/static/flat/yellow@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/flat/yellow@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/font-awesome/css/brands.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.11.2 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @font-face { 6 | font-family: 'Font Awesome 5 Brands'; 7 | font-style: normal; 8 | font-weight: normal; 9 | font-display: auto; 10 | src: url("../webfonts/fa-brands-400.eot"); 11 | src: url("../webfonts/fa-brands-400.eot?#iefix") format("embedded-opentype"), url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.woff") format("woff"), url("../webfonts/fa-brands-400.ttf") format("truetype"), url("../webfonts/fa-brands-400.svg#fontawesome") format("svg"); } 12 | 13 | .fab { 14 | font-family: 'Font Awesome 5 Brands'; } 15 | -------------------------------------------------------------------------------- /src/main/resources/static/font-awesome/css/brands.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.11.2 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @font-face{font-family:"Font Awesome 5 Brands";font-style:normal;font-weight:normal;font-display:auto;src:url(../webfonts/fa-brands-400.eot);src:url(../webfonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.woff) format("woff"),url(../webfonts/fa-brands-400.ttf) format("truetype"),url(../webfonts/fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:"Font Awesome 5 Brands"} -------------------------------------------------------------------------------- /src/main/resources/static/font-awesome/css/regular.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.11.2 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @font-face { 6 | font-family: 'Font Awesome 5 Free'; 7 | font-style: normal; 8 | font-weight: 400; 9 | font-display: auto; 10 | src: url("../webfonts/fa-regular-400.eot"); 11 | src: url("../webfonts/fa-regular-400.eot?#iefix") format("embedded-opentype"), url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.woff") format("woff"), url("../webfonts/fa-regular-400.ttf") format("truetype"), url("../webfonts/fa-regular-400.svg#fontawesome") format("svg"); } 12 | 13 | .far { 14 | font-family: 'Font Awesome 5 Free'; 15 | font-weight: 400; } 16 | -------------------------------------------------------------------------------- /src/main/resources/static/font-awesome/css/regular.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.11.2 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:400;font-display:auto;src:url(../webfonts/fa-regular-400.eot);src:url(../webfonts/fa-regular-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.woff) format("woff"),url(../webfonts/fa-regular-400.ttf) format("truetype"),url(../webfonts/fa-regular-400.svg#fontawesome) format("svg")}.far{font-family:"Font Awesome 5 Free";font-weight:400} -------------------------------------------------------------------------------- /src/main/resources/static/font-awesome/css/solid.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.11.2 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @font-face { 6 | font-family: 'Font Awesome 5 Free'; 7 | font-style: normal; 8 | font-weight: 900; 9 | font-display: auto; 10 | src: url("../webfonts/fa-solid-900.eot"); 11 | src: url("../webfonts/fa-solid-900.eot?#iefix") format("embedded-opentype"), url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.woff") format("woff"), url("../webfonts/fa-solid-900.ttf") format("truetype"), url("../webfonts/fa-solid-900.svg#fontawesome") format("svg"); } 12 | 13 | .fa, 14 | .fas { 15 | font-family: 'Font Awesome 5 Free'; 16 | font-weight: 900; } 17 | -------------------------------------------------------------------------------- /src/main/resources/static/font-awesome/css/solid.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.11.2 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:900;font-display:auto;src:url(../webfonts/fa-solid-900.eot);src:url(../webfonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.woff) format("woff"),url(../webfonts/fa-solid-900.ttf) format("truetype"),url(../webfonts/fa-solid-900.svg#fontawesome) format("svg")}.fa,.fas{font-family:"Font Awesome 5 Free";font-weight:900} -------------------------------------------------------------------------------- /src/main/resources/static/font-awesome/less/_animated.less: -------------------------------------------------------------------------------- 1 | // Animated Icons 2 | // -------------------------- 3 | 4 | .@{fa-css-prefix}-spin { 5 | animation: fa-spin 2s infinite linear; 6 | } 7 | 8 | .@{fa-css-prefix}-pulse { 9 | animation: fa-spin 1s infinite steps(8); 10 | } 11 | 12 | @keyframes fa-spin { 13 | 0% { 14 | transform: rotate(0deg); 15 | } 16 | 100% { 17 | transform: rotate(360deg); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/resources/static/font-awesome/less/_bordered-pulled.less: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-border { 5 | border-radius: .1em; 6 | border: solid .08em @fa-border-color; 7 | padding: .2em .25em .15em; 8 | } 9 | 10 | .@{fa-css-prefix}-pull-left { float: left; } 11 | .@{fa-css-prefix}-pull-right { float: right; } 12 | 13 | .@{fa-css-prefix}, .fas, .far, .fal, .fab { 14 | &.@{fa-css-prefix}-pull-left { margin-right: .3em; } 15 | &.@{fa-css-prefix}-pull-right { margin-left: .3em; } 16 | } 17 | -------------------------------------------------------------------------------- /src/main/resources/static/font-awesome/less/_core.less: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}, .fas, .far, .fal, .fad, .fab { 5 | -moz-osx-font-smoothing: grayscale; 6 | -webkit-font-smoothing: antialiased; 7 | display: inline-block; 8 | font-style: normal; 9 | font-variant: normal; 10 | text-rendering: auto; 11 | line-height: 1; 12 | } 13 | -------------------------------------------------------------------------------- /src/main/resources/static/font-awesome/less/_fixed-width.less: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .@{fa-css-prefix}-fw { 4 | text-align: center; 5 | width: (20em / 16); 6 | } 7 | -------------------------------------------------------------------------------- /src/main/resources/static/font-awesome/less/_larger.less: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | .larger(@factor) when (@factor > 0) { 5 | .larger((@factor - 1)); 6 | 7 | .@{fa-css-prefix}-@{factor}x { 8 | font-size: (@factor * 1em); 9 | } 10 | } 11 | 12 | /* makes the font 33% larger relative to the icon container */ 13 | .@{fa-css-prefix}-lg { 14 | font-size: (4em / 3); 15 | line-height: (3em / 4); 16 | vertical-align: -.0667em; 17 | } 18 | 19 | .@{fa-css-prefix}-xs { 20 | font-size: .75em; 21 | } 22 | 23 | .@{fa-css-prefix}-sm { 24 | font-size: .875em; 25 | } 26 | 27 | .larger(10); 28 | -------------------------------------------------------------------------------- /src/main/resources/static/font-awesome/less/_list.less: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-ul { 5 | list-style-type: none; 6 | margin-left: (@fa-li-width * 5/4); 7 | padding-left: 0; 8 | 9 | > li { position: relative; } 10 | } 11 | 12 | .@{fa-css-prefix}-li { 13 | left: -@fa-li-width; 14 | position: absolute; 15 | text-align: center; 16 | width: @fa-li-width; 17 | line-height: inherit; 18 | } 19 | -------------------------------------------------------------------------------- /src/main/resources/static/font-awesome/less/_rotated-flipped.less: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); } 5 | .@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); } 6 | .@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); } 7 | 8 | .@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); } 9 | .@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); } 10 | .@{fa-css-prefix}-flip-both, .@{fa-css-prefix}-flip-horizontal.@{fa-css-prefix}-flip-vertical { .fa-icon-flip(-1, -1, 2); } 11 | 12 | // Hook for IE8-9 13 | // ------------------------- 14 | 15 | :root { 16 | .@{fa-css-prefix}-rotate-90, 17 | .@{fa-css-prefix}-rotate-180, 18 | .@{fa-css-prefix}-rotate-270, 19 | .@{fa-css-prefix}-flip-horizontal, 20 | .@{fa-css-prefix}-flip-vertical, 21 | .@{fa-css-prefix}-flip-both { 22 | filter: none; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/resources/static/font-awesome/less/_screen-reader.less: -------------------------------------------------------------------------------- 1 | // Screen Readers 2 | // ------------------------- 3 | 4 | .sr-only { .sr-only(); } 5 | .sr-only-focusable { .sr-only-focusable(); } 6 | -------------------------------------------------------------------------------- /src/main/resources/static/font-awesome/less/_stacked.less: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-stack { 5 | display: inline-block; 6 | height: 2em; 7 | line-height: 2em; 8 | position: relative; 9 | vertical-align: middle; 10 | width: 2em; 11 | } 12 | 13 | .@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x { 14 | left: 0; 15 | position: absolute; 16 | text-align: center; 17 | width: 100%; 18 | } 19 | 20 | .@{fa-css-prefix}-stack-1x { line-height: inherit; } 21 | .@{fa-css-prefix}-stack-2x { font-size: 2em; } 22 | .@{fa-css-prefix}-inverse { color: @fa-inverse; } 23 | -------------------------------------------------------------------------------- /src/main/resources/static/font-awesome/less/brands.less: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.11.2 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @import "_variables.less"; 6 | 7 | @font-face { 8 | font-family: 'Font Awesome 5 Brands'; 9 | font-style: normal; 10 | font-weight: normal; 11 | font-display: @fa-font-display; 12 | src: url('@{fa-font-path}/fa-brands-400.eot'); 13 | src: url('@{fa-font-path}/fa-brands-400.eot?#iefix') format('embedded-opentype'), 14 | url('@{fa-font-path}/fa-brands-400.woff2') format('woff2'), 15 | url('@{fa-font-path}/fa-brands-400.woff') format('woff'), 16 | url('@{fa-font-path}/fa-brands-400.ttf') format('truetype'), 17 | url('@{fa-font-path}/fa-brands-400.svg#fontawesome') format('svg'); 18 | } 19 | 20 | .fab { 21 | font-family: 'Font Awesome 5 Brands'; 22 | } 23 | -------------------------------------------------------------------------------- /src/main/resources/static/font-awesome/less/fontawesome.less: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.11.2 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @import "_variables.less"; 6 | @import "_mixins.less"; 7 | @import "_core.less"; 8 | @import "_larger.less"; 9 | @import "_fixed-width.less"; 10 | @import "_list.less"; 11 | @import "_bordered-pulled.less"; 12 | @import "_animated.less"; 13 | @import "_rotated-flipped.less"; 14 | @import "_stacked.less"; 15 | @import "_icons.less"; 16 | @import "_screen-reader.less"; 17 | -------------------------------------------------------------------------------- /src/main/resources/static/font-awesome/less/regular.less: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.11.2 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @import "_variables.less"; 6 | 7 | @font-face { 8 | font-family: 'Font Awesome 5 Free'; 9 | font-style: normal; 10 | font-weight: 400; 11 | font-display: @fa-font-display; 12 | src: url('@{fa-font-path}/fa-regular-400.eot'); 13 | src: url('@{fa-font-path}/fa-regular-400.eot?#iefix') format('embedded-opentype'), 14 | url('@{fa-font-path}/fa-regular-400.woff2') format('woff2'), 15 | url('@{fa-font-path}/fa-regular-400.woff') format('woff'), 16 | url('@{fa-font-path}/fa-regular-400.ttf') format('truetype'), 17 | url('@{fa-font-path}/fa-regular-400.svg#fontawesome') format('svg'); 18 | } 19 | 20 | .far { 21 | font-family: 'Font Awesome 5 Free'; 22 | font-weight: 400; 23 | } 24 | -------------------------------------------------------------------------------- /src/main/resources/static/font-awesome/less/solid.less: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.11.2 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @import "_variables.less"; 6 | 7 | @font-face { 8 | font-family: 'Font Awesome 5 Free'; 9 | font-style: normal; 10 | font-weight: 900; 11 | font-display: @fa-font-display; 12 | src: url('@{fa-font-path}/fa-solid-900.eot'); 13 | src: url('@{fa-font-path}/fa-solid-900.eot?#iefix') format('embedded-opentype'), 14 | url('@{fa-font-path}/fa-solid-900.woff2') format('woff2'), 15 | url('@{fa-font-path}/fa-solid-900.woff') format('woff'), 16 | url('@{fa-font-path}/fa-solid-900.ttf') format('truetype'), 17 | url('@{fa-font-path}/fa-solid-900.svg#fontawesome') format('svg'); 18 | } 19 | 20 | .fa, 21 | .fas { 22 | font-family: 'Font Awesome 5 Free'; 23 | font-weight: 900; 24 | } 25 | -------------------------------------------------------------------------------- /src/main/resources/static/font-awesome/less/v4-shims.less: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.11.2 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @import '_variables.less'; 6 | @import '_shims.less'; 7 | -------------------------------------------------------------------------------- /src/main/resources/static/font-awesome/scss/_animated.scss: -------------------------------------------------------------------------------- 1 | // Animated Icons 2 | // -------------------------- 3 | 4 | .#{$fa-css-prefix}-spin { 5 | animation: fa-spin 2s infinite linear; 6 | } 7 | 8 | .#{$fa-css-prefix}-pulse { 9 | animation: fa-spin 1s infinite steps(8); 10 | } 11 | 12 | @keyframes fa-spin { 13 | 0% { 14 | transform: rotate(0deg); 15 | } 16 | 17 | 100% { 18 | transform: rotate(360deg); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/main/resources/static/font-awesome/scss/_bordered-pulled.scss: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-border { 5 | border: solid .08em $fa-border-color; 6 | border-radius: .1em; 7 | padding: .2em .25em .15em; 8 | } 9 | 10 | .#{$fa-css-prefix}-pull-left { float: left; } 11 | .#{$fa-css-prefix}-pull-right { float: right; } 12 | 13 | .#{$fa-css-prefix}, 14 | .fas, 15 | .far, 16 | .fal, 17 | .fab { 18 | &.#{$fa-css-prefix}-pull-left { margin-right: .3em; } 19 | &.#{$fa-css-prefix}-pull-right { margin-left: .3em; } 20 | } 21 | -------------------------------------------------------------------------------- /src/main/resources/static/font-awesome/scss/_core.scss: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}, 5 | .fas, 6 | .far, 7 | .fal, 8 | .fad, 9 | .fab { 10 | -moz-osx-font-smoothing: grayscale; 11 | -webkit-font-smoothing: antialiased; 12 | display: inline-block; 13 | font-style: normal; 14 | font-variant: normal; 15 | text-rendering: auto; 16 | line-height: 1; 17 | } 18 | 19 | %fa-icon { 20 | @include fa-icon; 21 | } 22 | -------------------------------------------------------------------------------- /src/main/resources/static/font-awesome/scss/_fixed-width.scss: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .#{$fa-css-prefix}-fw { 4 | text-align: center; 5 | width: $fa-fw-width; 6 | } 7 | -------------------------------------------------------------------------------- /src/main/resources/static/font-awesome/scss/_larger.scss: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | // makes the font 33% larger relative to the icon container 5 | .#{$fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -.0667em; 9 | } 10 | 11 | .#{$fa-css-prefix}-xs { 12 | font-size: .75em; 13 | } 14 | 15 | .#{$fa-css-prefix}-sm { 16 | font-size: .875em; 17 | } 18 | 19 | @for $i from 1 through 10 { 20 | .#{$fa-css-prefix}-#{$i}x { 21 | font-size: $i * 1em; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/resources/static/font-awesome/scss/_list.scss: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-ul { 5 | list-style-type: none; 6 | margin-left: $fa-li-width * 5/4; 7 | padding-left: 0; 8 | 9 | > li { position: relative; } 10 | } 11 | 12 | .#{$fa-css-prefix}-li { 13 | left: -$fa-li-width; 14 | position: absolute; 15 | text-align: center; 16 | width: $fa-li-width; 17 | line-height: inherit; 18 | } 19 | -------------------------------------------------------------------------------- /src/main/resources/static/font-awesome/scss/_rotated-flipped.scss: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); } 5 | .#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); } 6 | .#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); } 7 | 8 | .#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); } 9 | .#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); } 10 | .#{$fa-css-prefix}-flip-both, .#{$fa-css-prefix}-flip-horizontal.#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(-1, -1, 2); } 11 | 12 | // Hook for IE8-9 13 | // ------------------------- 14 | 15 | :root { 16 | .#{$fa-css-prefix}-rotate-90, 17 | .#{$fa-css-prefix}-rotate-180, 18 | .#{$fa-css-prefix}-rotate-270, 19 | .#{$fa-css-prefix}-flip-horizontal, 20 | .#{$fa-css-prefix}-flip-vertical, 21 | .#{$fa-css-prefix}-flip-both { 22 | filter: none; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/resources/static/font-awesome/scss/_screen-reader.scss: -------------------------------------------------------------------------------- 1 | // Screen Readers 2 | // ------------------------- 3 | 4 | .sr-only { @include sr-only; } 5 | .sr-only-focusable { @include sr-only-focusable; } 6 | -------------------------------------------------------------------------------- /src/main/resources/static/font-awesome/scss/_stacked.scss: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-stack { 5 | display: inline-block; 6 | height: 2em; 7 | line-height: 2em; 8 | position: relative; 9 | vertical-align: middle; 10 | width: ($fa-fw-width*2); 11 | } 12 | 13 | .#{$fa-css-prefix}-stack-1x, 14 | .#{$fa-css-prefix}-stack-2x { 15 | left: 0; 16 | position: absolute; 17 | text-align: center; 18 | width: 100%; 19 | } 20 | 21 | .#{$fa-css-prefix}-stack-1x { 22 | line-height: inherit; 23 | } 24 | 25 | .#{$fa-css-prefix}-stack-2x { 26 | font-size: 2em; 27 | } 28 | 29 | .#{$fa-css-prefix}-inverse { 30 | color: $fa-inverse; 31 | } 32 | -------------------------------------------------------------------------------- /src/main/resources/static/font-awesome/scss/brands.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.11.2 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @import 'variables'; 6 | 7 | @font-face { 8 | font-family: 'Font Awesome 5 Brands'; 9 | font-style: normal; 10 | font-weight: normal; 11 | font-display: $fa-font-display; 12 | src: url('#{$fa-font-path}/fa-brands-400.eot'); 13 | src: url('#{$fa-font-path}/fa-brands-400.eot?#iefix') format('embedded-opentype'), 14 | url('#{$fa-font-path}/fa-brands-400.woff2') format('woff2'), 15 | url('#{$fa-font-path}/fa-brands-400.woff') format('woff'), 16 | url('#{$fa-font-path}/fa-brands-400.ttf') format('truetype'), 17 | url('#{$fa-font-path}/fa-brands-400.svg#fontawesome') format('svg'); 18 | } 19 | 20 | .fab { 21 | font-family: 'Font Awesome 5 Brands'; 22 | } 23 | -------------------------------------------------------------------------------- /src/main/resources/static/font-awesome/scss/fontawesome.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.11.2 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @import 'variables'; 6 | @import 'mixins'; 7 | @import 'core'; 8 | @import 'larger'; 9 | @import 'fixed-width'; 10 | @import 'list'; 11 | @import 'bordered-pulled'; 12 | @import 'animated'; 13 | @import 'rotated-flipped'; 14 | @import 'stacked'; 15 | @import 'icons'; 16 | @import 'screen-reader'; 17 | -------------------------------------------------------------------------------- /src/main/resources/static/font-awesome/scss/regular.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.11.2 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @import 'variables'; 6 | 7 | @font-face { 8 | font-family: 'Font Awesome 5 Free'; 9 | font-style: normal; 10 | font-weight: 400; 11 | font-display: $fa-font-display; 12 | src: url('#{$fa-font-path}/fa-regular-400.eot'); 13 | src: url('#{$fa-font-path}/fa-regular-400.eot?#iefix') format('embedded-opentype'), 14 | url('#{$fa-font-path}/fa-regular-400.woff2') format('woff2'), 15 | url('#{$fa-font-path}/fa-regular-400.woff') format('woff'), 16 | url('#{$fa-font-path}/fa-regular-400.ttf') format('truetype'), 17 | url('#{$fa-font-path}/fa-regular-400.svg#fontawesome') format('svg'); 18 | } 19 | 20 | .far { 21 | font-family: 'Font Awesome 5 Free'; 22 | font-weight: 400; 23 | } 24 | -------------------------------------------------------------------------------- /src/main/resources/static/font-awesome/scss/solid.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.11.2 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @import 'variables'; 6 | 7 | @font-face { 8 | font-family: 'Font Awesome 5 Free'; 9 | font-style: normal; 10 | font-weight: 900; 11 | font-display: $fa-font-display; 12 | src: url('#{$fa-font-path}/fa-solid-900.eot'); 13 | src: url('#{$fa-font-path}/fa-solid-900.eot?#iefix') format('embedded-opentype'), 14 | url('#{$fa-font-path}/fa-solid-900.woff2') format('woff2'), 15 | url('#{$fa-font-path}/fa-solid-900.woff') format('woff'), 16 | url('#{$fa-font-path}/fa-solid-900.ttf') format('truetype'), 17 | url('#{$fa-font-path}/fa-solid-900.svg#fontawesome') format('svg'); 18 | } 19 | 20 | .fa, 21 | .fas { 22 | font-family: 'Font Awesome 5 Free'; 23 | font-weight: 900; 24 | } 25 | -------------------------------------------------------------------------------- /src/main/resources/static/font-awesome/scss/v4-shims.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.11.2 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @import 'variables'; 6 | @import 'shims'; 7 | -------------------------------------------------------------------------------- /src/main/resources/static/font-awesome/webfonts/fa-brands-400.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/font-awesome/webfonts/fa-brands-400.eot -------------------------------------------------------------------------------- /src/main/resources/static/font-awesome/webfonts/fa-brands-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/font-awesome/webfonts/fa-brands-400.ttf -------------------------------------------------------------------------------- /src/main/resources/static/font-awesome/webfonts/fa-brands-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/font-awesome/webfonts/fa-brands-400.woff -------------------------------------------------------------------------------- /src/main/resources/static/font-awesome/webfonts/fa-brands-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/font-awesome/webfonts/fa-brands-400.woff2 -------------------------------------------------------------------------------- /src/main/resources/static/font-awesome/webfonts/fa-regular-400.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/font-awesome/webfonts/fa-regular-400.eot -------------------------------------------------------------------------------- /src/main/resources/static/font-awesome/webfonts/fa-regular-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/font-awesome/webfonts/fa-regular-400.ttf -------------------------------------------------------------------------------- /src/main/resources/static/font-awesome/webfonts/fa-regular-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/font-awesome/webfonts/fa-regular-400.woff -------------------------------------------------------------------------------- /src/main/resources/static/font-awesome/webfonts/fa-regular-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/font-awesome/webfonts/fa-regular-400.woff2 -------------------------------------------------------------------------------- /src/main/resources/static/font-awesome/webfonts/fa-solid-900.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/font-awesome/webfonts/fa-solid-900.eot -------------------------------------------------------------------------------- /src/main/resources/static/font-awesome/webfonts/fa-solid-900.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/font-awesome/webfonts/fa-solid-900.ttf -------------------------------------------------------------------------------- /src/main/resources/static/font-awesome/webfonts/fa-solid-900.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/font-awesome/webfonts/fa-solid-900.woff -------------------------------------------------------------------------------- /src/main/resources/static/font-awesome/webfonts/fa-solid-900.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/font-awesome/webfonts/fa-solid-900.woff2 -------------------------------------------------------------------------------- /src/main/resources/static/fonts/Material-Design-Iconic-Font.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/fonts/Material-Design-Iconic-Font.eot -------------------------------------------------------------------------------- /src/main/resources/static/fonts/Material-Design-Iconic-Font.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/fonts/Material-Design-Iconic-Font.ttf -------------------------------------------------------------------------------- /src/main/resources/static/fonts/Material-Design-Iconic-Font.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/fonts/Material-Design-Iconic-Font.woff -------------------------------------------------------------------------------- /src/main/resources/static/fonts/Material-Design-Iconic-Font.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/fonts/Material-Design-Iconic-Font.woff2 -------------------------------------------------------------------------------- /src/main/resources/static/fonts/Simple-Line-Icons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/fonts/Simple-Line-Icons.eot -------------------------------------------------------------------------------- /src/main/resources/static/fonts/Simple-Line-Icons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/fonts/Simple-Line-Icons.ttf -------------------------------------------------------------------------------- /src/main/resources/static/fonts/Simple-Line-Icons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/fonts/Simple-Line-Icons.woff -------------------------------------------------------------------------------- /src/main/resources/static/fonts/Simple-Line-Icons.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/fonts/Simple-Line-Icons.woff2 -------------------------------------------------------------------------------- /src/main/resources/static/fonts/cryptocoins.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/fonts/cryptocoins.ttf -------------------------------------------------------------------------------- /src/main/resources/static/fonts/cryptocoins.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/fonts/cryptocoins.woff -------------------------------------------------------------------------------- /src/main/resources/static/fonts/cryptocoins.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/fonts/cryptocoins.woff2 -------------------------------------------------------------------------------- /src/main/resources/static/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /src/main/resources/static/fonts/icomoon.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/fonts/icomoon.eot -------------------------------------------------------------------------------- /src/main/resources/static/fonts/icomoon.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/fonts/icomoon.ttf -------------------------------------------------------------------------------- /src/main/resources/static/fonts/icomoon.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/fonts/icomoon.woff -------------------------------------------------------------------------------- /src/main/resources/static/fonts/materialdesignicons-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/fonts/materialdesignicons-webfont.eot -------------------------------------------------------------------------------- /src/main/resources/static/fonts/materialdesignicons-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/fonts/materialdesignicons-webfont.ttf -------------------------------------------------------------------------------- /src/main/resources/static/fonts/materialdesignicons-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/fonts/materialdesignicons-webfont.woff -------------------------------------------------------------------------------- /src/main/resources/static/fonts/materialdesignicons-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/fonts/materialdesignicons-webfont.woff2 -------------------------------------------------------------------------------- /src/main/resources/static/fonts/themify.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/fonts/themify.eot -------------------------------------------------------------------------------- /src/main/resources/static/fonts/themify.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/fonts/themify.ttf -------------------------------------------------------------------------------- /src/main/resources/static/fonts/themify.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/fonts/themify.woff -------------------------------------------------------------------------------- /src/main/resources/static/fonts/weathericons-regular-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/fonts/weathericons-regular-webfont.eot -------------------------------------------------------------------------------- /src/main/resources/static/fonts/weathericons-regular-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/fonts/weathericons-regular-webfont.ttf -------------------------------------------------------------------------------- /src/main/resources/static/fonts/weathericons-regular-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/fonts/weathericons-regular-webfont.woff -------------------------------------------------------------------------------- /src/main/resources/static/fonts/weathericons-regular-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/fonts/weathericons-regular-webfont.woff2 -------------------------------------------------------------------------------- /src/main/resources/static/futurico/futurico.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/futurico/futurico.png -------------------------------------------------------------------------------- /src/main/resources/static/futurico/futurico@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/futurico/futurico@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/images/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/images/1.jpg -------------------------------------------------------------------------------- /src/main/resources/static/images/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/images/2.jpg -------------------------------------------------------------------------------- /src/main/resources/static/images/3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/images/3.jpg -------------------------------------------------------------------------------- /src/main/resources/static/images/4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/images/4.jpg -------------------------------------------------------------------------------- /src/main/resources/static/images/5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/images/5.jpg -------------------------------------------------------------------------------- /src/main/resources/static/images/6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/images/6.jpg -------------------------------------------------------------------------------- /src/main/resources/static/images/7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/images/7.jpg -------------------------------------------------------------------------------- /src/main/resources/static/images/8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/images/8.jpg -------------------------------------------------------------------------------- /src/main/resources/static/images/dots.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/images/dots.png -------------------------------------------------------------------------------- /src/main/resources/static/images/error-bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/images/error-bg.jpg -------------------------------------------------------------------------------- /src/main/resources/static/images/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/images/favicon.png -------------------------------------------------------------------------------- /src/main/resources/static/images/folder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/images/folder.png -------------------------------------------------------------------------------- /src/main/resources/static/images/google-docs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/images/google-docs.png -------------------------------------------------------------------------------- /src/main/resources/static/images/google.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/images/google.png -------------------------------------------------------------------------------- /src/main/resources/static/images/img1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/images/img1.jpg -------------------------------------------------------------------------------- /src/main/resources/static/images/img2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/images/img2.jpg -------------------------------------------------------------------------------- /src/main/resources/static/images/img3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/images/img3.jpg -------------------------------------------------------------------------------- /src/main/resources/static/images/img4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/images/img4.jpg -------------------------------------------------------------------------------- /src/main/resources/static/images/img5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/images/img5.jpg -------------------------------------------------------------------------------- /src/main/resources/static/images/img6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/images/img6.jpg -------------------------------------------------------------------------------- /src/main/resources/static/images/login-register.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/images/login-register.jpg -------------------------------------------------------------------------------- /src/main/resources/static/images/logo-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/images/logo-icon.png -------------------------------------------------------------------------------- /src/main/resources/static/images/logo-light-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/images/logo-light-icon.png -------------------------------------------------------------------------------- /src/main/resources/static/images/logo-light-text.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/images/logo-light-text.png -------------------------------------------------------------------------------- /src/main/resources/static/images/logo-text.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/images/logo-text.png -------------------------------------------------------------------------------- /src/main/resources/static/images/pp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/images/pp.png -------------------------------------------------------------------------------- /src/main/resources/static/images/sheets.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/images/sheets.png -------------------------------------------------------------------------------- /src/main/resources/static/images/slides.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/images/slides.png -------------------------------------------------------------------------------- /src/main/resources/static/js/custom.js: -------------------------------------------------------------------------------- 1 | $(function() { 2 | $(".preloader").fadeOut(); 3 | }); 4 | $(function() { 5 | $('[data-toggle="tooltip"]').tooltip() 6 | }); 7 | // ============================================================== 8 | // Login and Recover Password 9 | // ============================================================== 10 | $('#to-recover').on("click", function() { 11 | $("#loginform").slideUp(); 12 | $("#recoverform").fadeIn(); 13 | }); -------------------------------------------------------------------------------- /src/main/resources/static/line/line.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/line/line.png -------------------------------------------------------------------------------- /src/main/resources/static/line/line@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/line/line@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/minimal/aero.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/minimal/aero.png -------------------------------------------------------------------------------- /src/main/resources/static/minimal/aero@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/minimal/aero@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/minimal/blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/minimal/blue.png -------------------------------------------------------------------------------- /src/main/resources/static/minimal/blue@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/minimal/blue@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/minimal/green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/minimal/green.png -------------------------------------------------------------------------------- /src/main/resources/static/minimal/green@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/minimal/green@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/minimal/grey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/minimal/grey.png -------------------------------------------------------------------------------- /src/main/resources/static/minimal/grey@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/minimal/grey@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/minimal/minimal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/minimal/minimal.png -------------------------------------------------------------------------------- /src/main/resources/static/minimal/minimal@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/minimal/minimal@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/minimal/orange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/minimal/orange.png -------------------------------------------------------------------------------- /src/main/resources/static/minimal/orange@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/minimal/orange@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/minimal/pink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/minimal/pink.png -------------------------------------------------------------------------------- /src/main/resources/static/minimal/pink@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/minimal/pink@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/minimal/purple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/minimal/purple.png -------------------------------------------------------------------------------- /src/main/resources/static/minimal/purple@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/minimal/purple@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/minimal/red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/minimal/red.png -------------------------------------------------------------------------------- /src/main/resources/static/minimal/red@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/minimal/red@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/minimal/yellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/minimal/yellow.png -------------------------------------------------------------------------------- /src/main/resources/static/minimal/yellow@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/minimal/yellow@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/polaris/polaris.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/polaris/polaris.png -------------------------------------------------------------------------------- /src/main/resources/static/polaris/polaris@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/polaris/polaris@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/square/aero.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/square/aero.png -------------------------------------------------------------------------------- /src/main/resources/static/square/aero@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/square/aero@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/square/blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/square/blue.png -------------------------------------------------------------------------------- /src/main/resources/static/square/blue@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/square/blue@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/square/green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/square/green.png -------------------------------------------------------------------------------- /src/main/resources/static/square/green@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/square/green@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/square/grey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/square/grey.png -------------------------------------------------------------------------------- /src/main/resources/static/square/grey@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/square/grey@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/square/orange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/square/orange.png -------------------------------------------------------------------------------- /src/main/resources/static/square/orange@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/square/orange@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/square/pink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/square/pink.png -------------------------------------------------------------------------------- /src/main/resources/static/square/pink@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/square/pink@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/square/purple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/square/purple.png -------------------------------------------------------------------------------- /src/main/resources/static/square/purple@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/square/purple@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/square/red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/square/red.png -------------------------------------------------------------------------------- /src/main/resources/static/square/red@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/square/red@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/square/square.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/square/square.png -------------------------------------------------------------------------------- /src/main/resources/static/square/square@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/square/square@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/square/yellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/square/yellow.png -------------------------------------------------------------------------------- /src/main/resources/static/square/yellow@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/static/square/yellow@2x.png -------------------------------------------------------------------------------- /src/main/resources/templates/general/footer.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/resources/templates/general/head.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | CRM Admin Template - The Ultimate Multipurpose admin template -------------------------------------------------------------------------------- /src/main/resources/templates/general/page-titles.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

CRM

4 |
5 |
6 |
7 |
8 |
9 |
-------------------------------------------------------------------------------- /src/main/resources/templates/logout.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wp-ahmed/crm/0d1e04d8842ff6b5cf829fa5e6e01805873839f0/src/main/resources/templates/logout.html -------------------------------------------------------------------------------- /src/test/java/site/easy/to/build/crm/CrmApplicationTests.java: -------------------------------------------------------------------------------- 1 | package site.easy.to.build.crm; 2 | 3 | import org.junit.jupiter.api.Test; 4 | import org.springframework.boot.test.context.SpringBootTest; 5 | 6 | @SpringBootTest 7 | class CrmApplicationTests { 8 | 9 | @Test 10 | void contextLoads() { 11 | } 12 | 13 | } 14 | --------------------------------------------------------------------------------