From d153c5af24cdde335d4c586716657092b814e5cf Mon Sep 17 00:00:00 2001 From: risadmin_prod Date: Fri, 26 Sep 2025 07:05:18 +0000 Subject: [PATCH] build_app --- .../Builders/Services/BuilderService.java | 3 + .../basicp1/Controllers/FormaController.java | 91 +++ .../tokenFree_FormaController.java | 91 +++ .../com/realnet/basicp1/Entity/Forma.java | 29 + .../basicp1/Repository/FormaRepository.java | 28 + .../basicp1/Services/FormaService.java | 83 ++ .../basicp1/Forma/Forma.component.html | 248 ++++++ .../basicp1/Forma/Forma.component.scss | 748 ++++++++++++++++++ .../basicp1/Forma/Forma.component.ts | 328 ++++++++ .../basicp1/Forma/Forma.service.ts | 37 + .../basicp1/Forma/Forma_cardvariable.ts | 4 + .../app/modules/main/main-routing.module.ts | 4 + .../src/app/modules/main/main.module.ts | 4 + .../authsec_mysql/mysql/wf_table/wf_table.sql | 2 + 14 files changed, 1700 insertions(+) create mode 100644 testnewang03-backs-b/authsec_springboot/backend/src/main/java/com/realnet/basicp1/Controllers/FormaController.java create mode 100644 testnewang03-backs-b/authsec_springboot/backend/src/main/java/com/realnet/basicp1/Controllers/tokenFree_FormaController.java create mode 100644 testnewang03-backs-b/authsec_springboot/backend/src/main/java/com/realnet/basicp1/Entity/Forma.java create mode 100644 testnewang03-backs-b/authsec_springboot/backend/src/main/java/com/realnet/basicp1/Repository/FormaRepository.java create mode 100644 testnewang03-backs-b/authsec_springboot/backend/src/main/java/com/realnet/basicp1/Services/FormaService.java create mode 100644 testnewang03-front-f/authsec_angularClarity_modern/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/basicp1/Forma/Forma.component.html create mode 100644 testnewang03-front-f/authsec_angularClarity_modern/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/basicp1/Forma/Forma.component.scss create mode 100644 testnewang03-front-f/authsec_angularClarity_modern/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/basicp1/Forma/Forma.component.ts create mode 100644 testnewang03-front-f/authsec_angularClarity_modern/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/basicp1/Forma/Forma.service.ts create mode 100644 testnewang03-front-f/authsec_angularClarity_modern/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/basicp1/Forma/Forma_cardvariable.ts create mode 100755 testnewang03-newdba-d/authsec_mysql/mysql/wf_table/wf_table.sql diff --git a/testnewang03-backs-b/authsec_springboot/backend/src/main/java/com/realnet/Builders/Services/BuilderService.java b/testnewang03-backs-b/authsec_springboot/backend/src/main/java/com/realnet/Builders/Services/BuilderService.java index f9801fb..55b4bad 100644 --- a/testnewang03-backs-b/authsec_springboot/backend/src/main/java/com/realnet/Builders/Services/BuilderService.java +++ b/testnewang03-backs-b/authsec_springboot/backend/src/main/java/com/realnet/Builders/Services/BuilderService.java @@ -69,6 +69,9 @@ public class BuilderService { executeDump(true); // ADD OTHER SERVICE +addCustomMenu( "Forma","Forma", "Transcations"); + + System.out.println("dashboard and menu inserted..."); diff --git a/testnewang03-backs-b/authsec_springboot/backend/src/main/java/com/realnet/basicp1/Controllers/FormaController.java b/testnewang03-backs-b/authsec_springboot/backend/src/main/java/com/realnet/basicp1/Controllers/FormaController.java new file mode 100644 index 0000000..9368165 --- /dev/null +++ b/testnewang03-backs-b/authsec_springboot/backend/src/main/java/com/realnet/basicp1/Controllers/FormaController.java @@ -0,0 +1,91 @@ +package com.realnet.basicp1.Controllers; +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; + import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import com.fasterxml.jackson.core.JsonProcessingException; +import org.springframework.web.bind.annotation.CrossOrigin; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.realnet.config.EmailService; +import com.realnet.users.entity1.AppUser; +import com.realnet.users.service1.AppUserServiceImpl; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.springframework.data.domain.*; +import com.realnet.fnd.response.EntityResponse; +import org.springframework.http.*; +import org.springframework.beans.factory.annotation.*; +import com.realnet.basicp1.Entity.Forma; +import com.realnet.basicp1.Services.FormaService ; + + + + +@RequestMapping(value = "/Forma") + @CrossOrigin("*") +@RestController +public class FormaController { + @Autowired + private FormaService Service; + +@Value("${projectPath}") + private String projectPath; + + + + + + @PostMapping("/Forma") + public Forma Savedata(@RequestBody Forma data) { + Forma save = Service.Savedata(data) ; + + + + System.out.println("data saved..." + save); + + return save; + } +@PutMapping("/Forma/{id}") + public Forma update(@RequestBody Forma data,@PathVariable Integer id ) { + Forma update = Service.update(data,id); + System.out.println("data update..." + update); + return update; + } +// get all with pagination + @GetMapping("/Forma/getall/page") + public Page getall(@RequestParam(value = "page", required = false) Integer page, + @RequestParam(value = "size", required = false) Integer size) { + Pageable paging = PageRequest.of(page, size); + Page get = Service.getAllWithPagination(paging); + + return get; + + } + @GetMapping("/Forma") + public List getdetails() { + List get = Service.getdetails(); + return get; +} +// get all without authentication + + @GetMapping("/token/Forma") + public List getallwioutsec() { + List get = Service.getdetails(); + return get; +} +@GetMapping("/Forma/{id}") + public Forma getdetailsbyId(@PathVariable Integer id ) { + Forma get = Service.getdetailsbyId(id); + return get; + } +@DeleteMapping("/Forma/{id}") + public ResponseEntity delete_by_id(@PathVariable Integer id ) { + Service.delete_by_id(id); + return new ResponseEntity<>(new EntityResponse("Deleted"), HttpStatus.OK); + + } + + + + + +} \ No newline at end of file diff --git a/testnewang03-backs-b/authsec_springboot/backend/src/main/java/com/realnet/basicp1/Controllers/tokenFree_FormaController.java b/testnewang03-backs-b/authsec_springboot/backend/src/main/java/com/realnet/basicp1/Controllers/tokenFree_FormaController.java new file mode 100644 index 0000000..002a998 --- /dev/null +++ b/testnewang03-backs-b/authsec_springboot/backend/src/main/java/com/realnet/basicp1/Controllers/tokenFree_FormaController.java @@ -0,0 +1,91 @@ +package com.realnet.basicp1.Controllers; +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; + import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import com.fasterxml.jackson.core.JsonProcessingException; +import org.springframework.web.bind.annotation.CrossOrigin; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.realnet.config.EmailService; +import com.realnet.users.entity1.AppUser; +import com.realnet.users.service1.AppUserServiceImpl; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.springframework.data.domain.*; +import com.realnet.fnd.response.EntityResponse; +import org.springframework.http.*; +import org.springframework.beans.factory.annotation.*; +import com.realnet.basicp1.Entity.Forma; +import com.realnet.basicp1.Services.FormaService ; + + + + +@RequestMapping(value = "/token/Forma") + @CrossOrigin("*") +@RestController +public class tokenFree_FormaController { + @Autowired + private FormaService Service; + +@Value("${projectPath}") + private String projectPath; + + + + + + @PostMapping("/Forma") + public Forma Savedata(@RequestBody Forma data) { + Forma save = Service.Savedata(data) ; + + + + System.out.println("data saved..." + save); + + return save; + } +@PutMapping("/Forma/{id}") + public Forma update(@RequestBody Forma data,@PathVariable Integer id ) { + Forma update = Service.update(data,id); + System.out.println("data update..." + update); + return update; + } +// get all with pagination + @GetMapping("/Forma/getall/page") + public Page getall(@RequestParam(value = "page", required = false) Integer page, + @RequestParam(value = "size", required = false) Integer size) { + Pageable paging = PageRequest.of(page, size); + Page get = Service.getAllWithPagination(paging); + + return get; + + } + @GetMapping("/Forma") + public List getdetails() { + List get = Service.getdetails(); + return get; +} +// get all without authentication + + @GetMapping("/token/Forma") + public List getallwioutsec() { + List get = Service.getdetails(); + return get; +} +@GetMapping("/Forma/{id}") + public Forma getdetailsbyId(@PathVariable Integer id ) { + Forma get = Service.getdetailsbyId(id); + return get; + } +@DeleteMapping("/Forma/{id}") + public ResponseEntity delete_by_id(@PathVariable Integer id ) { + Service.delete_by_id(id); + return new ResponseEntity<>(new EntityResponse("Deleted"), HttpStatus.OK); + + } + + + + + +} \ No newline at end of file diff --git a/testnewang03-backs-b/authsec_springboot/backend/src/main/java/com/realnet/basicp1/Entity/Forma.java b/testnewang03-backs-b/authsec_springboot/backend/src/main/java/com/realnet/basicp1/Entity/Forma.java new file mode 100644 index 0000000..4362270 --- /dev/null +++ b/testnewang03-backs-b/authsec_springboot/backend/src/main/java/com/realnet/basicp1/Entity/Forma.java @@ -0,0 +1,29 @@ +package com.realnet.basicp1.Entity; + import lombok.*; +import com.realnet.WhoColumn.Entity.Extension; + import javax.persistence.*; + import java.time.LocalDateTime; + import java.util.*; + + + + + @Entity + @Data + public class Forma extends Extension { + /** + * + */ + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + +private String name; + +@Column(length = 2000) +private String description; + + +} diff --git a/testnewang03-backs-b/authsec_springboot/backend/src/main/java/com/realnet/basicp1/Repository/FormaRepository.java b/testnewang03-backs-b/authsec_springboot/backend/src/main/java/com/realnet/basicp1/Repository/FormaRepository.java new file mode 100644 index 0000000..6cd9f61 --- /dev/null +++ b/testnewang03-backs-b/authsec_springboot/backend/src/main/java/com/realnet/basicp1/Repository/FormaRepository.java @@ -0,0 +1,28 @@ +package com.realnet.basicp1.Repository; + + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; + +import org.springframework.stereotype.Repository; +import java.util.*; + + + + + + + +import com.realnet.basicp1.Entity.Forma; + +@Repository +public interface FormaRepository extends JpaRepository { + +@Query(value = "select * from forma where created_by=?1", nativeQuery = true) + List findAll(Long creayedBy); + +@Query(value = "select * from forma where created_by=?1", nativeQuery = true) + Page findAll( Long creayedBy,Pageable page); +} \ No newline at end of file diff --git a/testnewang03-backs-b/authsec_springboot/backend/src/main/java/com/realnet/basicp1/Services/FormaService.java b/testnewang03-backs-b/authsec_springboot/backend/src/main/java/com/realnet/basicp1/Services/FormaService.java new file mode 100644 index 0000000..5ff7944 --- /dev/null +++ b/testnewang03-backs-b/authsec_springboot/backend/src/main/java/com/realnet/basicp1/Services/FormaService.java @@ -0,0 +1,83 @@ +package com.realnet.basicp1.Services; +import com.realnet.basicp1.Repository.FormaRepository; +import com.realnet.basicp1.Entity.Forma +;import java.util.*; + +import org.springframework.beans.factory.annotation.Autowired; +import com.realnet.SequenceGenerator.Service.SequenceService; +import org.springframework.data.domain.Page; +import com.realnet.realm.Entity.Realm; +import com.realnet.realm.Services.RealmService; +import org.springframework.data.domain.Pageable; +import org.springframework.http.*; +import com.realnet.users.service1.AppUserServiceImpl; +import com.realnet.users.entity1.AppUser; + + + + + import org.springframework.stereotype.Service; + +@Service + public class FormaService { +@Autowired +private FormaRepository Repository; + @Autowired + private AppUserServiceImpl userService; +@Autowired + private RealmService realmService; + + + +public Forma Savedata(Forma data) { + + + + + data.setUpdatedBy(getUser().getUserId()); + data.setCreatedBy(getUser().getUserId()); + data.setAccountId(getUser().getAccount().getAccount_id()); +Forma save = Repository.save(data); + return save; + } + + +// get all with pagination + public Page getAllWithPagination(Pageable page) { + return Repository.findAll( getUser().getUserId(),page); + } +public List getdetails() { + List realm = realmService.findByUserId(getUser().getUserId()); +List all = Repository.findAll(getUser().getUserId()); + + return all ; } + + +public Forma getdetailsbyId(Integer id) { + return Repository.findById(id).get(); + } + + + public void delete_by_id(Integer id) { + Repository.deleteById(id); +} + + +public Forma update(Forma data,Integer id) { + Forma old = Repository.findById(id).get(); +old.setName(data.getName()); + +old.setDescription(data.getDescription()); + +final Forma test = Repository.save(old); + data.setUpdatedBy(getUser().getUserId()); + return test;} + + + + + public AppUser getUser() { + AppUser user = userService.getLoggedInUser(); + return user; + + }} diff --git a/testnewang03-front-f/authsec_angularClarity_modern/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/basicp1/Forma/Forma.component.html b/testnewang03-front-f/authsec_angularClarity_modern/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/basicp1/Forma/Forma.component.html new file mode 100644 index 0000000..e677982 --- /dev/null +++ b/testnewang03-front-f/authsec_angularClarity_modern/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/basicp1/Forma/Forma.component.html @@ -0,0 +1,248 @@ + +
+
+
+
+

Forma

+
+
+
+ + +
+
+ +
+
+ +
+
+
+ + +
+
+
+ + + + + LOADING ... + +
{{error}}
+
+ + + + + + Name + + + + + + + + + Description + + + + + + + Action + + + + +{{user.name }} + + + + + + + + + + + +
Who Column
+
Account ID: {{user.accountId}}
+
Created At: {{user.createdAt| date}}
+
Created By: {{user.createdBy}}
+
Updated At: {{user.updatedAt | date}}
+
Updated By: {{user.updatedBy}}
+
+
+
+ + + + + + + + + + +
+ + + + Record per page + {{pagination.firstItem + 1}} - {{pagination.lastItem + 1}} + of {{pagination.totalItems}} Records + + +
+ +
+
+
+ +
Name{{user.name}}
+ + +
Description{{user.description}}
+ + +
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/testnewang03-front-f/authsec_angularClarity_modern/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/basicp1/Forma/Forma.component.scss b/testnewang03-front-f/authsec_angularClarity_modern/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/basicp1/Forma/Forma.component.scss new file mode 100644 index 0000000..dd4a588 --- /dev/null +++ b/testnewang03-front-f/authsec_angularClarity_modern/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/basicp1/Forma/Forma.component.scss @@ -0,0 +1,748 @@ + +@import '../../../../../../styles.scss'; + +// Import design tokens +@import '../../../../../../styles/design-tokens'; +// Forma Styles +.ug-hero { + display: flex; + justify-content: space-between; + align-items: center; + padding: 24px 32px; + background: linear-gradient(135deg, var(--theme-primary) 0%, var(--theme-accent) 100%); + color: white; + border-radius: 16px; + margin-bottom: 24px; + box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); + backdrop-filter: blur(16px); + border: 1px solid rgba(255, 255, 255, 0.2); + font-family: var(--theme-font-primary); + + &__content { + display: flex; + align-items: center; + gap: 16px; + } + + &__icon { + background: rgba(255, 255, 255, 0.2); + border-radius: 50%; + padding: 16px; + display: flex; + align-items: center; + justify-content: center; + + clr-icon { + width: 36px; + height: 36px; + color: white; + } + } + + &__title { + font-size: 28px; + font-weight: 700; + margin: 0; + color: white; + font-family: var(--theme-font-secondary); + } + + &__subtitle { + font-size: 16px; + margin: 0; + opacity: 0.9; + color: rgba(255, 255, 255, 0.8); + } + + &__actions { + display: flex; + gap: 12px; + } +} + +.ug-btn-text { + margin-left: 8px; +} + +// Modern Button Styles using ThemeService +.ug-btn { + display: inline-flex; + align-items: center; + justify-content: center; + gap: 8px; + padding: 12px 20px; + font-size: 14px; + font-weight: 500; + line-height: 1; + border-radius: 8px; + border: 1px solid transparent; + cursor: pointer; + transition: all 200ms ease-out; + text-decoration: none; + position: relative; + overflow: hidden; + font-family: var(--theme-font-primary); + z-index: 1; + + &:focus { + outline: 2px solid var(--theme-primary); + outline-offset: 2px; + } + + &:disabled { + opacity: 0.5; + cursor: not-allowed; + pointer-events: none; + } + + // Sizes + &.ug-btn-sm { + padding: 8px 16px; + font-size: 13px; + height: 32px; + } + + &.ug-btn-md { + padding: 12px 20px; + font-size: 14px; + height: 40px; + } + + &.ug-btn-lg { + padding: 16px 24px; + font-size: 16px; + height: 48px; + } + + // Variants + &.ug-btn-primary { + background: linear-gradient(135deg, var(--theme-primary) 0%, var(--theme-accent) 100%); + color: white; + border-color: var(--theme-primary); + box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); + + &:hover { + background: linear-gradient(135deg, var(--theme-primary, #0284c7) 0%, var(--theme-accent, #7c3aed) 100%); + transform: translateY(-2px); + box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); + } + + &:active { + transform: translateY(0); + box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); + } + } + + &.ug-btn-secondary { + background: var(--theme-surface); + color: var(--theme-text); + border-color: rgba(0, 0, 0, 0.1); + box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); + + &:hover { + background: var(--theme-background); + border-color: rgba(0, 0, 0, 0.2); + transform: translateY(-1px); + box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); + } + } + + &.ug-btn-outline { + background: transparent; + color: var(--theme-secondary); + border-color: var(--theme-secondary); + box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); + + &:hover { + background: rgba(100, 116, 139, 0.1); // var(--theme-secondary) with 10% opacity + border-color: var(--theme-secondary); + color: var(--theme-secondary); + box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); + } + } + + &.ug-btn-error { + background: var(--theme-error, #ef4444); + color: white; + border-color: var(--theme-error, #ef4444); + box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); + + &:hover { + background: var(--theme-error-dark, #dc2626); + border-color: var(--theme-error-dark, #dc2626); + transform: translateY(-2px); + box-shadow: 0 10px 15px -3px rgba(239, 68, 68, 0.3), 0 4px 6px -2px rgba(239, 68, 68, 0.1); + } + } + + &.ug-btn-ghost { + background: transparent; + color: var(--theme-text-secondary); + border-color: transparent; + + &:hover { + background: var(--theme-background); + color: var(--theme-text); + } + } +} + +.ug-toolbar { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 24px; + padding: 16px; + background: var(--theme-surface); + border-radius: 12px; + box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); + + &__left { + flex: 1; + } + + &__right { + display: flex; + gap: 8px; + } +} + +.ug-search { + position: relative; + max-width: 400px; + + clr-icon { + position: absolute; + left: 12px; + top: 50%; + transform: translateY(-50%); + color: #9ca3af; + z-index: 1; + } + + &__input { + width: 100%; + padding: 12px 12px 12px 40px; + border: 1px solid rgba(0, 0, 0, 0.1); + border-radius: 8px; + font-size: 14px; + transition: all 200ms ease-out; + background: var(--theme-surface); + color: var(--theme-text); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.05); + + &:focus { + outline: none; + border-color: var(--theme-primary); + box-shadow: 0 0 0 3px rgba(14, 165, 233, 0.1); // var(--theme-primary) with 10% opacity + } + } +} + +.ug-view-toggle { + display: flex; + border: 1px solid #d1d5db; + border-radius: 8px; + overflow: hidden; + + .ug-btn { + border-radius: 0; + border: none; + background: var(--theme-surface); + color: var(--theme-text-secondary); + + &:first-child { + border-right: 1px solid #d1d5db; + } + + &.ug-btn-primary { + background: var(--theme-primary); + color: white; + } + } +} + +// Modern Table Styles +.ug-grid { + background: var(--theme-surface); + border-radius: 16px; + overflow: hidden; + box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); + margin-bottom: 24px; + + ::ng-deep .datagrid { + .datagrid-head { + background: var(--theme-background); + + .datagrid-column { + padding: 16px 24px; + font-size: 12px; + font-weight: 600; + color: var(--theme-text-secondary); + text-transform: uppercase; + letter-spacing: 0.05em; + border-bottom: 1px solid #e5e7eb; + } + } + + .datagrid-row { + transition: background-color 150ms ease-out; + + &:hover { + background: var(--theme-background); + } + + &:not(:last-child) { + border-bottom: 1px solid #e5e7eb; + } + + .datagrid-cell { + padding: 16px 24px; + font-size: 14px; + color: var(--theme-text); + } + } + + .datagrid-footer { + background: var(--theme-background); + border-top: 1px solid #e5e7eb; + padding: 16px 24px; + } + } +} + +.ug-grid-footer { + background: var(--theme-background); + border-top: 1px solid #e5e7eb; +} + +// Modern Card Styles - More beautiful design +.ug-cards { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); + gap: 24px; + margin-bottom: 24px; +} + +.ug-card-item { + background: var(--theme-surface); + border: 1px solid rgba(0, 0, 0, 0.06); + border-radius: var(--theme-border-radius); // Using theme variable + box-shadow: var(--theme-shadow); // Using theme variable + overflow: hidden; + display: flex; + flex-direction: column; + transition: all 300ms cubic-bezier(0.4, 0, 0.2, 1); + + &:hover { + transform: translateY(-5px); + box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25); + border-color: rgba(14, 165, 233, 0.3); // var(--theme-primary) with 30% opacity + } + + &__header { + display: flex; + align-items: center; + gap: 10px; + padding: 16px; + background: linear-gradient(135deg, rgba(14, 165, 233, 0.1), transparent); // var(--theme-primary) with 10% opacity + min-height: 60px; + } + + &__icon { + clr-icon { + width: 24px; + height: 24px; + color: var(--theme-primary); + } + } + + &__title { + font-weight: 700; + flex: 1 1 auto; + font-size: 18px; + color: var(--theme-text); + max-width: 60%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + + &__badge { + margin-left: auto; + display: inline-flex; + align-items: center; + padding: 4px 12px; + font-size: 12px; + font-weight: 600; + border-radius: 9999px; + text-transform: uppercase; + letter-spacing: 0.05em; + } + + &__body { + padding: 16px; + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 12px; + } + + &__footer { + padding: 16px; + display: flex; + gap: 8px; + border-top: 1px solid rgba(0, 0, 0, 0.06); + background: var(--theme-background); + } +} + +.ug-kv { + display: flex; + justify-content: space-between; + font-size: 14px; + + span { + color: var(--theme-text-secondary); + } + + strong { + color: var(--theme-text); + font-weight: 500; + text-align: right; + max-width: 60%; + overflow: hidden; + text-overflow: ellipsis; + } +} + +// Theme the card footer buttons +.ug-card-item__footer .ug-btn { + border-radius: 10px; + flex: 1; + justify-content: center; +} + +.ug-card-item__footer .ug-btn.ug-btn-outline { + border: 1px solid var(--theme-secondary); + color: var(--theme-secondary); + background: transparent; + + &:hover { + background: rgba(100, 116, 139, 0.1); // var(--theme-secondary) with 10% opacity + border-color: var(--theme-secondary); + color: var(--theme-secondary); + } +} + +.ug-card-item__footer .ug-btn.ug-btn-error { + background: var(--theme-error, #ef4444); + color: #fff; + border-color: var(--theme-error, #ef4444); + + &:hover { + background: var(--theme-error-dark, #dc2626); + border-color: var(--theme-error-dark, #dc2626); + transform: translateY(-2px); + } +} + +// Table view action buttons +.ug-action-item { + @extend .ug-btn; + @extend .ug-btn-ghost; + @extend .ug-btn-sm; + width: 100%; + justify-content: flex-start; + margin-bottom: 4px; + text-align: left; + + clr-icon { + width: 16px; + height: 16px; + margin-right: 8px; + } + + &.ug-btn-error { + color: var(--theme-error, #ef4444); + + &:hover { + background: rgba(239, 68, 68, 0.1); + } + } +} + +// Ensure action overflow is visible +::ng-deep .datagrid-action-overflow { + button.action-item { + display: flex; + align-items: center; + width: 100%; + text-align: left; + padding: 8px 12px; + + clr-icon { + margin-right: 8px; + } + } +} + +// Status Badges +.ug-status-badge { + display: inline-flex; + align-items: center; + padding: 6px 16px; + font-size: 13px; + font-weight: 600; + border-radius: 9999px; + text-transform: uppercase; + letter-spacing: 0.05em; +} + +.ug-status-enabled { + background: linear-gradient(135deg, rgba(16, 185, 129, 0.1) 0%, rgba(16, 185, 129, 0.05) 100%); + color: #10b981; +} + +.ug-status-disabled { + background: linear-gradient(135deg, rgba(239, 68, 68, 0.1) 0%, rgba(239, 68, 68, 0.05) 100%); + color: #ef4444; +} + +// Form Styles +.ug-form-group { + margin-bottom: 20px; +} + +.ug-form-label { + display: block; + font-size: 14px; + font-weight: 500; + color: var(--theme-text); + margin-bottom: 8px; + font-family: var(--theme-font-primary); +} + +.ug-form-input, .ug-form-select { + width: 100%; + padding: 12px 16px; + font-size: 14px; + line-height: 1.5; + color: var(--theme-text); + background: var(--theme-surface); + border: 1px solid rgba(0, 0, 0, 0.1); + border-radius: 8px; + transition: all 200ms ease-out; + margin-bottom: 0; + font-family: var(--theme-font-primary); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.05); + + &:focus { + outline: none; + border-color: var(--theme-primary); + box-shadow: 0 0 0 3px rgba(14, 165, 233, 0.1); // var(--theme-primary) with 10% opacity + } + + &:disabled { + background: var(--theme-background); + color: var(--theme-text-secondary); + cursor: not-allowed; + } + + &.error { + border-color: #ef4444; + box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.1); + } + + &::placeholder { + color: var(--theme-text-secondary); + } +} + +.ug-form-select { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3e%3c/svg%3e"); + background-position: right 12px center; + background-repeat: no-repeat; + background-size: 16px 12px; + padding-right: 40px; + appearance: none; +} + +.ug-form-error { + color: #ef4444; + font-size: 12px; + margin-top: 6px; + font-weight: 500; +} + +.required-field { + color: #ef4444; + margin-left: 4px; +} + +.ug-file-input { + width: 100%; + padding: 12px; + border: 1px solid rgba(0, 0, 0, 0.1); + border-radius: 8px; + background: var(--theme-surface); + color: var(--theme-text); + + &::file-selector-button { + @extend .ug-btn; + @extend .ug-btn-secondary; + margin-right: 12px; + padding: 8px 16px; + border: none; + } +} + +// Delete Modal Styles +.ug-delete-header { + text-align: center; + padding: 24px; + border-bottom: 1px solid rgba(0, 0, 0, 0.05); +} + +.ug-delete-icon { + color: #ef4444; + margin-bottom: 16px; +} + +.ug-delete-title { + font-size: 24px; + font-weight: 700; + color: var(--theme-text); + margin: 0 0 8px 0; +} + +.ug-delete-subtitle { + font-size: 16px; + color: var(--theme-text-secondary); + margin: 0; +} + +.ug-delete-details { + padding: 24px; +} + +.ug-delete-detail-item { + display: flex; + justify-content: space-between; + padding: 12px 0; + border-bottom: 1px solid rgba(0, 0, 0, 0.05); + + &:last-child { + border-bottom: none; + } +} + +.ug-delete-detail-label { + font-weight: 500; + color: var(--theme-text-secondary); +} + +.ug-delete-detail-value { + font-weight: 600; + color: var(--theme-text); +} + +.delete { + color: #ef4444; + text-align: center; + margin-bottom: 16px; + font-weight: 600; + font-size: 20px; +} + +.heading { + text-align: center; + margin-bottom: 24px; + color: var(--theme-text); + font-weight: 600; +} + +// Modal Header +::ng-deep .modal-header { + background: linear-gradient(135deg, var(--theme-primary) 0%, var(--theme-accent) 100%); + color: white; + border-radius: 16px 16px 0 0 !important; + padding: 20px 24px !important; + + .modal-title { + color: white; + font-weight: 600; + font-size: 20px; + margin: 0; + } + + .close { + color: white; + opacity: 0.8; + + &:hover { + opacity: 1; + } + } +} + +// Modal Body +::ng-deep .modal-body { + padding: 24px !important; +} + +// Modal Footer +::ng-deep .modal-footer { + padding: 20px 24px !important; + background: var(--theme-background); + border-radius: 0 0 16px 16px !important; + border-top: 1px solid rgba(0, 0, 0, 0.05) !important; +} + +// Responsive adjustments +@media (max-width: 768px) { + .ug-hero { + flex-direction: column; + gap: 16px; + text-align: center; + + &__content { + flex-direction: column; + text-align: center; + } + + &__actions { + width: 100%; + justify-content: center; + flex-wrap: wrap; + } + } + + .ug-toolbar { + flex-direction: column; + gap: 16px; + } + + .ug-search { + max-width: 100%; + } + + .ug-cards { + grid-template-columns: 1fr; + } + + .ug-card-item { + &__header { + flex-direction: column; + text-align: center; + + &__icon { + margin-right: 0; + margin-bottom: 16px; + } + } + + &__footer { + justify-content: center; + } + } +} \ No newline at end of file diff --git a/testnewang03-front-f/authsec_angularClarity_modern/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/basicp1/Forma/Forma.component.ts b/testnewang03-front-f/authsec_angularClarity_modern/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/basicp1/Forma/Forma.component.ts new file mode 100644 index 0000000..44a4b85 --- /dev/null +++ b/testnewang03-front-f/authsec_angularClarity_modern/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/basicp1/Forma/Forma.component.ts @@ -0,0 +1,328 @@ +import { Component, OnInit } from '@angular/core'; +import { ToastrService } from 'ngx-toastr'; +import { AlertService } from 'src/app/services/alert.service'; +import { Formaservice} from './Forma.service'; +import { AbstractControl, FormArray, FormBuilder, FormGroup, Validators, ValidationErrors } from '@angular/forms'; +import { ExtensionService } from 'src/app/services/fnd/extension.service'; +import { DashboardContentModel2 } from 'src/app/models/builder/dashboard'; +import { Formacardvariable } from './Forma_cardvariable'; +import { UserInfoService } from 'src/app/services/user-info.service'; +import { CsvService } from 'src/app/services/csv.service'; +import { TranslateService } from '@ngx-translate/core'; +import { ThemeService } from 'src/app/services/theme.service'; +import { Subscription } from 'rxjs'; +import { ExcelService } from 'src/app/services/excel.service'; +import * as moment from 'moment'; +declare var JsBarcode: any; +@Component({ + selector: 'app-Forma', + templateUrl: './Forma.component.html', + styleUrls: ['./Forma.component.scss'] +}) +export class FormaComponent implements OnInit { + cardButton = Formacardvariable.cardButton; + cardmodeldata = Formacardvariable.cardmodeldata; + public dashboardArray: DashboardContentModel2[]; + isCardview = Formacardvariable.cardButton; + cardmodal; changeView(){ + this.isCardview = !this.isCardview; + } + beforeText(fieldtext: string): string { // Extract the text before the first '<' + const index = fieldtext.indexOf('<'); + return index !== -1 ? fieldtext.substring(0, index) : fieldtext; + } + afterText(fieldtext: string): string { // Extract the text after the last '>' + const index = fieldtext.lastIndexOf('>'); + return index !== -1 ? fieldtext.substring(index + 1) : ''; + } + transform(fieldtext: string): string { + const match = fieldtext.match(/<([^>]*)>/); + return match ? match[1] : ''; // Extract the text between '<' and '>' + } + userrole; + rowSelected :any= {}; + modaldelete=false; + modalEdit=false; + modalAdd= false; + public entryForm: FormGroup; + loading = false; + product; + modalOpenedforNewLine = false; + newLine:any; + additionalFieldsFromBackend: any[] = []; + formcode = 'Forma_formCode' +tableName = 'Forma'; checkFormCode; selected: any[] = []; +filterText: string = ''; + viewMode: 'table' | 'cards' = 'cards'; + private themeSubscription: Subscription; constructor( + private extensionService: ExtensionService, +private userInfoService:UserInfoService, + private mainService:Formaservice, + private alertService: AlertService, + private toastr: ToastrService, +private csvService: CsvService, + private translate: TranslateService, + private themeService: ThemeService, +private excel: ExcelService, private _fb: FormBuilder, + ) { } + + switchLanguage(language: string) { + this.translate.use(language); + } + private editInterval: any; +// component button + ngOnInit(): void { + this.themeSubscription = this.themeService.currentTheme$.subscribe(() => { + // Theme changes will automatically update CSS variables + // This triggers a re-render of themed elements + }); + if(this.cardmodeldata !== ''){ + this.cardmodal = JSON.parse(this.cardmodeldata); + this.dashboardArray = this.cardmodal.dashboard.slice(); + console.log(this.dashboardArray) + } + this.userrole=this.userInfoService.getRoles(); + this.getData(); + this.entryForm = this._fb.group({ +name : [null], + +description : [null], + + + + + + + }); // component_button200 + // form code start + this.extensionService.getJsonObjectsByFormCodeList(this.formcode).subscribe(data => { + console.log(data); + const jsonArray = data.map((str) => JSON.parse(str)); + this.additionalFieldsFromBackend = jsonArray; + this.checkFormCode = this.additionalFieldsFromBackend.some(field => field.formCode === "Forma_formCode"); + console.log(this.checkFormCode); + console.log(this.additionalFieldsFromBackend); + if (this.additionalFieldsFromBackend && this.additionalFieldsFromBackend.length > 0) { + this.additionalFieldsFromBackend.forEach(field => { + if (field.formCode === this.formcode) { + if (!this.entryForm.contains(field.extValue)) { + // Add the control only if it doesn't exist in the form + this.entryForm.addControl(field.extValue, this._fb.control(field.fieldValue)); + } + } + }); + } + }); + console.log(this.entryForm.value); + // form code end + + + + + + } + ngOnDestroy(): void { + if (this.themeSubscription) { + this.themeSubscription.unsubscribe(); + } + if (this.editInterval) { + clearInterval(this.editInterval); + } + } + get filteredGroups(): any[] { + const items: any[] = (this.product as unknown as any[]) || []; + const text = (this.filterText || '').toLowerCase(); + if (!text) { return items; } + return items.filter(g => ( +(g?.name || '').toLowerCase().includes(text) || + +(g?.description || '').toLowerCase().includes(text) + + )); + } + + setViewMode(mode: 'table' | 'cards') { this.viewMode = mode; } + onExport() { + this.excel.exportAsExcelFile(this.product, 'user_', + moment().format('YYYYMMDD_HHmmss')) + } + + + + error; + getData() { + this.mainService.getAll().subscribe((data) => { + console.log(data); + this.product = data; +this.product = [...this.product].reverse(); if(this.product.length==0){ + this.error="No Data Available" + } + },(error) => { + console.log(error); + if(error){ + this.error="Server Error"; + } + }); + } + onEdit(row) { + this.rowSelected = row; + + + + + + this.modalEdit = true; + } + onDelete(row) { + this.rowSelected = row; + this.modaldelete=true; + } + delete(id) + { + this.modaldelete = false; + console.log("in delete "+id); + this.mainService.delete(id).subscribe( + (data) => { + console.log(data); + this.ngOnInit(); + if (data) { this.toastr.success('Deleted successfully'); } + }); + } + onUpdate(id) { + this.modalEdit = false; + + + + + //console.log("in update"); + console.log("id " + id); + console.log(this.rowSelected); + //console.log("out update"); + this.mainService.update(id, this.rowSelected).subscribe( + (data) => { + console.log(data); + if (data || data.status >= 200 && data.status <= 299) { + this.toastr.success("Update Successfully"); + } +setTimeout(() => { + this.ngOnInit(); + }, 500); + + + + + }, (error) => { + console.log(error); + if (error.status >= 200 && error.status <= 299) { + // this.toastr.success("update Succesfully"); + } + if (error.status >= 400 && error.status <= 499) { + this.toastr.error("Not Updated"); + } + if (error.status >= 500 && error.status <= 599) { + this.toastr.error("Not Updated"); + } + }); + setTimeout(() => { + this.ngOnInit(); + }, 500); + } +onCreate() { + this.modalAdd=false; + + + + + this.mainService.create(this.entryForm.value).subscribe( + (data) => { + console.log(data); + if (data || data.status >= 200 && data.status <= 299) { + this.toastr.success("Added Successfully"); + } +setTimeout(() => { + this.ngOnInit(); + }, 500); + + + + + }, (error) => { + console.log(error); + if (error.status >= 200 && error.status <= 299) { + // this.toastr.success("Added Succesfully"); + } + if (error.status >= 400 && error.status <= 499) { + this.toastr.error("Not Added"); + } + if (error.status >= 500 && error.status <= 599) { + this.toastr.error("Not Added"); + } + }); + setTimeout(() => { + this.ngOnInit(); + }, 500); + } + goToAdd() { +this.modalAdd = true; this.submitted = false; + + + + + } + submitted = false; +onSubmit() { + console.log(this.entryForm.value); + this.submitted = true; + if (this.entryForm.invalid) { + return; + }this.onCreate(); + +} + + +rsModaldescription = false; +goToReplaceStringdescription(row){ +this.rowSelected = row; this.rsModaldescription =true; } + + + // csv + + modalCsv = false; + selectedFiles: File; + fileList; + ttype = 'usergroupmaintenance'; + + + // Import CSV + public selectFile(event) { + this.selectedFiles = event.target.files[0]; + // this.saveCsv(); + } + + csvImport() { + console.log("import CSV"); + this.modalCsv = true; + } + saveCsv() { + this.csvService.importCsv(this.selectedFiles, this.ttype).subscribe(data => { + console.log(data); + this.fileList = data; + this.modalCsv = false; + }, + (error) => { + console.log(error); + if (error.status == 202) { + this.toastr.success(error.error.text) + } + }); + } + + downloadFiles() { + this.csvService.downloadCsvs(this.ttype); + + } +// updateaction +} + + + diff --git a/testnewang03-front-f/authsec_angularClarity_modern/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/basicp1/Forma/Forma.service.ts b/testnewang03-front-f/authsec_angularClarity_modern/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/basicp1/Forma/Forma.service.ts new file mode 100644 index 0000000..da02b28 --- /dev/null +++ b/testnewang03-front-f/authsec_angularClarity_modern/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/basicp1/Forma/Forma.service.ts @@ -0,0 +1,37 @@ +import { Injectable } from '@angular/core'; +import { Observable } from "rxjs"; +import { HttpClient, HttpHeaders, HttpParams, } from "@angular/common/http"; +import { ApiRequestService } from "src/app/services/api/api-request.service"; +import { environment } from 'src/environments/environment'; +@Injectable({ + providedIn: 'root' +}) +export class Formaservice{ + private baseURL = "Forma/Forma" ; constructor( + private http: HttpClient, + private apiRequest: ApiRequestService, + ) { } + getAll(page?: number, size?: number): Observable { + return this.apiRequest.get(this.baseURL); + } + getById(id: number): Observable { + const _http = this.baseURL + "/" + id; + return this.apiRequest.get(_http); + } + create(data: any): Observable { + return this.apiRequest.post(this.baseURL, data); + } + update(id: number, data: any): Observable { + const _http = this.baseURL + "/" + id; + return this.apiRequest.put(_http, data); + } + delete(id: number): Observable { + const _http = this.baseURL + "/" + id; + return this.apiRequest.delete(_http); + } + + + + +// updateaction +} \ No newline at end of file diff --git a/testnewang03-front-f/authsec_angularClarity_modern/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/basicp1/Forma/Forma_cardvariable.ts b/testnewang03-front-f/authsec_angularClarity_modern/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/basicp1/Forma/Forma_cardvariable.ts new file mode 100644 index 0000000..03f6526 --- /dev/null +++ b/testnewang03-front-f/authsec_angularClarity_modern/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/basicp1/Forma/Forma_cardvariable.ts @@ -0,0 +1,4 @@ +export const Formacardvariable = { + "cardButton": false, + "cardmodeldata": `` +} \ No newline at end of file diff --git a/testnewang03-front-f/authsec_angularClarity_modern/frontend/angular-clarity-master/src/app/modules/main/main-routing.module.ts b/testnewang03-front-f/authsec_angularClarity_modern/frontend/angular-clarity-master/src/app/modules/main/main-routing.module.ts index 77d1d67..4e4125b 100644 --- a/testnewang03-front-f/authsec_angularClarity_modern/frontend/angular-clarity-master/src/app/modules/main/main-routing.module.ts +++ b/testnewang03-front-f/authsec_angularClarity_modern/frontend/angular-clarity-master/src/app/modules/main/main-routing.module.ts @@ -1,3 +1,4 @@ +import { FormaComponent } from './BuilderComponents/basicp1/Forma/Forma.component'; import { SequencegenaratorComponent } from './fnd/sequencegenarator/sequencegenarator.component'; import { Component, NgModule } from '@angular/core'; @@ -279,6 +280,9 @@ const routes: Routes = [ // buildercomponents +{path:'Forma',component:FormaComponent}, + + { path: 'tokenregistery', component: Token_registeryComponent }, diff --git a/testnewang03-front-f/authsec_angularClarity_modern/frontend/angular-clarity-master/src/app/modules/main/main.module.ts b/testnewang03-front-f/authsec_angularClarity_modern/frontend/angular-clarity-master/src/app/modules/main/main.module.ts index 085c45d..2d1d9a1 100644 --- a/testnewang03-front-f/authsec_angularClarity_modern/frontend/angular-clarity-master/src/app/modules/main/main.module.ts +++ b/testnewang03-front-f/authsec_angularClarity_modern/frontend/angular-clarity-master/src/app/modules/main/main.module.ts @@ -1,3 +1,4 @@ +import { FormaComponent } from './BuilderComponents/basicp1/Forma/Forma.component'; @@ -148,6 +149,9 @@ import { SharedModule } from '../../shared/shared.module'; // buildercomponents +FormaComponent, + + diff --git a/testnewang03-newdba-d/authsec_mysql/mysql/wf_table/wf_table.sql b/testnewang03-newdba-d/authsec_mysql/mysql/wf_table/wf_table.sql new file mode 100755 index 0000000..481f1fd --- /dev/null +++ b/testnewang03-newdba-d/authsec_mysql/mysql/wf_table/wf_table.sql @@ -0,0 +1,2 @@ +CREATE TABLE newdba.Forma(id BIGINT NOT NULL AUTO_INCREMENT, description VARCHAR(400), name VARCHAR(400), PRIMARY KEY (id)); +