Changeset e0cdea2


Ignore:
Timestamp:
02/08/21 16:39:25 (20 months ago)
Author:
Dimitar Slezenkovski <dslezenkovski@…>
Branches:
master
Children:
8eb1e21, dae4cde
Parents:
0a694bb
Message:

Fix all bugs

Files:
1 added
23 edited
2 moved

Legend:

Unmodified
Added
Removed
  • Farmatiko/ClientApp/src/app/admin/admin.component.ts

    r0a694bb re0cdea2  
    124124
    125125  rejectRequest(req: IPharmacyHeadRequest) {
    126     this.dataService.deleteClaimingRequest(req.id)
     126    this.dataService.deleteClaimingRequest(req)
    127127        .subscribe((status: boolean) => {
    128128          if(status) {
     
    139139  approveRequest(req: IPharmacyHeadRequest) {
    140140    if(req) {
     141      if (req.PharmacyHead.Pharmacy == null){
     142        req.PharmacyHead.Pharmacy = [];
     143      }
    141144    req.PharmacyHead.Pharmacy.push(req.Pharmacy);
    142145    this.dataService.updatePharmacyHead(req.PharmacyHead)
  • Farmatiko/ClientApp/src/app/dashboard/dashboard.component.ts

    r0a694bb re0cdea2  
    9898  saveDeletedMedicines() {
    9999    this.dataService.updatePharmacyHead(this.head)
    100       .subscribe((hd: IPharmacyHead) => {
     100      .subscribe((hd) => {
    101101        if(hd) {
    102102          this.openSnackBar("Success! Medicine deleted", "OK");
  • Farmatiko/ClientApp/src/app/shared/data.service.ts

    r0a694bb re0cdea2  
    196196                    );
    197197    }
    198     deleteClaimingRequest(id: string) : Observable<boolean> {
    199         return this.http.post<boolean>(this.basePharmacyHead + '/requests/' + id, id)
     198    deleteClaimingRequest(req: IPharmacyHeadRequest) : Observable<boolean> {
     199        return this.http.post<boolean>(this.basePharmacyHead + '/requests/' + req.id, req)
    200200                    .pipe(
    201201                        map((data) => {
  • Farmatiko/Controllers/AdminController.cs

    r0a694bb re0cdea2  
    6161        [HttpPost]
    6262        [Route("api/pharmacyhead/requests/{Id}")]
    63         public IActionResult RejectRequest([FromRoute] int Id)
     63        public IActionResult RejectRequest([FromBody] RequestPharmacyHead req)
    6464        {
    65             bool Success = _adminService.RejectRequest(Id);
     65            bool Success = _adminService.RejectRequest(req);
    6666            return Ok(Success);
    6767        }
  • Farmatiko/Controllers/FarmatikoController.cs

    r0a694bb re0cdea2  
    8484        [HttpGet]
    8585        [Route("api/medicines/search/{query}")]
    86         public async Task<IEnumerable<Medicine>> SearchMedicines([FromRoute] string query)
     86        public async Task<IEnumerable<MedicineDTO>> SearchMedicines([FromRoute] string query)
    8787        {
    8888            return await _service.SearchMedicines(query);
     
    9797        [HttpGet]
    9898        [Route("api/pandemic")]
    99         public async Task<Pandemic> GetPandemic()
     99        public Pandemic GetPandemic()
    100100        {
    101             return await _service.GetPandemic();
     101            return _service.GetPandemic();
    102102        }
    103103        //Pharmacy
     
    111111        [HttpGet]
    112112        [Route("api/pharmacy/search/{Query}")]
    113         public async Task<IEnumerable<Pharmacy>> SearchPharmacies([FromRoute] string Query)
     113        public async Task<IEnumerable<PharmacyDTO>> SearchPharmacies([FromRoute] string Query)
    114114        {
    115115            return await _service.SearchPharmacies(Query);
  • Farmatiko/Farmatiko.csproj

    r0a694bb re0cdea2  
    5252  </ItemGroup>
    5353
     54  <ItemGroup>
     55    <Folder Include="ExcellDocs\" />
     56  </ItemGroup>
     57
    5458  <Target Name="DebugEnsureNodeEnv" BeforeTargets="Build" Condition=" '$(Configuration)' == 'Debug' And !Exists('$(SpaRoot)node_modules') ">
    5559    <!-- Ensure Node.js is installed -->
  • Farmatiko/Startup.cs

    r0a694bb re0cdea2  
    5454
    5555            services.AddScoped<IPHRepo, PHRepo>();
    56             services.AddTransient<IRepository, Repository>();
    57             services.AddTransient<IAdminRepo, AdminRepo>();
     56            services.AddScoped<IRepository, Repository>();
     57            services.AddScoped<IAdminRepo, AdminRepo>();
    5858
    59             services.AddTransient<IPHService, PHService>();
     59            services.AddScoped<IPHService, PHService>();
    6060            services.AddTransient<IAdminService, AdminService>();
    6161            services.AddTransient<IService, Service>();
  • FarmatikoData/FarmatikoDataContext.cs

    r0a694bb re0cdea2  
    4242                .ValueGeneratedOnAdd();
    4343
    44             /*modelBuilder.Entity<Medicine>()
    45                 .Property(x => x.Id)
    46                 .HasIdentityOptions(startValue: 1);
     44            modelBuilder.Entity<PharmacyHeadMedicine>()
     45                .Property(p => p.Id)
     46                .ValueGeneratedOnAdd();
     47
     48            modelBuilder.Entity<Medicine>()
     49                .Property(p => p.Id)
     50                .ValueGeneratedOnAdd();
    4751
    4852            modelBuilder.Entity<Pharmacy>()
    49                 .Property(x => x.Id)
    50                 .HasIdentityOptions(startValue: 1);
     53                .Property(p => p.Id)
     54                .ValueGeneratedOnAdd();
    5155
    5256            modelBuilder.Entity<PharmacyHead>()
    53                 .Property(x => x.Id)
    54                 .HasIdentityOptions(startValue: 1);
    55 
    56             modelBuilder.Entity<PharmacyHeadMedicine>()
    57                 .Property(x => x.Id)
    58                 .HasIdentityOptions(startValue: 1);
    59 
    60             modelBuilder.Entity<RequestPharmacyHead>()
    61                 .Property(x => x.Id)
    62                 .HasIdentityOptions(startValue: 1);*/
    63 
    64             /*modelBuilder.Entity<User>()
    65                 .Property(x => x.Id)
    66                 .HasIdentityOptions(startValue: 1);
    67 
    68             modelBuilder.Entity<PharmacyHeadMedicine>()
    69                 .HasKey(phm => new { phm.PheadId, phm.MedicineId });
    70 
    71             modelBuilder.Entity<PharmacyHead>()
    72                 .HasMany<Pharmacy>(p => p.Pharmacy)
    73                 .WithOne(p => p.PharmacyHead)
    74                 .HasForeignKey();
     57                .HasMany<Pharmacy>(p => p.Pharmacies)
     58                .WithOne(p => p.PharmacyHead);
    7559
    7660            modelBuilder.Entity<Pharmacy>()
    7761                .HasOne<PharmacyHead>(p => p.PharmacyHead)
    78                 .WithMany(p => p.Pharmacy);
    79             */
     62                .WithMany(p => p.Pharmacies)
     63                .HasForeignKey(x => x.PheadId);
     64
     65            modelBuilder.Entity<PharmacyHeadMedicine>()
     66            .HasKey(bc => new { bc.PheadId, bc.MedicineId});
     67
     68            modelBuilder.Entity<PharmacyHeadMedicine>()
     69                .HasOne(bc => bc.Head)
     70                .WithMany(b => b.Medicines)
     71                .HasForeignKey(bc => bc.PheadId);
     72
     73            modelBuilder.Entity<PharmacyHeadMedicine>()
     74                .HasOne(bc => bc.Medicine)
     75                .WithMany(c => c.Medicines)
     76                .HasForeignKey(bc => bc.MedicineId);
     77
    8078
    8179            base.OnModelCreating(modelBuilder);
  • FarmatikoData/FarmatikoRepo/AdminRepo.cs

    r0a694bb re0cdea2  
    2020        public async Task<IEnumerable<RequestPharmacyHead>> GetClaimingRequests()
    2121        {
    22             var reqs = await _context.PHRequests.OrderBy(x => x.Head.Name).ToListAsync();
     22            var reqs = await _context.PHRequests.Select(x => new RequestPharmacyHead
     23            {
     24                Head = x.Head,
     25                Pharmacy = x.Pharmacy
     26            }).OrderBy(x => x.Head.Name).ToListAsync();
    2327            return reqs;
    2428        }
     
    3539        }
    3640        //POST
    37         public async void RemoveClaimRequest(int Id)
     41        public void RemoveClaimRequest(RequestPharmacyHead request)
    3842        {
    39             var req = _context.PHRequests.Where(x => x.Id == Id).FirstOrDefault();
     43            var req = _context.PHRequests.Select(x => new RequestPharmacyHead { Head = x.Head, Pharmacy = x.Pharmacy, Id = x.Id})
     44                .Where(x => x.Head.Email.Equals(request.Head.Email)).FirstOrDefault();
    4045            _context.PHRequests.Remove(req);
    41             await _context.SaveChangesAsync();
     46            _context.SaveChanges();
    4247        }
    4348    }
  • FarmatikoData/FarmatikoRepo/PHRepo.cs

    r0a694bb re0cdea2  
    4141        public async Task UpdatePharmacyHead(PharmacyHead pharmacyHead)
    4242        {
    43             var Phead = await _context.PharmacyHeads.Where(x => x.Email == pharmacyHead.Email).FirstOrDefaultAsync();
    44             var EditedPHead = await _context.PharmacyHeads.AsNoTracking<PharmacyHead>().Where(x => x.Email == pharmacyHead.Email).FirstOrDefaultAsync();
     43            var user = await _context.Users.Where(x => x.Email == pharmacyHead.Email).FirstOrDefaultAsync();
     44            var EditedPHead = await _context.PharmacyHeads.Where(x => x.Email.Equals(pharmacyHead.Email)).FirstOrDefaultAsync();
    4545
    46             if (!EditedPHead.Email.Equals(pharmacyHead.Email))
     46            /*if (!EditedPHead.Email.Equals(pharmacyHead.Email) && !user.Email.Equals(pharmacyHead.Email))
     47            {
    4748                EditedPHead.Email = pharmacyHead.Email;
     49                user.Email = pharmacyHead.Email;
     50            }*/
    4851
    49             if (!EditedPHead.Name.Equals(pharmacyHead.Name))
     52            if (!EditedPHead.Name.Equals(pharmacyHead.Name) || !user.Name.Equals(pharmacyHead.Name))
     53            {
    5054                EditedPHead.Name = pharmacyHead.Name;
     55                user.Name = pharmacyHead.Name;
     56            }
    5157
    52             if (!EditedPHead.Password.Equals(pharmacyHead.Password))
     58            if (!EditedPHead.Password.Equals(pharmacyHead.Password) || !user.Password.Equals(pharmacyHead.Password))
     59            {
    5360                EditedPHead.Password = pharmacyHead.Password;
     61                user.Password = pharmacyHead.Password;
     62            }
     63            /*if (EditedPHead.Pharmacies != null)
     64            {
     65                if (EditedPHead.Pharmacies.Count() > 0)
     66                    if (!EditedPHead.Pharmacies.Equals(pharmacyHead.Pharmacies))
     67                        EditedPHead.Pharmacies = pharmacyHead.Pharmacies;
     68            }
     69            if (EditedPHead.Medicines != null)
     70            {
     71                if (EditedPHead.Medicines.Count() > 0)
     72                {
     73                    if (!EditedPHead.Medicines.Equals(pharmacyHead.Medicines))
     74                        EditedPHead.Medicines = pharmacyHead.Medicines;
     75                   
     76                }
     77                   
     78            }*/
    5479
    55             if (!EditedPHead.Pharmacies.Equals(pharmacyHead.Pharmacies))
    56                 EditedPHead.Pharmacies = pharmacyHead.Pharmacies;
    57 
    58             if (!EditedPHead.Medicines.Equals(pharmacyHead.Medicines))
    59                 EditedPHead.Medicines = pharmacyHead.Medicines;
    60 
    61             await _context.SaveChangesAsync();
     80            _context.SaveChanges();
    6281        }
    6382        public async Task ClaimPharmacy(RequestPharmacyHead pharmacy)
    6483        {
     84            var phead = _context.PharmacyHeads.Where(x => x.Email.Equals(pharmacy.Head.Email)).FirstOrDefault();
     85            pharmacy.Head = phead;
    6586            await _context.PHRequests.AddAsync(pharmacy);
    6687            await _context.SaveChangesAsync();
  • FarmatikoData/FarmatikoRepo/Repository.cs

    r0a694bb re0cdea2  
    1919        public async Task<IEnumerable<HealthcareWorker>> GetAllWorkers()
    2020        {
    21             var Workers = await _context.HealthcareWorkers.Take(5).ToListAsync();
     21            var Workers = await _context.HealthcareWorkers.Select(x => new HealthcareWorker
     22            {
     23                Id = x.Id,
     24                Name = x.Name,
     25                Branch = x.Branch,
     26                Facility = x.Facility,
     27                Title = x.Title
     28            }).Take(5).ToListAsync();
    2229            return Workers;
    2330        }
     
    5461                Packaging = x.Packaging
    5562
    56             }).Take(3).ToListAsync();
     63            }).Take(5).ToListAsync();
    5764            return Medicines;
    5865        }
     
    9299        {
    93100            var SearchQuery = await _context.HealthFacilities
    94             .Where(x => x.Name.ToLowerInvariant().Contains(query.ToLowerInvariant()))
     101            .Where(x => x.Name.ToLower().Contains(query.ToLower())
     102            || x.Municipality.ToLower().Contains(query.ToLower())
     103            || x.Type.ToLower().Contains(query.ToLower())).Take(5)
    95104            .OrderBy(x => x.Name).ToListAsync();
    96105
     
    101110        {
    102111            var SearchQuery = await _context.Medicines
    103             .Where(x => x.Name.ToLowerInvariant().Contains(query.ToLowerInvariant()))
     112            .Where(x => x.Name.ToLower().Contains(query.ToLower())
     113            || x.Form.ToLower().Contains(query.ToLower())
     114            || x.Strength.ToLower().Contains(query.ToLower())
     115            || x.Packaging.ToLower().Contains(query.ToLower())).Take(20)
    104116            .OrderBy(x => x.Name).ToListAsync();
    105117
     
    110122        {
    111123            var SearchQuery = await _context.Pharmacies
    112             .Where(x => x.Name.ToLowerInvariant().Contains(query.ToLowerInvariant()))
     124            .Where(x => x.Name.ToLower().Contains(query.ToLower())
     125            || x.PharmacyHead.Name.ToLower().Contains(query.ToLower())).Take(5)
    113126            .OrderBy(x => x.Name).ToListAsync();
    114127
     
    118131        public async Task<IEnumerable<HealthcareWorker>> SearchWorkers(string query)
    119132        {
    120             var SearchQuery = await _context.HealthcareWorkers
    121             .Where(x => x.Name.ToLowerInvariant().Contains(query.ToLowerInvariant()))
     133            var SearchQuery = await _context.HealthcareWorkers.Include(x => x.Facility)
     134            .Where(x => x.Name.ToLower().Contains(query.ToLower())
     135            || x.Facility.Name.ToLower().Contains(query.ToLower())).Take(20)
    122136            .OrderBy(x => x.Name).ToListAsync();
    123137
     
    146160        public async Task AddPharmacy(Pharmacy pharmacy)
    147161        {
    148             await _context.Pharmacies.AddAsync(pharmacy);
    149             _context.SaveChanges();
     162            pharmacy.Id = 0;
     163            if (pharmacy.Id == 0)
     164            {
     165                var phars = _context.Pharmacies.Select(x => new Pharmacy
     166                {
     167                    Name = x.Name,
     168                    Location = x.Location,
     169                    Address = x.Address
     170                }).ToList();
     171                var pharms = phars.Where(x => x.Name.Equals(pharmacy.Name) && x.Location.Equals(pharmacy.Location) && x.Address.Equals(pharmacy.Address)).ToList();
     172                if (pharms is null || pharms.Count() == 0)
     173                {
     174                    await _context.Pharmacies.AddAsync(pharmacy);
     175                    _context.SaveChanges();
     176                }
     177               
     178            }
    150179        }
    151180
     
    242271        {
    243272            var PHead = await _context.PharmacyHeads.Where(x => x.Id == Id).FirstOrDefaultAsync();
    244             PHead.DeletedOn = DateTime.UtcNow;
    245             await _context.SaveChangesAsync();
     273            var user = await _context.Users.Where(x => x.Email.Equals(PHead.Email)).FirstOrDefaultAsync();
     274            _context.PharmacyHeads.Remove(PHead);
     275            _context.Users.Remove(user);
     276            _context.SaveChanges();
    246277        }
    247278
     
    290321            return phmeds;
    291322        }
    292 
    293         public async Task<bool> AddUser(User user)
     323       
     324        /*public async Task<bool> AddUser(User user)
    294325        {
    295326            if (user.Id == 0)
     
    303334                }).ToListAsync();
    304335                var usr = users.Where(x => x.Email.Equals(user.Email)).ToList();
    305                 if (usr != null || usr.Count() > 0)
     336                if (usr != null && usr.Count() > 0)
    306337                {
    307338                    return true;
     
    315346            }
    316347            return false;
    317         }
     348        }*/
    318349
    319350        public async Task<List<PharmacyHeadMedicine>> GetAllPHMedicines()
     
    329360            return list;
    330361        }
     362
     363        public ICollection<PharmacyHeadMedicine> GetPHMedicines()
     364        {
     365            var meds = _context.PharmacyHeadMedicines.Select(x => new PharmacyHeadMedicine
     366            {
     367                PheadId = x.PheadId,
     368                Head = x.Head,
     369                MedicineId = x.MedicineId,
     370                Medicine = x.Medicine
     371            }).ToList();
     372            return meds;
     373        }
    331374    }
    332375}
  • FarmatikoData/FarmatikoRepoInterfaces/IAdminRepo.cs

    r0a694bb re0cdea2  
    1212        Task<IEnumerable<RequestPharmacyHead>> GetClaimingRequests();
    1313        Task<IEnumerable<PharmacyHead>> GetPharmacyHeads();
    14         void RemoveClaimRequest(int Id);
     14        void RemoveClaimRequest(RequestPharmacyHead Id);
    1515    }
    1616}
  • FarmatikoData/FarmatikoRepoInterfaces/IRepository.cs

    r0a694bb re0cdea2  
    4646        User GetRole(string userName);
    4747        ICollection<PharmacyHeadMedicine> GetPHMedicines(string email);
    48         Task<bool> AddUser(User user);
     48        ICollection<PharmacyHeadMedicine> GetPHMedicines();
     49        //Task<bool> AddUser(User user);
    4950    }
    5051}
  • FarmatikoData/Migrations/20210208041424_Initial-Create.Designer.cs

    r0a694bb re0cdea2  
    1111{
    1212    [DbContext(typeof(FarmatikoDataContext))]
    13     [Migration("20210205174704_Initial-Migration")]
    14     partial class InitialMigration
     13    [Migration("20210208041424_Initial-Create")]
     14    partial class InitialCreate
    1515    {
    1616        protected override void BuildTargetModel(ModelBuilder modelBuilder)
     
    207207                        .HasColumnType("text");
    208208
    209                     b.Property<int?>("PharmacyHeadId")
    210                         .HasColumnType("integer");
    211 
    212                     b.Property<int>("PheadId")
     209                    b.Property<int?>("PheadId")
    213210                        .HasColumnType("integer");
    214211
     
    218215                    b.HasKey("Id");
    219216
    220                     b.HasIndex("PharmacyHeadId");
     217                    b.HasIndex("PheadId");
    221218
    222219                    b.ToTable("Pharmacies");
     
    302299                        .HasColumnType("timestamp without time zone");
    303300
    304                     b.Property<int>("HeadId")
    305                         .HasColumnType("integer");
    306 
    307                     b.Property<int>("PharmacyId")
     301                    b.Property<int?>("HeadId")
     302                        .HasColumnType("integer");
     303
     304                    b.Property<int?>("PharmacyId")
    308305                        .HasColumnType("integer");
    309306
     
    363360                    b.HasOne("FarmatikoData.Models.PharmacyHead", "PharmacyHead")
    364361                        .WithMany("Pharmacies")
    365                         .HasForeignKey("PharmacyHeadId");
     362                        .HasForeignKey("PheadId");
    366363                });
    367364
     
    392389                    b.HasOne("FarmatikoData.Models.PharmacyHead", "Head")
    393390                        .WithMany()
    394                         .HasForeignKey("HeadId")
    395                         .OnDelete(DeleteBehavior.Cascade)
    396                         .IsRequired();
     391                        .HasForeignKey("HeadId");
    397392
    398393                    b.HasOne("FarmatikoData.Models.Pharmacy", "Pharmacy")
    399394                        .WithMany()
    400                         .HasForeignKey("PharmacyId")
    401                         .OnDelete(DeleteBehavior.Cascade)
    402                         .IsRequired();
     395                        .HasForeignKey("PharmacyId");
    403396                });
    404397#pragma warning restore 612, 618
  • FarmatikoData/Migrations/20210208041424_Initial-Create.cs

    r0a694bb re0cdea2  
    55namespace FarmatikoData.Migrations
    66{
    7     public partial class InitialMigration : Migration
     7    public partial class InitialCreate : Migration
    88    {
    99        protected override void Up(MigrationBuilder migrationBuilder)
     
    150150                    Address = table.Column<string>(nullable: false),
    151151                    WorkAllTime = table.Column<bool>(nullable: false),
    152                     PheadId = table.Column<int>(nullable: false),
    153                     PharmacyHeadId = table.Column<int>(nullable: true)
     152                    PheadId = table.Column<int>(nullable: true)
    154153                },
    155154                constraints: table =>
     
    157156                    table.PrimaryKey("PK_Pharmacies", x => x.Id);
    158157                    table.ForeignKey(
    159                         name: "FK_Pharmacies_PharmacyHeads_PharmacyHeadId",
    160                         column: x => x.PharmacyHeadId,
     158                        name: "FK_Pharmacies_PharmacyHeads_PheadId",
     159                        column: x => x.PheadId,
    161160                        principalTable: "PharmacyHeads",
    162161                        principalColumn: "Id",
     
    201200                    CreatedOn = table.Column<DateTime>(nullable: false, defaultValueSql: "now()"),
    202201                    DeletedOn = table.Column<DateTime>(nullable: true),
    203                     HeadId = table.Column<int>(nullable: false),
    204                     PharmacyId = table.Column<int>(nullable: false)
     202                    HeadId = table.Column<int>(nullable: true),
     203                    PharmacyId = table.Column<int>(nullable: true)
    205204                },
    206205                constraints: table =>
     
    212211                        principalTable: "PharmacyHeads",
    213212                        principalColumn: "Id",
    214                         onDelete: ReferentialAction.Cascade);
     213                        onDelete: ReferentialAction.Restrict);
    215214                    table.ForeignKey(
    216215                        name: "FK_PHRequests_Pharmacies_PharmacyId",
     
    218217                        principalTable: "Pharmacies",
    219218                        principalColumn: "Id",
    220                         onDelete: ReferentialAction.Cascade);
     219                        onDelete: ReferentialAction.Restrict);
    221220                });
    222221
     
    227226
    228227            migrationBuilder.CreateIndex(
    229                 name: "IX_Pharmacies_PharmacyHeadId",
     228                name: "IX_Pharmacies_PheadId",
    230229                table: "Pharmacies",
    231                 column: "PharmacyHeadId");
     230                column: "PheadId");
    232231
    233232            migrationBuilder.CreateIndex(
  • FarmatikoData/Migrations/FarmatikoDataContextModelSnapshot.cs

    r0a694bb re0cdea2  
    205205                        .HasColumnType("text");
    206206
    207                     b.Property<int?>("PharmacyHeadId")
    208                         .HasColumnType("integer");
    209 
    210                     b.Property<int>("PheadId")
     207                    b.Property<int?>("PheadId")
    211208                        .HasColumnType("integer");
    212209
     
    216213                    b.HasKey("Id");
    217214
    218                     b.HasIndex("PharmacyHeadId");
     215                    b.HasIndex("PheadId");
    219216
    220217                    b.ToTable("Pharmacies");
     
    300297                        .HasColumnType("timestamp without time zone");
    301298
    302                     b.Property<int>("HeadId")
    303                         .HasColumnType("integer");
    304 
    305                     b.Property<int>("PharmacyId")
     299                    b.Property<int?>("HeadId")
     300                        .HasColumnType("integer");
     301
     302                    b.Property<int?>("PharmacyId")
    306303                        .HasColumnType("integer");
    307304
     
    361358                    b.HasOne("FarmatikoData.Models.PharmacyHead", "PharmacyHead")
    362359                        .WithMany("Pharmacies")
    363                         .HasForeignKey("PharmacyHeadId");
     360                        .HasForeignKey("PheadId");
    364361                });
    365362
     
    390387                    b.HasOne("FarmatikoData.Models.PharmacyHead", "Head")
    391388                        .WithMany()
    392                         .HasForeignKey("HeadId")
    393                         .OnDelete(DeleteBehavior.Cascade)
    394                         .IsRequired();
     389                        .HasForeignKey("HeadId");
    395390
    396391                    b.HasOne("FarmatikoData.Models.Pharmacy", "Pharmacy")
    397392                        .WithMany()
    398                         .HasForeignKey("PharmacyId")
    399                         .OnDelete(DeleteBehavior.Cascade)
    400                         .IsRequired();
     393                        .HasForeignKey("PharmacyId");
    401394                });
    402395#pragma warning restore 612, 618
  • FarmatikoData/Models/Pharmacy.cs

    r0a694bb re0cdea2  
    3131            this.WorkAllTime = WorkAllTime;
    3232        }
    33         public int PheadId { get; set; }
     33        public int? PheadId { get; set; }
    3434        public PharmacyHead PharmacyHead { get; set; }
    3535    }
  • FarmatikoData/Models/RequestPharmacyHead.cs

    r0a694bb re0cdea2  
    11using FarmatikoData.Base;
     2using Newtonsoft.Json;
    23using System;
    34using System.Collections.Generic;
     
    1314        {
    1415        }
    15         [Required]
    16         [JsonPropertyName("PharmacyHead")]
     16       
     17        [JsonProperty("PharmacyHead")]
    1718        public PharmacyHead Head { get; set; }
    18         [Required]
    19         [JsonPropertyName("Pharmacy")]
     19       
     20        [JsonProperty("Pharmacy")]
    2021        public Pharmacy Pharmacy { get; set; }
    2122
  • FarmatikoServices/FarmatikoServiceInterfaces/IAdminService.cs

    r0a694bb re0cdea2  
    1212        Task<IEnumerable<PharmacyHead>> GetPharmacyHeads();
    1313        Task<IEnumerable<RequestPharmacyHead>> GetClaimingRequests();
    14         bool RejectRequest(int Id);
     14        bool RejectRequest(RequestPharmacyHead req);
    1515    }
    1616}
  • FarmatikoServices/FarmatikoServiceInterfaces/IService.cs

    r0a694bb re0cdea2  
    1818        HealthFacility GetFacilityJSON(string healthFacility);
    1919        Task<Medicine> GetMedicine(int id);
    20         Task<IEnumerable<Medicine>> SearchMedicines(string query);
     20        Task<IEnumerable<MedicineDTO>> SearchMedicines(string query);
    2121        Task<List<MedicineDTO>> GetMedicines();
    22         Task<Pandemic> GetPandemic();
     22        Pandemic GetPandemic();
    2323        Task<List<PharmacyDTO>> GetPharmacies();
    24         Task<IEnumerable<Pharmacy>> SearchPharmacies(string query);
     24        Task<IEnumerable<PharmacyDTO>> SearchPharmacies(string query);
    2525        Task<Pharmacy> GetPharmacy(int id);
    2626        //POST
    2727        Task AddWorker(HealthcareWorker worker);
    2828        Task AddFacility(HealthFacility healthFacilities);
    29         Task AddPharmacy(Pharmacy pharmacy);
     29        void AddPharmacy(Pharmacy pharmacy);
    3030        Task<bool> AddPharmacyHead(PharmacyHeadDto pharmacyHead);
    3131        Task AddMedicines(Medicine medicine);
  • FarmatikoServices/FarmatikoServices.csproj

    r0a694bb re0cdea2  
    88    <PackageReference Include="AngleSharp" Version="0.14.0" />
    99    <PackageReference Include="EPPlus" Version="5.4.0" />
     10    <PackageReference Include="GemBox.Spreadsheet" Version="47.0.1095" />
    1011    <PackageReference Include="Microsoft.AspNetCore.Mvc.Core" Version="2.2.5" />
    1112    <PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
     
    1819  </ItemGroup>
    1920
    20   <ItemGroup>
    21     <Folder Include="Services\ExcellDocs\" />
    22   </ItemGroup>
    23 
    2421</Project>
  • FarmatikoServices/Services/AdminService.cs

    r0a694bb re0cdea2  
    3636        }
    3737
    38         public bool RejectRequest(int Id)
     38        public bool RejectRequest(RequestPharmacyHead req)
    3939        {
    40             if (Id >= 0)
     40            if (req != null)
    4141            {
    42                 _adminRepo.RemoveClaimRequest(Id);
     42                _adminRepo.RemoveClaimRequest(req);
    4343                return true;
    4444            }
  • FarmatikoServices/Services/PHService.cs

    r0a694bb re0cdea2  
    6565
    6666                phead.Medicines = _repository.GetPHMedicines(phead.Email).ToList();
    67                
     67
     68                var phmeds = await _repository.GetAllPHMedicines();
     69
    6870                List<Medicine> medicines = _repository.GetMedicines().ToList();
    69                
    70                 List<Medicine> PHMedicines = medicines.Where(x => x.Id == phead.Medicines.Select(x => x.MedicineId).Single()).ToList();
    71                
     71
     72                List<Medicine> PHMedicines = new List<Medicine>();
     73
    7274                List<PharmacyHeadMedicine> list = new List<PharmacyHeadMedicine>();
    7375
    74                
    75                 if (pharmacyHead.Medicines != null || pharmacyHead.Medicines.Count() > 0)
     76
     77                if (pharmacyHead.Medicines != null && pharmacyHead.Medicines.Count() > 0)
     78                {
     79                    foreach (var med in phead.Medicines)
     80                    {
     81                        var medicine = medicines.Where(x => x.Id == med.MedicineId).FirstOrDefault();
     82                        if (medicine != null)
     83                            PHMedicines.Add(medicine);
     84                    }
     85
    7686                    if (!pharmacyHead.Medicines.Equals(PHMedicines))
    7787                    {
     
    8696                            return;
    8797                        }
    88                         foreach (var med in pharmacyHead.Medicines)
    89                         {
    90 
    91                             PharmacyHeadMedicine PHMObj = phead.Medicines.Select(x => new PharmacyHeadMedicine
     98                        if (phead.Medicines != null && phead.Medicines.Count() > 0)
     99                        {
     100                            foreach (var med in pharmacyHead.Medicines)
    92101                            {
    93                                 Id = x.Id,
    94                                 PheadId = x.PheadId,
    95                                 Head = x.Head,
    96                                 MedicineId = x.MedicineId,
    97                                 Medicine = x.Medicine
    98                             }).Where(x => !x.Medicine.Equals(med)).Single();
    99                             if (PHMObj == null || PHMObj == default)
    100                                 break;
    101                             if (PHMObj.MedicineId == med.Id)
    102                                 list.Add(PHMObj);
    103 
    104                         }
     102                                Medicine medicine = new Medicine()
     103                                {
     104                                    Name = med.Name,
     105                                    Form = med.Form,
     106                                    Manufacturer = med.Manufacturer,
     107                                    Medicines = med.Medicines,
     108                                    Packaging = med.Packaging,
     109                                    Price = med.Price,
     110                                    Strength = med.Strength,
     111                                    WayOfIssuing = med.WayOfIssuing
     112                                };
     113
     114                                PharmacyHeadMedicine phm = new PharmacyHeadMedicine()
     115                                {
     116                                    PheadId = phead.Id,
     117                                    Head = phead,
     118                                    MedicineId = med.Id,
     119                                    Medicine = medicine
     120                                };
     121                               
     122                                bool ifExists = phead.Medicines.Contains(phm);
     123                                if (!ifExists)
     124                                    list.Add(phm);
     125
     126                            }
     127                        }
     128                        else
     129                        {
     130                            foreach (var med in pharmacyHead.Medicines)
     131                            {
     132                                PharmacyHead head1 = new PharmacyHead()
     133                                {
     134                                    Id = pharmacyHead.Id,
     135                                    Name = pharmacyHead.Name,
     136                                    Email = pharmacyHead.Email,
     137                                    Password = pharmacyHead.Password
     138                                };
     139                                PharmacyHeadMedicine phMed = new PharmacyHeadMedicine()
     140                                {
     141                                    Head = head1,
     142                                    Medicine = med
     143                                };
     144                                list.Add(phMed);
     145                            }
     146                        }
     147
    105148
    106149                        phead.Medicines = list;
     
    109152
    110153                    }
    111                
    112                 if (pharmacyHead.Pharmacies != null || pharmacyHead.Pharmacies.Count() > 0)
    113                 {
    114                     phead.Pharmacies = pharmacyHead.Pharmacies;
    115                 }
     154                }
     155
    116156                PharmacyHead head = new PharmacyHead()
    117157                {
     
    120160                    Password = pharmacyHead.Password
    121161                };
     162
     163                if (pharmacyHead.Pharmacies != null)
     164                {
     165                    if (pharmacyHead.Pharmacies.Count() > 0)
     166                    {
     167                        phead.Pharmacies = pharmacyHead.Pharmacies;
     168                        head.Pharmacies = pharmacyHead.Pharmacies;
     169                    }
     170                }
     171               
    122172                if (!phead.Equals(head))
    123173                {
  • FarmatikoServices/Services/ProcessJSONService.cs

    r0a694bb re0cdea2  
    1 using FarmatikoData.FarmatikoRepoInterfaces;
    2 using FarmatikoData.Models;
    3 using System.Collections.Generic;
     1using FarmatikoData.Models;
    42using Newtonsoft.Json;
    53using Newtonsoft.Json.Linq;
     
    1311using OfficeOpenXml;
    1412using System.IO;
    15 using Microsoft.VisualBasic;
     13using GemBox.Spreadsheet;
     14using System.Text;
    1615
    1716namespace FarmatikoServices.Services
     
    2827        }
    2928        //Excel reader
    30         private async Task<bool> ReadPharmaciesFromExcel(string Path)
    31         {
    32             using (var package = new ExcelPackage(new FileInfo(Path)))
    33             {
    34                 var Sheet = package.Workbook.Worksheets[1];
    35                 for (int i = 2; i < Sheet.Dimension.End.Row; ++i)
    36                 {
    37                     Pharmacy pharmacy = new Pharmacy()
     29        private bool ReadPharmaciesFromExcel(string Path)
     30        {
     31            string path = Directory.GetCurrentDirectory() + @"\ExcellDocs\1.xlsx";
     32
     33            FileInfo fileInfo = new FileInfo(path);
     34            if (fileInfo != null)
     35            {
     36                using (var package = new ExcelPackage(fileInfo))
     37                {
     38                    var Sheet = package.Workbook.Worksheets.First();
     39                    //var table = Sheet.Tables.First();
     40                    int rowCount = Sheet.Dimension.End.Row;
     41                    for (int i = 2; i < rowCount; ++i)
    3842                    {
    39                         Name = Sheet.Cells[i, 2].Value.ToString(),
    40                         Address = Sheet.Cells[i, 3].Value.ToString(),
    41                         Location = Sheet.Cells[i, 4].Value.ToString(),
    42                         WorkAllTime = false
    43                     };
    44                     await _service.AddPharmacy(pharmacy);
     43                        //Console.WriteLine();
     44                        Pharmacy pharmacy = new Pharmacy()
     45                        {
     46                            Name = Sheet.Cells[i, 2].Value.ToString(),
     47                            Address = Sheet.Cells[i, 3].Value.ToString(),
     48                            Location = Sheet.Cells[i, 4].Value.ToString(),
     49                            WorkAllTime = false
     50                        };
     51                        _service.AddPharmacy(pharmacy);
     52                    }
    4553                    return true;
    4654                }
    47             }
     55
     56            }
     57           
    4858            return false;
    49         }
    50         public async void DownloadPharmaciesExcel()
     59
     60        }
     61        public void DownloadPharmaciesExcel()
    5162        {
    5263            try
     
    5667                string pathToSave2 = Directory.GetCurrentDirectory() + @"\ExcellDocs\2.xlsx";
    5768                var client = new WebClient();
    58                 string url1 = "http://data.gov.mk/dataset/d84c31d9-e749-4b17-9faf-a5b4db3e7a70/resource/ce446f5c-e541-46f6-9e8c-67568059cbc6/download/registar-na-apteki-vnatre-vo-mreza-na-fzo-12.08.2020.xlsx";
    59                 string url2 = "http://data.gov.mk/dataset/d84c31d9-e749-4b17-9faf-a5b4db3e7a70/resource/a16379b4-ec81-4de7-994d-0ee503d71b55/download/registar-na-apteki-nadvor-od-mreza-na-fzo-12.08.2020.xlsx";
     69                string url1 = "http://data.gov.mk/dataset/d84c31d9-e749-4b17-9faf-a5b4db3e7a70/resource/4806b744-f6f6-42d0-b0f0-d82e66d3b177/download/-.xlsxs";
     70                /*string url2 = "http://data.gov.mk/dataset/d84c31d9-e749-4b17-9faf-a5b4db3e7a70/resource/a16379b4-ec81-4de7-994d-0ee503d71b55/download/registar-na-apteki-nadvor-od-mreza-na-fzo-12.08.2020.xlsx";*/
    6071                Uri uri1 = new Uri(url1);
    61                 Uri uri2 = new Uri(url2);
    62                 client.DownloadFile(uri1, @pathToSave1);
    63                 client.DownloadFile(uri2, @pathToSave2);
    64 
    65 
    66                 bool Success = await ReadPharmaciesFromExcel(pathToSave1);
     72                //Uri uri2 = new Uri(url2);
     73                client.DownloadFileAsync(uri1, pathToSave1);
     74                //client.DownloadFile(uri2, @pathToSave2);
     75
     76
     77                bool Success = ReadPharmaciesFromExcel(pathToSave1);
    6778                _logger.LogInformation(Success.ToString() + "1");
    68                 Success = await ReadPharmaciesFromExcel(pathToSave2);
    69                 _logger.LogInformation(Success.ToString() + "2");
    70             }
    71             catch (Exception e)
    72             {
    73                 _logger.LogInformation(e.Message);
    74                 throw new Exception("Cannot process Medicines from Excel.");
     79               /* Success = await ReadPharmaciesFromExcel(pathToSave2);
     80                _logger.LogInformation(Success.ToString() + "2");*/
     81            }
     82            catch (Exception e)
     83            {
     84                _logger.LogInformation(e.Message);
     85                throw new Exception("Cannot process Pharmacies from Excel.");
    7586            }
    7687        }
  • FarmatikoServices/Services/Service.cs

    r0a694bb re0cdea2  
    33using FarmatikoData.Models;
    44using FarmatikoServices.FarmatikoServiceInterfaces;
     5using Microsoft.Extensions.Logging;
     6using Newtonsoft.Json.Linq;
     7using RestSharp;
    58using System;
    69using System.Collections.Generic;
     
    1316    {
    1417        private readonly IRepository _repository;
    15         public Service(IRepository repository)
     18        private readonly IPHRepo _phrepo;
     19        private readonly ILogger _logger;
     20        public Service(IRepository repository, IPHRepo phrepo, ILogger logger)
    1621        {
    1722            _repository = repository;
     23            _phrepo = phrepo;
     24            _logger = logger;
    1825        }
    1926
     
    7683        }
    7784
    78         public async Task<Pandemic> GetPandemic()
    79         {
    80             var Pandemic = await _repository.GetPandemic();
    81             return Pandemic;
     85        public Pandemic GetPandemic()
     86        {
     87            //var Pandemic = await _repository.GetPandemic();
     88
     89            try
     90            {
     91                var Date = DateTime.UtcNow.ToString("yyyy-MM-dd");
     92                var client = new RestClient($"https://api.covid19tracking.narrativa.com/api/{Date}/country/north_macedonia");
     93                var response = client.Execute(new RestRequest());
     94                string original = response.Content;
     95                var jsonResponsePandemic = JObject.Parse(original);
     96                if (!jsonResponsePandemic.ContainsKey("total"))
     97                {
     98                    Date = DateTime.UtcNow.AddDays(-1).ToString("yyyy-MM-dd");
     99                    client = new RestClient($"https://api.covid19tracking.narrativa.com/api/{Date}/country/north_macedonia");
     100                    response = client.Execute(new RestRequest());
     101                    original = response.Content;
     102                    jsonResponsePandemic = JObject.Parse(original);
     103                    if (!jsonResponsePandemic.ContainsKey("total"))
     104                    {
     105                        Date = DateTime.UtcNow.AddDays(-2).ToString("yyyy-MM-dd");
     106                        client = new RestClient($"https://api.covid19tracking.narrativa.com/api/{Date}/country/north_macedonia");
     107                        response = client.Execute(new RestRequest());
     108                        original = response.Content;
     109                        jsonResponsePandemic = JObject.Parse(original);
     110                    }
     111                }
     112                var global = JObject.Parse(jsonResponsePandemic.GetValue("total").ToString());
     113                var TotalConfirmed = long.Parse(global.GetValue("today_confirmed").ToString());
     114                var TotalDeaths = long.Parse(global.GetValue("today_deaths").ToString());
     115                var TotalRecovered = long.Parse(global.GetValue("today_new_recovered").ToString());
     116
     117                var mk = JObject.Parse(jsonResponsePandemic.GetValue("dates").ToString());
     118
     119                var date = JObject.Parse(mk.GetValue(Date).ToString());
     120                var country = JObject.Parse(date.GetValue("countries").ToString());
     121                var mkd = JObject.Parse(country.GetValue("North Macedonia").ToString());
     122                dynamic objP = mkd;
     123                var TotalMk = Int32.Parse(objP.GetValue("today_confirmed").ToString());
     124                var TotalDeathsMK = Int32.Parse(objP.GetValue("today_deaths").ToString());
     125                var TotalRecoveredMK = Int32.Parse(objP.GetValue("today_recovered").ToString());
     126                var NewMK = Int32.Parse(objP.GetValue("today_new_confirmed").ToString());
     127
     128                var Name = "Coronavirus";
     129                var ActiveMk = TotalMk - (TotalRecoveredMK + TotalDeathsMK);
     130                var ActiveGlobal = TotalConfirmed - (TotalRecovered + TotalDeaths);
     131
     132                Pandemic pandemic = new Pandemic(Name, TotalMk, ActiveMk, TotalDeathsMK, NewMK, TotalConfirmed, TotalDeaths, ActiveGlobal);
     133                return pandemic;
     134            }
     135            catch (Exception e)
     136            {
     137                _logger.LogInformation(e.Message);
     138            }
     139            return null;
    82140        }
    83141
     
    86144            var Pharmacies = await _repository.GetPharmacies();
    87145            List<PharmacyDTO> pharmacies = new List<PharmacyDTO>();
    88 
     146           
    89147            foreach(var pharm in Pharmacies)
    90148            {
     
    124182        }
    125183
    126         public async Task<IEnumerable<Medicine>> SearchMedicines(string query)
     184        public async Task<IEnumerable<MedicineDTO>> SearchMedicines(string query)
    127185        {
    128186            var SearchQuery = await _repository.SearchMedicines(query);
    129             return SearchQuery;
    130         }
    131 
    132         public async Task<IEnumerable<Pharmacy>> SearchPharmacies(string query)
     187            List<MedicineDTO> list = new List<MedicineDTO>();
     188            var listPHMedicines = await _repository.GetAllPHMedicines();
     189            List<string> headNames = new List<string>();
     190            List<PharmacyHead> heads = new List<PharmacyHead>();
     191            foreach (var med in SearchQuery)
     192            {
     193                var meds = listPHMedicines.Where(x => x.MedicineId == med.Id).ToList();
     194                if (meds != null)
     195                {
     196                    heads = meds.Select(x => x.Head).ToList();
     197                }
     198                if (heads != null)
     199                    headNames = heads?.Select(x => x?.Name).ToList();
     200                MedicineDTO medicine = new MedicineDTO()
     201                {
     202                    Name = med.Name,
     203                    Manufacturer = med.Manufacturer,
     204                    Packaging = med.Packaging,
     205                    Form = med.Form,
     206                    Price = med.Price,
     207                    Strength = med.Strength,
     208                    WayOfIssuing = med.WayOfIssuing,
     209                    HeadNames = headNames
     210                };
     211
     212                list.Add(medicine);
     213                headNames = new List<string>();
     214            }
     215
     216            return list;
     217        }
     218
     219        public async Task<IEnumerable<PharmacyDTO>> SearchPharmacies(string query)
    133220        {
    134221            var SearchQuery = await _repository.SearchPharmacies(query);
    135             return SearchQuery;
     222            List<PharmacyDTO> pharmacies = new List<PharmacyDTO>();
     223            var heads = await _phrepo.GetPharmacyHeadInfo();
     224           
     225            foreach (var pharm in SearchQuery)
     226            {
     227                PharmacyDTO pharmacyDTO = new PharmacyDTO()
     228                {
     229                    Name = pharm.Name,
     230                    Location = pharm.Location,
     231                    Address = pharm.Address,
     232                    WorkAllTime = pharm.WorkAllTime
     233                };
     234               
     235                foreach(var head in heads.ToList())
     236                {
     237                    if (head.Pharmacies.Contains(pharm))
     238                    {
     239                        pharmacyDTO.HeadName = head.Name;
     240                        break;
     241                    }
     242                }
     243               
     244                pharmacies.Add(pharmacyDTO);
     245            }
     246            return pharmacies;
    136247        }
    137248
     
    166277        }
    167278        // Samo PharmacyHead i Admin imaat pristap
    168         public async Task AddPharmacy(Pharmacy pharmacy)
     279        public void AddPharmacy(Pharmacy pharmacy)
    169280        {
    170281            if (pharmacy != null)
    171                 await _repository.AddPharmacy(pharmacy);
     282                _repository.AddPharmacy(pharmacy);
    172283            else throw new Exception("Pharmacy is null");
    173284        }
    174285
    175286        // Ovaa kontrola ja ima samo admin
    176         public async Task<User> MakeUser(PharmacyHead head)
    177         {
    178             User user = new User()
    179             {
    180                 Name = head.Name,
    181                 Password = head.Password,
    182                 Email = head.Email,
    183                 UserRole = User.Role.PharmacyHead
    184             };
    185             bool Success = await _repository.AddUser(user);
    186             if (!Success)
    187                 return null;
    188             return user;
    189         }
     287       
    190288        public async Task<bool> AddPharmacyHead(PharmacyHeadDto pharmacyHead)
    191289        {
     
    198296                    Password = pharmacyHead.Password
    199297                };
    200                 var user = await MakeUser(phead);
     298                User user = new User()
     299                {
     300                    Name = phead.Name,
     301                    Password = phead.Password,
     302                    Email = phead.Email,
     303                    UserRole = User.Role.PharmacyHead
     304                };
    201305                if (user is null)
    202306                {
    203307                    return false;
    204308                }
    205                 var users = _repository.GetUsers();
    206                 var thisUser = users.Where(usr => usr.Value.Email.Equals(user.Email)).Select(x => x.Value).FirstOrDefault();
    207309                User user1 = new User()
    208310                {
    209                     Name = thisUser.Name,
    210                     Password = thisUser.Password,
    211                     Email = thisUser.Email,
    212                     UserRole = thisUser.UserRole
     311                    Name = user.Name,
     312                    Password = user.Password,
     313                    Email = user.Email,
     314                    UserRole = user.UserRole
    213315                };
    214316                phead.User = user1;
Note: See TracChangeset for help on using the changeset viewer.