niedziela, 30 kwietnia 2017

wypełnienie treścią

Trochę mrówczej pracy.

Cennik i opisy gotowe


Następnym etapem będzie w końcu meritum - czyli rezerwacja wizyty :)

czwartek, 27 kwietnia 2017

telerik

Moja przygoda z .NET rozpoczęła się z WebForms i bardzo szybko zaczęłam korzystać z kontrolek Telerik. Mimo sporego kosztu zakupu kontrolki bardzo przydają się w codziennym programowaniu, szczególnie, gdy nie zwracamy bardzo dużej uwagi na sam wygląd, a najważniejszym punktem jest funkcjonalność. Dzięki temu można w dość krótkim czasie przygotować użytkowników potrzebne narzędzie do pracy.

Telerik ma sporą listę kontrolek. Najczęściej używane przeze mnie to RadGrid, RadComboBox, RadMenu, RadTexBox itp. Kontrolki te mają już z góry zdefiniowane metody i należy je tylko wykorzystać. Firma również oferuje bardzo pomocne dema pokazując możliwości kontrolek, a także w jaki sposób z nich korzystać i jakie trudności można napotkać.

niedziela, 23 kwietnia 2017

connectionstring


Connectionstring dostarcza informacji, które są potrzebne do komunikowania się z bazą danych. Za pomocą niego możemy określać parametry specyfikujące połączenie, takie jak:
  • Data Source – ten parametr określa nazwę instancji SQL Server’a
  • AttachDbFileName – parametr określający miejsce przechowywania pliku bazy danych oraz jego nazwę,
  • ID – login wykorzystywany do autoryzacji dostępu do SQL Server’a,
  • Initial Catalog – określa nazwę bazy danych,
  • Integrated Security – określa sposób logowania do instancji SQL Server:
    • True – logowanie tylko za pomocą Windows Integrated Security (systemu operacyjnego),
    • False – logowanie za pomocą IDhasła dostarczonego w connection string,
    • SSPI – ten parametr określa, że zastosujemy logowania za pomocą Windows Integrated Security, jeśli nie dostarczono ID i hasła w connection string,
  • MultipleActiveResultSets – umożliwia równoległą egzekucję zapytań do bazy danych,
  • Password – hasło wykorzystywane do autoryzacji dostępu do SQL Server’a,
  • User Instance – wykorzystywane tylko dla SQL Server Express, z parametrem True tworzy specjalną instancję SQL Server Express, w której zwykły użytkownik będzie miał prawa administratorskie.
Najlepszym rozwiązaniem jest umieszczenie connectionstring w pliku web.config. Dzięki temu, jeżeli zmienimy lokalizację bazy danych będzie można za pomocą jednego wpisu dokonać odpowiednich zmian bez kompilacji całego projektu.

W moim projekcie connectionstring w pliku web.config wygląda następująco:

piątek, 21 kwietnia 2017

strona mobilna

Zmagań z grafiką ciąg dalszy. Tym razem stronka została dostosowana do wersji mobilnych.


Powstała również grafika stronki do rezerwacji. Choć potrzebuje jeszcze kosmetycznej korekty.

sobota, 15 kwietnia 2017

autoryzacja i uwierzytelnienie w .net - podstawy

W dzisiejszych czasach bardzo istotne jest bezpieczeństwo w sieci. Nie tylko administratorzy systemu powinni o nie dbać, ale również programiści  powinni zwrócić szczególną uwagę na autoryzację użytkownika, kontrolę dostępu do określonych zasobów czy funkcji oprogramowania.

W .net mamy bezpieczeństwo oparte na rolach. Dzięki temu można sprawdzić tożsamość użytkownika i weryfikować jego prawa do zasobów. Można to zrobić na dwa sposoby:
  •  deklaratywny (declarative security), polegający na dodawaniu atrybutów do klas, metod, bloków kodu, które będą wchodzić w skład metadanych,
  •  programowy (imperative security), polegający na dynamicznym tworzeniu zestawu uprawnień, które są sprawdzane na etapie wykonywania kodu. (Źródło: dokumentacja Microsoft)

  • Dostęp do danych zalogowanego użytkownika w systemie można uzyskać poprzez wykorzystanie klasy WinsowsIdentity.
    WindowsIdentity current = WindowsIdentity.GetCurrent();
    Potrzebna jest tutaj przestrzeń nazw System.Security.Principal .

    piątek, 14 kwietnia 2017

    pierwsza strona

    W tym trudnym czasie przedświątecznym udało się wygospodarować chwilkę czasu na projekt :).

    Stworzyłam logo mojego gabinetu:


    Wstawiłam je również do projektu i dzięki temu mam gotową pierwszą stronę



    Życzę wszystkim Wesołych Świąt Wielkanocnych, dużo zdrówka, szczęścia i wytrwałości.

    niedziela, 9 kwietnia 2017

    MVC - cykl życia


    Źródło: https://docs.microsoft.com/en-us/aspnet/mvc/overview/getting-started/lifecycle-of-an-aspnet-mvc-5-application

    1. Http Request
    Czyli żądanie z przeglądarki, w którym za pomocą adresu można przekazać, który widok interesuje odbiorcę, ewentualnie parametry

    2. Routing
    W pliku RouteConfig.cs przypisane są wzorce przebiegu trasy. Visual Studio sam zapisuje te wzorce na podstawie dodanych kontrolerów i widoków z nich wywoływanych
    Czyli jedną stronę możemy wywołać w różny sposób:
    http://mojastrona.pl
    http://mojastrona.pl/Home
    http://mojastrona.pl/Home/Index
    pod warunkiem, że dodano kontroler o nazwie HomeController oraz widok Index, a w kontrolerze zdefiniowano wywołanie widoku

    3. MvcHandler
    W tym miejscu jest wybierany odpowiedni kontroler na podstawie adresu w HTTP Request

    4. Authentication and Authorization - filtry sprawdzające czy użytkownik wysyłający żądanie przeszedł pozytywnie uwierzytelnienie (logowanie) i ma prawo do przeglądania treści tej strony

    5. Model binding
    Na podstawie adresu żądania rozwiązywane są parametry, np.
    http://mojastrona.pl/Home/edit/2
    W kontrolerze Home znajduje się metoda edit, która przyjmuje 1 parametr (np. typu int).

    6. Action Method Invocation
    MVC będzie próbować wykonać metodę z punktu powyżej za pomocą funkcji InvokeAction.

    7. Result Execution
    Na podstawie wyników poprzednich metod zwracany jest instancja klasy dziedziczącej po ActionResult. Może to być np: ViewResult, RedirectResult, ContentResult, JsonResult, JavaScriptResult, FileResult, EmptyResult

    8. Http Response
    Zwraca wyrenderowany widok, może to być np. Razor lub ASPX.




    piątek, 7 kwietnia 2017

    Baza danych - pierwsze procedury

    Odzwierciedleniem klas w aplikacji są tabele w bazie danych. No to do dzieła. Tworzymy tabele.

    Na razie jest to tabela Wizyta i tabela RodzajZabiegu. Tabele zawierają dokładnie takie same pola, jak klasa, żeby wszystko ładnie połączyło się w jedną spójną całość.

    Na początek dodałam też procedury dodawania wizyt.

    1. Pierwsza procedura rezerwuje termin. Zostanie wykonana po wprowadzeniu daty zaplanowanej przez użytkownika wizyty

    ALTER PROCEDURE [dbo].[WizytaInsert]
    (
    @Data_od datetime,
    @Data_do datetime
    )
    AS
    BEGIN
    declare
    @ile as int,
    @maxID as int
           select @ile=count(Id) from Wizyty where (Data_od between @Data_od and @Data_do)
                                                  or (Data_do between @Data_od and @Data_do)
           if (@ile>0)
           begin
                 insert into Wizyta(Data_od,Data_do)
                 values(@Data_od,@Data_do)
                 select @maxID=max(Id) from Wizyta
           end
           else
           select 0    
    END

    Jeżeli nikt jeszcze nie zarezerwował wizyty na ten czas, to wizyta zostanie zapisana, jeżeli już była wizyta, to zwraca błąd (czyli 0)

    2. Druga procedura to dokonanie formalności w zapisie pozostałych danych:

    create PROCEDURE [WizytaUpdate]
    (
    @Imie nvarchar(50),
    @Nazwisko nvarchar(50),
    @Telefon nvarchar(50),
    @Email nvarchar(50),
    @Data_od datetime,
    @Data_do datetime,
    @RodzajZabiegu int,
    @Id as int
    )     
    AS
    BEGIN
           update Wizyta set Imie=@Imie,Nazwisko=@Nazwisko,Telefon=@Telefon,Email=@Email,
           RodzajZabiegu=@RodzajZabiegu ,KodAutoryzacji=getdate()+rand(100)
           where Id=@Id
          select KodAutoryzacji from Wizyta where Id=@Id
    END
    GO

    Zwraca ona kod autoryzacji, który będzie wysłany na maila, w celu potwierdzenia wizyty.

    niedziela, 2 kwietnia 2017

    GitHub i nowa klasa

    Chciałabym napisać coś na temat GitHub a Visual Studio.
    Wszystko wydawałoby się trywialnie proste. Z nuget-a pobrać GitHub, instalacja, sklonowanie projektu do GitHub i gotowe.

    Mój problem zaczął się w momencie, gdy przeniosłam fizycznie projekt. Okazało się, że automatycznie projekt stracił połączenie z GitHub, mimo wskazania nowego lokalnego repozytorium.

    Okazało się, że w tej sytuacji należy ściągnąć repozytorium z GitHub do nowej lokalizacji i dopiero wtedy na tym projekcie pracować.

    Szczerze mówiąc myślałam, że narzędzie do kontroli wersji w postaci GitHub będzie przyjaźniejsze w obsłudze. Do tej pory wykorzystywałam go tylko w eclipse.

    Dodatkowo w projekcie dodałam jeszcze jedną klasę, ponieważ uznałam, że rodzaj zabiegu będzie zesłownikowany.

    public class RodzajZabietu
    {
    public int Id { get; set; }
    public string Nazwa { get; set; }
    }

    sobota, 1 kwietnia 2017

    Model w projekcie

    W katalogu Models utworzona został klasa wizyt w gabinecie kosmetycznym:
    public class Wizyta

    {
    public int Id { get; set; }
    public string Imie { get; set; }
    public string Nazwisko { get; set; }
    public string Telefon { get; set; }
    public string Email { get; set; }
    public DateTime Data_od { get; set; }
    public DateTime Data_do { get; set; }
    public string RodzajZabiegu { get; set; }
    public Boolean Potwierdzona { get; set; }
    }

    Pola zawierają wszystkie niezbędne elementy, które będą odzwierciedleniem bazy danych.
    Na adres e-mail będzie wysyłany link, z prośbą o potwierdzenie rezerwacji wizyty.

    Niezbędne jest dodanie drugiej klasy:
    public class WizytyDBCtxt : DbContext
    {
    public DbSet<Wizyta> Wizyty { get; set; }
    }
     
    Klasa ta będzie odpowiedzialna za obsługę (pobieranie, przechowywanie, dodawanie itd.) danych w tabeli 'Wizyta' w bazie danych. Dziedziczy po klasie DbContext z Entity Framework.