WYŻSZA SZKOŁA ZARZĄDZANIA I MARKETINGU W SOCHACZEWIE Wydział Zarządzania i Marketingu Urbański Marcin Numer albumu 3984 Program do zarządzania hotelem dla zwierząt "MiniCrm Aport v2_0" Praca dyplomowa praca wykonana pod kierunkiem Górczyński Janusz Sochaczew 2012 Praca powstała pod kierunkiem Górczyńskiego Janusza któremu składam serdeczne podziękowania za wiele cennych wskazówek i pomoc przy pisaniu pracy dyplomowej. 2 Spis treści WSTĘP .............................................................................................................................................................. 4 1 CRM - JAKO ELEMENT STRATEGII WSPÓŁCZESNEJ ORGANIZACJI. ................................. 6 2 INSTALACJA ........................................................................................................................................... 8 2.1 WYMAGANIA ..................................................................................................................................... 8 2.2 PROCES .............................................................................................................................................. 8 3 OPIS APLIKACJI .................................................................................................................................... 9 3.1 SPECYFIKACJA FUNKCJONALNOŚCI APLIKACJI ................................................................................... 9 3.2 ZASTOSOWANE ROZWIĄZANIA ........................................................................................................... 9 3.3 PROJEKT BAZY DANYCH ..................................................................................................................... 9 3.3.1 Tabele i relacje ........................................................................................................................... 10 3.3.2 Procedury ................................................................................................................................... 11 3.4 PROJEKT INTERFEJSU ....................................................................................................................... 12 3.4.1 Informacje na temat autora oprogramowania............................................................................ 12 3.4.2 Informacje na temat aplikacji ..................................................................................................... 13 3.4.3 Ekran główny .............................................................................................................................. 13 3.4.4 Inteligentne zachowanie aplikacji w wyniku wyszukiwania ....................................................... 14 3.4.5 Dodawanie nowego klienta ........................................................................................................ 15 3.4.6 Dodawanie Pupila ...................................................................................................................... 16 3.4.7 Przeglądanie informacji o Kliencie ............................................................................................ 17 3.4.8 Dodawanie nowej informacji o kontakcie z Klientem ................................................................ 20 3.4.9 Dodawanie nowej transakcji sprzedaży...................................................................................... 21 3.4.9.1 Drukowanie dokumentów .................................................................................................................... 22 3.4.10 Dodawanie nowego produktu ..................................................................................................... 23 3.5 WALIDACJA ..................................................................................................................................... 23 3.6 PROPONOWANE ROZSZERZENIA NA PRZYSZŁOŚĆ ............................................................................. 25 4 PODSUMOWANIE ................................................................................................................................ 27 5 LITERATURA ........................................................................................................................................ 28 6 ZAŁĄCZNIKI......................................................................................................................................... 30 6.1 WAŻNIEJSZE PROCEDURY SQL ........................................................................................................ 30 6.1.1 Dodawanie Opiekuna ................................................................................................................. 30 6.1.2 Dodawanie transakcji sprzedaży ................................................................................................ 35 6.1.3 Wyszukiwanie opiekunów (zaawansowany formularz wyszukiwania) ........................................ 36 6.1.4 Przeglądanie kartoteki opiekuna ................................................................................................ 38 6.1.5 Aktualizacja informacji o wpływie środków na konto ................................................................ 41 6.2 PRZYKŁADOWE ORMULARZE APLIKACJI........................................................................................... 41 6.2.1 Frm_Ekran_Glowny ................................................................................................................... 41 6.2.2 Frm_Dodawanie_Produktu ........................................................................................................ 43 6.2.3 Frm_Dodawanie_Opiekuna ....................................................................................................... 49 3 Wstęp Na polskim rynku usług dla zwierząt na przełomie ostatniego dwudziestolecia obserwujemy znaczące ożywienie. W szczególności opieki na rzecz zwierząt domowych, na czas ich opuszczania prze opiekunów (delegacje służbowe, wakacje za granicą).1 Większa świadomość społeczna oraz troska o komfort pupila podczas rozłąki jest motorem do rozwoju przemysłu hotelarskiego dla zwierząt. Powstają kolejne hotele i pensjonaty, które będą zmuszone konkurować ze sobą już nie tylko zakresem usług ale przede wszystkim poziomem profesjonalizmu. Wraz ze wzrostem konkurencyjności na rynku będzie nasilała się potrzeba zatrzymania przy sobie tego właściwego klienta. Klienta, który aktywnie korzysta z naszych usług, chętnie nam doradza oraz regularnie i terminowo reguluje swoje zobowiązania. Pracując w dużych korporacjach zdaję sobie sprawę z wagi informacji o kliencie w jednym systemie. Niniejsza praca ma ku temu posłużyć i stanowić narzędzie przydatne dla każdego nowego podmiotu rozpoczynającego działalność w branży usług dla zwierząt. Branża ta jest dość specyficzna, gdyż należy dbać o komfort zwierząt goszczących w hotelu ale i komfort ich opiekunów. Celem pracy dyplomowej jest stworzenie aplikacji do zarządzania relacjami z klientem dla specyficznego typu działalności - hotel dla zwierząt. Za pomocą języka Visual Basic zamierzam pokazać możliwości wykorzystania niekomercyjnego rozwiązania do tworzenia komercyjnych aplikacji. Przed aplikacją stawiane są trzy wymogi: 1. aplikacja musi umożliwiać rejestrowanie nowych klientów zwierząt i ich opiekunów 2. powinna dawać możliwość rejestrowania sprzedaży oraz wystawiania dokumentów sprzedaży typu faktura VAT i rachunek 3. dostarczać użytkownikom kompleksową wiedzę na temat Klienta: jego preferencjach, płatnościach, historii kontaktów oraz pełną informację o posiadanych przez niego pupilach 1 Politechnika Białostocka, Kwartalnik Wydziału Zarządzania, Tyt.: Ekonomia i zarządzanie Tom 3 nr 1, strona:113, praca zbiorowa: Janusz Leszek Sokół (Katedra Zarządzania Produkcją, Wydział Zarządzania, Politechnika Białostocka), Magda Anna Stasińska, Kazimierz Ściesiński (Katedra Szczegółowej Hodowli Zwierząt, Wydział Nauk o Zwierzętach, SGGW) 4 W tekście przyjęta jest następująca konwencja: nazwy procedur, funkcji, widoków, nazwy form, fragmenty kodu pisane są czcionką Courier New; wielkimi literami są pisane słowa kluczowe języka SQL takie jak SELECT, INSERT, UPDATE, WHERE; małymi literami pisane są słowa drugorzędne, np. typy danych. 5 1 CRM - jako element strategii współczesnej organizacji. Istnieje wiele definicji rozszyfrowujących skrót CRM (ang. Customer Relationship Managment). Według mnie najkompletniejszą jest następująca: "Customer Rrelationship Mmanagement, to zbiór modeli biznesowych, metodologii działań i technologii interaktywnych uruchamianych po to, aby uzyskać wysoki poziom pozostawania najbardziej wartościowych klientów i uzyskiwania od nich pozytywnych referencji."2 Powyższa definicja podkreśla, iż CRM to przede wszystkim strategia skupiająca wiedzę na temat klienta i jego preferencji w celu selekcji i otoczenia największą troską tych najwartościowszych z biznesowego punktu widzenia. W dzisiejszych czasach, przy ogromie informacji jakie możemy uzyskać osiągnięcie tego nie jest możliwe bez odpowiedniego oprogramowania komputerowego. CRM jest próbą stworzenia unikatowej więzi pomiędzy klientem i sprzedawcą. Proces ten uwzględnia indywidualne podejście oraz przekształca tradycyjny cel jaki był pierwotnie pozyskanie klienta, w budowaniu pozytywnych relacji z klientem. Rozwijaniem współpracy z nim, zwiększania jego udziału w naszym portfelu klientów, rozpoznawania i zaspokajania jego potrzeb.3 Wciąż wzmagająca się rywalizacja między konkurencyjnymi przedsiębiorstwami, rozwój handlu wielkopowierzchniowego propagującego "masowe" podejście do klienta, rotacja pracowników w działach handlowych spowodowało, iż organizacje zaczęły mocniej dbać, poznawać i zabiegać o klienta. Dbałość ta miała na celu, aby klient poczuł się kimś wyjątkowym. Stał się najcenniejszym zasobem o którego zaczęto się najbardziej troszczyć. Tym samym, minimalizować ryzyko związane np. z przejściem klienta do konkurencji wraz z pracownikiem. Wzrost konkurencyjności zawsze towarzyszy zjawisko zmniejszenia lojalności klientów. Tak zrodziła się koncepcja systemów ukierunkowanych na klienta. Systemy klasy CRM wspierają tą koncepcję. 2 3 Źródło: http://crm.eprace.edu.pl/313,Definicja_i_istota_systemu_CRM.html - 2012-09-20 http://kis.pwszchelm.pl/publikacje/V/Stasienko.pdf , str. 226 - 2012-09-20 6 Głównym założeniem systemu CRM jest spersonalizowane podejście do każdego klienta. Każdy ma swoje potrzeby, cele, preferencje, własny sposób podejmowania decyzji. Jedni podejmują decyzje pod wpływem impulsu, inni potrzebują dłuższego czasu. Jedni analizują każdy wydatek, inni nie. Na efektywność relacji między organizacją a klientem wpływa dysponowanie kompletną informacją, wiedzą o nim. Dlatego istotna jest dbałość o informację i pamięć o tym, że każde zdarzenie polegające na kontakcie klienta z organizacją powinno być rejestrowane przez system informacyjny. Wiedza o kliencie, jego potrzebach, zachowaniach, czy historii współpracy. 7 2 Instalacja 2.1 Wymagania Do uruchomienia aplikacji na komputerze klienckim niezbędne jest posiadanie następującego oprogramowania: SQL Server 2012 Express Edition; Visual Studio 2010. 2.2 Proces W celu uruchomienia aplikacji z załączonej do pracy płyty należy: skopiować bazę danych "CRM_2_0_Aport" na stację kliencką; skopiować folder "MiniCRM_2_0_Aport" na stację kliencką; uruchomić projekt programu za pomocą Visual Studio oraz wskazać bazę danych na komputerze klienckim na każdym formularzu; uruchomić program. 8 3 Opis aplikacji 3.1 Specyfikacja funkcjonalności aplikacji Projektowana przeze mnie aplikacja umożliwia prowadzenie dokumentacji związanej z obsługą klienta indywidualnego, jak i biznesowego. Aplikacja została stworzona za pomocą Visual Studio i języka Visual Basic. Aplikacja zawiera szereg funkcjonalności ułatwiających proces utrzymywania relacji z klientami: gromadzenie informacji o klientach, którzy będą rozróżniani jako osoby klienci indywidualni i biznesowi wraz z zdjęciem klienta, informacjami odnośnie firmy i klasyfikacją firmy; gromadzenie i przechowywanie informacji odnośnie pupili klientów wraz z wywiadem na temat preferencji żywieniowych, warunków bytowych oraz zachowań względem innych zwierząt i ludzi; rejestrowanie nowych produktów wg ustalonego porządku; wyszukiwanie klientów wg jednego lub wielu kryteriów drukowania dokumentów finansowych typu faktura Vat lub rachunek; rejestrowania kontaktów wg kanałów komunikacji; rejestrowanie sprzedaży. Interfejs aplikacji został zaprojektowany pod kątem łatwości obsługi, tak by każdy nowy użytkownik był wstanie wyszukiwać klientów i analizować ich. Dzięki zastosowaniu intuicyjnych przycisków aplikacja w obsłudze jest niezwykle prosta. 3.2 Zastosowane rozwiązania Tak, jak pisałem we wstępie, zamierzam zaprezentować najnowsze, nie komercyjne rozwiązania firmy Microsoft, które umożliwiają tworzenie profesjonalnych aplikacji. Do tworzenia aplikacji wykorzystałem narzędzie Visual Studio 2010 w wersji Express Edition a do komunikacji z serwerem Microsoft SQL Server 2012 Express Edition. 3.3 Projekt bazy danych Podstawę aplikacji stanowi baza danych SQL Server. W związku z przejrzystą prezentacją opis projektu został podzielony na 2 główne części: tabele i relacje oraz procedury. 9 3.3.1 Tabele i relacje Tabela to najważniejsza część bazy danych, która pozwala na odpowiednie rozplanowanie i przechowywanie informacji w formie uporządkowanej, a co za tym idzie pozwala łatwo analizować te informacje w przyszłości. W projektowanej aplikacji wszystkie dane (dane klientów, informacje o pupilach, informacje na temat sposobów i terminów kontaktowania się z Klientem oraz informacje na temat wystawionych dokumentów finansowych) przechowywane będą w tabelach SQL Server oraz połączone będą ze sobą odpowiednimi typami relacji. Rysunek 1. Ogólny Diagram bazy danych. Przeznaczenie poszczególnych tabel baz danych wygląda następująco: Opiekunowie - jest to tabela główna w której przechowywane są szczegółowe informacje na temat klientów wraz ze ścieżką do zdjęcia Klienta. Pupile - w tej tabeli przechowywane są szczegółowe informacje na temat mniejszych "klientów" - opiekunów hotelu. Oprócz ogólnej charakterystyki przechowywane są informacje z wywiadu na temat pupila (zwyczajów pokarmowych, zachowania, aktywności, szczepień). 10 Produkty_Uslugi - ta tabela przechowuje odpowiednio skatalogowane informacje na temat oferowanych przez hotel produktów i usług. Możliwe jest zbudowanie osobnej oferty dla klientów indywidualnych oraz biznesowych. Kontakt - w tej tabeli przechowywane są informacje na temat historii kontaktów z klientem. Przechowywane są min takie informacje, jak: data kontaktu, inicjator kontaktu, cel, notatka, planowana data kolejnego kontaktu i informacje o jakich należy pamiętać przy następnym kontakcie. Sprzedaz - za pomocą tej tabeli dowiemy się jakie dokumenty były wystawiane danemu klientowi, z jakich usług produktów skorzystał, jakie terminy płatności uzyskał oraz jaki był typ płatności. 3.3.2 Procedury Głównym założeniem podczas tworzenia aplikacji było wykonywanie wszystkich czynności związanych z bazą danych za pomocą procedur przechowywanych SQL. Dzięki takiemu podejściu został zminimalizowany czas wykonywania zapytań i pobierania z nich informacji. Dzięki czemu aplikacja działa szybciej niż miałoby to miejsce realizując zapytanie po stronie Visual Basic. Jak wspomniałem wcześniej wszystkie czynności wykonywane są za pomocą procedur. Do procedur przekazywane są odpowiednie parametry generowane na podstawie zachowań użytkownika w aplikacji, np. otwarcie formularza w celu przejrzenia karty Klienta da inny efekt niż otwarcie tego samego formularza ale w celu przejrzenia historii kontaktów. Dzieje się tak po przez identyfikację źródła otwarcia, a to z kolei determinowane jest przez przekazanie odpowiedniego parametru. Ilość zdefiniowanych procedur wykracza poza możliwości opisania każdej z nich dlatego zamieściłem jedynie przykładowe procedury jako załącznik pracy. 11 Rysunek 2. Widok danych zwracanych przez procedurę Przegladanie_KartyKlienta_dgv. 3.4 Projekt interfejsu Przy projektowaniu interfejsu aplikacji zależało mi na prostocie obsługi oraz w miarę możliwości wyeliminowanie niekontrolowanej swobody użytkownika. Opis projektu interfejsu przedstawia wszystkie możliwe ścieżki użycia. Począwszy od dodawania nowego produktu/usługi, opiekuna, pupila, przeglądania kartoteki opiekuna, przez zostawienie notatki ze spotkania, na rejestracji sprzedaży i wydrukowaniu dokumentów skończywszy. Przed interfejsem postawiono pewne założenia: ma być prosty w obsłudze; ma być przyjazny użytkownikowi; ma być ładny wizualnie; ma być intuicyjny. 3.4.1 Informacje na temat autora oprogramowania Użytkownicy mogą liczyć na wsparcie autora oprogramowania oraz odwiedzić jego stronę w celu przekazania uwag dotyczących działania oprogramowania. Po kliknięciu w "splash screen" zostanie uruchomiona przeglądarka z firmową stroną. 12 Rysunek 3. Informacje na temat głównej działalności firmy. Źródło: opracowanie własne 3.4.2 Informacje na temat aplikacji Na ekranie głównym w dowolnym momencie można zapoznać się z informacjami na temat aplikacji oraz jej autora. Rysunek 4. Okno zawiera informacje o aplikacji i jej autorze. Źródło: opracowanie własne 3.4.3 Ekran główny Przyjazny interfejs oraz intuicyjne przyciski ułatwiają nawigację w programie, a grafika zachęca do używania aplikacji. 13 Rysunek 5. Ekran główny aplikacji. Źródło: opracowanie własne 3.4.4 Inteligentne zachowanie aplikacji w wyniku wyszukiwania Poniżej pokazany jest formularz wyszukiwania opiekunów zwierząt, który został tak zaprojektowany, aby rozpoznawał intencje użytkownika. Rysunek 6. Formularz wyszukiwania. Źródło: pracowanie własne 14 W zależności od użytej ikony funkcyjnej formularz wyszukiwania decyduje który następny formularz zostanie wyświetlony użytkownikowi. Dzięki zastosowanemu rozwiązaniu została wyeliminowana konieczność tworzenia kilku identycznych formularzy - dla różnych funkcji aplikacji. Podwójne kliknięcie na dane klienta powoduje przejście do odpowiedniego formularza zgodnego z wcześniejszym wyborem użytkownika dokonanym na ekranie głównym. 3.4.5 Dodawanie nowego klienta Ekran rejestracji opiekuna oprócz zbierania typowych danych przy tego typu aplikacjach: dane identyfikacyjne, dane adresowe informacje o kontakcie, wymusza konieczność wyboru "Źródła informacji o ofercie". Dodatkowo istnieje możliwość wprowadzenia "Kodu Kampanii" pole to w późniejszym procesie analizy pozwoli precyzyjnie określić rentowność danego kanału komunikacji oraz konkretnej kampanii marketingowej. Rysunek 7. Formularz rejestracji opiekuna. Źródło: opracowanie własne Formularz umożliwia również zakładanie klientów biznesowych. W tym celu profil opiekuna należy uzupełnić o dodatkowe informacje. Użycie przycisku "Faktura na firmę" uruchomi dodatkowy formularz z dodatkowymi polami, które należy wypełnić. 15 Rysunek 8. Formularz z dodatkowymi polami przy rejestracji firmy. Źródło: opracowanie własne Informacje typu "Imię i Nazwisko", "Główna działalność firmy", czy edytowane pole "Branża" posłużą profilowaniu oferty handlowej w przyszłości. 3.4.6 Dodawanie Pupila Klienci (opiekunowie) hoteli dla zwierząt decydują się na pozostawianie swoich pupili z konieczności i zarazem z troski o nie. Szczegółowy wywiad odnośnie pupila ma na celu nie tylko poznanie preferencji i zachowań podopiecznego hotelu ale i zacieśnienie więzi z klientem. Informacje o szczepieniach nie tylko przypominają o obowiązkowych szczepieniach, lecz stanowią istny pretekst do podtrzymywania relacji z klientem. Wręcz go wyręczają z tego obowiązku. Wszelkie działania "posprzedażowe" podnoszące komfort sprzyjają ocieplaniu stosunków w relacji sprzedawca-klient. 16 Rysunek 9. Dodawanie nowego pupila. Źródło: opracowanie własne 3.4.7 Przeglądanie informacji o Kliencie Istotą "prawdziwych" systemów klasy CRM jest udostępnianie kompleksowych informacji o klientach. Formularz przeglądania klienta daje taką funkcjonalność. Ekran ten składa się z 4 zakładek skupiających wszystkie informacje na temat opiekuna: "Dane Opiekuna" - w jednym miejscu użytkownik uzyskuje informacje na temat: - długości współpracy wyrażone w dniach; - obrocie netto od początku współpracy; - informację, czy dany opiekun reprezentuje firmę; - terminie urodzin; - dacie i typie ostatniego kontaktu; - informacje odnośnie dacie i kwocie ostatniej; - informacje, czy ostatni dokument został opłacony; - liczbie pupili, ich średnim wieku oraz dominującym gatunku; - oraz informacje teleadresowe. 17 Rysunek 10. Przeglądanie karty klienta - Dane Opiekuna. Źródło: opracowanie własne "Pupile" - ta karta służy do szczegółowego przeglądania informacji na temat pupili danego opiekuna wraz z informacjami uzyskanymi podczas wywiadu. Rysunek 11. Przeglądanie karty klienta - pupile. Źródło: opracowanie własne W dolnej części formularza znajdują się dynamicznie generowane informacje na temat szczepień wybranego pupila. 18 "Historia kontaktów" - udostępnia wgląd w pełną historię kontaktów. Rysunek 12. Przeglądanie karty klienta - Historia Kontaktów. Źródło: opracowanie własne "Historia Transakcji" Rysunek 13. Przeglądanie karty klienta - Historia Transakcji. Źródło: opracowanie własne 19 Górna część widoku karty zawiera informacje na temat ostatniej transakcji, natomiast sekcja "Zakupione Produkty/Usługi" zawiera szczegółowy wykaz zakupionych produktów. Poniżej znajduje się wykaz wszystkich dokumentów wystawionych na danego opiekuna - podwójne kliknięcie w pozycję otwiera szczegółowy podgląd dokumentów. Dodatkowo na każdej karcie formularza "Przeglądanie Karty Klienta" użytkownik może w dowolnym momencie przejść do innych formularzy (rejestracja sprzedaży, dodanie pupila, dodanie informacji o kontakcie) bądź wrócić do ekranu głównego. 3.4.8 Dodawanie nowej informacji o kontakcie z Klientem Formularz ten służy nie tylko odnotowaniu informacji na temat kontaktu ale również zawiera elementy planowania. Rysunek 14. Dodawanie informacji o kontakcie. Źródło: opracowanie własne 20 3.4.9 Dodawanie nowej transakcji sprzedaży Dodawanie sprzedaży jest wyjątkowo proste. Wystarczy tylko wybrać dwie wartości z pól typu combo: Typ dokumentu oraz Termin płatności i wpisać kupowane ilości. Pozostałe informacje uzupełniają się samoistnie. Rysunek 15. Rejestrowanie sprzedaży. Źródło: opracowanie własne Zakończenie rejestrowania transakcji kończy się pytaniem, czy użytkownik ma zamiar wydrukować dokument dokumenty sprzedażowe. 21 3.4.9.1 Drukowanie dokumentów Rysunek 16. Widok dokumentu sprzedaży. Źródło: opracowanie własne Kliknięcie numeru dokumentu powoduje bezpośrednie otwarcie okienka z podglądem wydruku: Rysunek 17. Podgląd wydruku. Źródło: opracowanie własne 22 3.4.10 Dodawanie nowego produktu Dzięki ustrukturyzowanej budowie formularza i odpowiedniej walidacji i tym razem dbamy o jakość przechowywanych danych. Rysunek 18. Formularz dodawania produktu. Źródło: opracowanie własne 3.5 Walidacja W aplikacji położono duży nacisk na jakość danych przechowywanych. Jednym ze sposobów, aby nie dopuścić do pogorszenia danych jest odpowiednia ich kontrola już na samym początku, na etapie ich dodawania. W aplikacji "MiniCRM_Aport_2_0" zastosowano wiele walidatorów. Poniżej zamieszczam tylko 3 przykładowe: - numeru pesel 23 Rysunek 19 Funkcja walidująca numer pesel. Źródło: opracowanie własne - numer nip Rysunek 20 Funkcja walidująca numer nip. Źródło: opracowanie własne - sprawdzenie, czy klient o danym numerze pesel nie został wcześniej dodany do bazy danych 24 Rysunek 21 Walidacja na obecność klienta w bazie danych. Źródło: opracowanie własne 3.6 Proponowane rozszerzenia na przyszłość Zaprojektowana aplikacja dostarcza funkcje istotne dla tej klasy aplikacji, jak również dodatkowe, poszerzające możliwości - wywiady, statystyki. Mimo to aplikacja jest w fazie ewolucji. Poniżej proponuje modyfikacje poszerzające funkcjonalność aplikacji. Moduł raportowy Moduł raportowy dawałby użytkownikom większe możliwości analizy profili opiekunów oraz ich pupili. W chili obecnej możliwa jest indywidualna analiza na podstawie karty opiekuna oraz za pomocą protokołu ODBC (z wykorzystaniem np. Ms Excela). Moduł pocztowy Moduł pocztowy umożliwiający wysyłanie, odbieranie, automatyczne przypisywanie do opiekuna, klasyfikowanie wiadomości dopełnił by funkcjonalność aplikacji. Moduł wizualizacji kalendarza wraz z zaplanowanymi wydarzeniami Funkcjonalność ta umożliwiła by dodawanie zdarzeń za pomocą graficznej kontrolki. Z wyglądu podobnej do tej stosowanej w Ms Outloku Rezerwacje on-line Strona internetowa hotelu wraz z systemem rezerwacji miejsc dla pupili zwiększyły by funkcjonalność aplikacji 25 Moduł księgowy Prowadzenie wymaganej dokumentacji pozwoliłoby precyzyjnie określić progi rentowności ekonomicznej oraz dało by pełniejszy obraz prowadzonej działalności. 26 4 Podsumowanie Podstawowym zadaniem powyższej pracy było wykonanie aplikacji klasy CRM służącej do zarządzania relacjami z Klientem z wykorzystaniem ogólnie dostępnych darmowych rozwiązań, zaprezentowanie możliwości języka Visual Basic oraz zastosowanie praktycznej wiedzy zdobytej podczas nauki w Wyższej Szkole Zarządzania i Marketingu w Sochaczewie. Praktyczne stworzenie tej aplikacji pozwoliło mi połączyć wiedzę informatyczną z wiedzą ekonomiczną, w tym marketingową nabytą podczas nauki w WSZiM Sochaczew. Praca ta była ciekawym doświadczeniem oraz przypomnieniem informacji z wielu dziedzin informatyki, od baz danych, po języki programowania. Wszystkie założenia odnośnie aplikacji zostały zrealizowane. 27 5 Literatura 1. Stephane Faroult, Peter Robson I.: Sztuka Programowania SQL, Helion, Gliwice 2007; 2.Michael Otey, Denielle Otey I.: Microsoft SQL Server 2005 Podręcznik Programisty, Helion, Gliwice 2007; 3. Paul Sanna i inni I.: Wydanie specjalne Visual Basic dla aplikacji 5 w zastosowaniach, LT&P Sp. z o.o., Warszawa 1997 4. Praca zbiorowa: Janusz Leszek Sokół (Katedra Zarządzania Produkcją, Wydział Zarządzania, Politechnika Białostocka), Magda Anna Stasińska, Kazimierz Ściesiński (Katedra Szczegółowej Hodowli Zwierząt, Wydział Nauk o Zwierzętach, SGGW) I.: Hotele i pensjonaty dla psów i kotów w świetle literatury, Kwartalnik Wydziału Zarządzania, Politechnika Białostocka, Białystok 2011 5. http://crm.eprace.edu.pl/313,Definicja_i_istota_systemu_CRM.html ( 2012-09-20) 6. http://kis.pwszchelm.pl/publikacje/V/Stasienko.pdf , str. 226 (2012-09-20) 7. http://www.microsoft.com/en-us/download/details.aspx?id=25169 (2012-07-04) 8. http://msdn.microsoft.com/en-us/library/8s2fzb02.aspx(2012-08-20) 9. http://www.techonthenet.com/excel/formulas/curdir.php (2012-08-13) 10. http://msdn.microsoft.com/en-us/library/yc4fsbf5.aspx (2012-08-14) 11. http://www.coderscity.pl/ftopic2335.htm (2012-08-10) 12. http://www.coderscity.pl/ftopic2335.htm (2012-08-10) 13.http://www.bizeo.pl/firmy/smart-biz/galeria/21890,aplikacja-smart-biz-crmofertowanie-i-zamowienia/ (2012-07-05) 14. http://optima2012.pl/moduly-comarch-optima/crm (2012-07-05) 15. http://www.iconfinder.com/free_icons (2012-08-01) 28 16. http://findicons.com/(2012-08-01) 17. http://www.bardzki.pl/index.php?mid=excel_vba_funkcja_slownie (2012-08-01) 18.Janusz Górczyński I.: Wprowadzenie do programowania baz danych VB.NET, WSZiM, Sochaczew 2011 19. http://www.youtube.com/watch?v=swY1mkK-CrY(2012-07-25) 20. http://www.youtube.com/watch?v=03-GIEOBmeE (2012-07-25) 21. http://www.youtube.com/watch?v=6KBuk6OneRk (2012-07-20) 22. http://www.youtube.com/watch?v=nlgYmxx1WSE (2012-07-20) 23. http://spragnieniwiedzy.blogspot.com/2010_03_01_archive.html (2012-07-13) 24. http://stopyprocentowe.blogspot.com/2010_04_01_archive.html (2012-07-13) 25. http://www.coderscity.pl/ftopic32825.htm (2012-09-20) 29 6 Załączniki 6.1 Ważniejsze procedury SQL 6.1.1 Dodawanie Opiekuna Create procedure [dbo].[Dodawanie_Opiekuna] @Imie as varchar(30), @Nazwisko as varchar(50), @Data_Urodzenia_Opiekuna as date, @Plec as nchar(1) , @Kod_pocztowy nchar(5), @Wojewodztwo as varchar(50), @Gmina as varchar(50), @Miejscowosc as varchar(50), @Nazwa_Ulicy as varchar(50), @NrDomu as varchar (10), @NrMieszkania as varchar (10), @Email as varchar(50), @Telefon_Stac as nchar(9), @Telefon_Mob as nchar(9), @SeriaiNrDowodu as nchar(9), @Pesel as nchar(9), @OrganWydajacy as varchar(50), @ZrodloPozyskaniaKlienta as varchar(50), @KodKampanii as nchar(10), 30 @Uwagi as text, @Aktywny as nchar(3), @Sciezka_Zdjecia as text, @NazwaFirmy as varchar (50), @Nip as nchar(10), @F_www as varchar (50), @F_kodpocztowy as nchar(5), @F_woj as varchar(50), @F_Gmina as varchar(50), @F_Miejscowosc as varchar(50), @F_ulica as varchar(50), @F_NrDomu as varchar(10), @F_NrLokalu as varchar (10), @F_Wlasciciel as varchar(50), @F_Prezes as varchar(50), @F_dzialalnoscfirmy as varchar(50), @F_branza as varchar(50), @GG as varchar(50), @Skype as varchar(50) as begin insert into dbo.opiekunowie( Imie, Nazwisko, Data_Urodzenia_Opiekuna, 31 Plec, Kod_pocztowy, Wojewodztwo, Gmina, Miejscowosc, Nazwa_Ulicy, NrDomu, NrMieszkania, Email, Telefon_Stac, Telefon_Mob, SeriaiNrDowodu, Pesel, OrganWydajacy, ZrodloPozyskaniaKlienta, KodKampanii, Uwagi, Aktywny, Sciezka_Zdjecia, NazwaFirmy, Nip, F_www, F_kodpocztowy, F_woj, 32 F_Gmina, F_Miejscowosc, F_ulica, F_NrDomu, F_NrLokalu, F_Wlasciciel, F_Prezes, F_dzialalnoscfirmy, F_branza, GG, Skype) Values( @Imie, @Nazwisko, @Data_Urodzenia_Opiekuna, @Plec, @Kod_pocztowy, @Wojewodztwo, @Gmina, @Miejscowosc, @Nazwa_Ulicy, @NrDomu, @NrMieszkania, @Email, 33 @Telefon_Stac, @Telefon_Mob, @SeriaiNrDowodu, @Pesel, @OrganWydajacy, @ZrodloPozyskaniaKlienta, @KodKampanii, @Uwagi, @Aktywny, @Sciezka_Zdjecia, @NazwaFirmy, @Nip, @F_www, @F_kodpocztowy, @F_woj, @F_Gmina, @F_Miejscowosc, @F_ulica, @F_NrDomu, @F_NrLokalu, @F_Wlasciciel, @F_Prezes, @F_dzialalnoscfirmy, @F_branza, 34 @GG, @Skype) end *************************************************************** 6.1.2 Dodawanie transakcji sprzedaży Create procedure [dbo].[Dodawanie_Transakcji_Sprzedazy]( @ID_Opiekuna as int, @ID_Produktu as int, @Forma_Platnosci as varchar(50), @Termin_Platnosci as varchar(50), @Typ_dokumentu as varchar(50), @Nr_Dokumentu as varchar(50), @Data_platnosci as date, @Ilosc_Sprzed as int, @Wartosc_S_netto as money, @Wartosc_S_brutto as money)as begin insert into dbo.Sprzedaz( ID_Opiekuna, ID_Produktu, Forma_Platnosci, Termin_Platnosci, Typ_dokumentu, 35 Nr_Dokumentu, Data_platnosci, Ilosc_Sprzed, Wartosc_S_netto, Wartosc_S_brutto) values( @ID_Opiekuna, @ID_Produktu, @Forma_Platnosci, @Termin_Platnosci, @Typ_dokumentu, @Nr_Dokumentu, @Data_platnosci, @Ilosc_Sprzed, @Wartosc_S_netto, @Wartosc_S_brutto) end **************************************************************** 6.1.3 Wyszukiwanie opiekunów (zaawansowany formularz wyszukiwania) Create procedure [dbo].[WyszukiwanieOpiekunow] ( @ID_Opiekuna int, @Imie varchar(50), @Nazwisko varchar(50), @Pesle nchar (11), 36 @PNA nchar(5), @Miejscowosc varchar(50), @CzyFirma nchar (3), @Nip nchar (10), @Komorka nchar(9), @mail varchar (50), @DataUtw date --@PupilHotel nchar(3)*/) as Begin select ID_Opiekuna as ID, Imie, Nazwisko, Miejscowosc, Nazwa_Ulicy as Ulica, NrDomu, NrMieszkania, Kod_pocztowy as PNA, DataUtworzenia, NazwaFirmy from dbo.Opiekunowie where iif(@ID_Opiekuna like '',10, @ID_Opiekuna)<=ID_Opiekuna and Imie like iif(@Imie is null or @Imie='','%' , @Imie) and 37 Nazwisko like iif(@Nazwisko is null or @Nazwisko='', '%', @Nazwisko) and Pesel like iif(@Pesle is null or @Pesle='','%' , @Pesle) and Kod_pocztowy like iif(@PNA is null or @PNA='', '%', @PNA) and Miejscowosc like iif(@Miejscowosc is null or Miejscowosc='','%', @Miejscowosc) and NazwaFirmy like iif(@CzyFirma like 'Tak','[a-z]%', iif(@CzyFirma like'Nie','','%')) and NIP like iif(@Nip is null or @Nip='', '%', Nip) and Telefon_Mob like iif(@Komorka is null or @Komorka='','%', @Komorka) and Email like iif(@mail is null or @mail='', '%',@mail ) and DataUtworzenia >= iif(@DataUtw is null or @DataUtw='','1900-01-01', @DataUtw) and Aktywny='Tak' --iif(@PupilHotel is null or @PupilHotel*/ End ********************************************************************** 6.1.4 Przeglądanie kartoteki opiekuna Create procedure [dbo].[Przegladanie_KartyKlienta_InformacjeOperacyjne] @ID_Opiekuna int as begin select 38 DATEDIFF(DAY,convert(date,min(Data_transakcji)),GETDATE()) as Poczatek_Wspolpracy,sum(Wartosc_S_netto* Ilosc_Sprzed) as Obrot_Narastajaco,CONVERT(date,max(Data_transakcji)) as Data_Ost_Transakcji from dbo.Sprzedaz where @ID_Opiekuna=ID_Opiekuna group by ID_Opiekuna end ********************************************************************** create procedure [dbo].[Przegladanie_KartyKlienta_HistoriaTransakcji_OstataniTrans akcja] @ID_Opiekuna int as begin select CONVERT(date, Data_transakcji) as DataSprzedaz, Forma_Platnosci, Termin_Platnosci, Nr_Dokumentu, Data_platnosci, Ilosc_Sprzed, Wartosc_S_netto, Wartosc_S_brutto, Data_Wplywu_na_rachunek, 39 Nazwa_Opisowa, convert(numeric(18,2),sum(Ilosc_Sprzed*Wartosc_S_netto)) as WartoscNetto, convert(numeric(18,2),sum(Ilosc_Sprzed*Wartosc_S_brutto)) as WartoscBrutto from Sprzedaz s inner join Produkty_Uslugi p on s.ID_Produktu=p.ID_Produktu where ID_Opiekuna=@ID_Opiekuna and Nr_Dokumentu= (Select top 1 Nr_Dokumentu from Sprzedaz where ID_Opiekuna=@ID_Opiekuna order by Data_transakcji desc ) group by CONVERT(date, Data_transakcji), Forma_Platnosci, Termin_Platnosci, Nr_Dokumentu, Data_platnosci, Ilosc_Sprzed, Wartosc_S_netto, Wartosc_S_brutto, Data_Wplywu_na_rachunek, Nazwa_Opisowa end 40 6.1.5 Aktualizacja informacji o wpływie środków na konto create procedure dbo.Przegladanie_KartyKlienta_HistoriaTransakcji_SzczegolyDokumen tu_UpdateDatyPlatnosci @Nr_Dokumentu varchar(50), @Data date as begin update Sprzedaz set Data_Wplywu_na_rachunek=@Data where Nr_Dokumentu like @Nr_Dokumentu end 6.2 Przykładowe ormularze aplikacji 6.2.1 Frm_Ekran_Glowny Imports System.Data.SqlClient Public Class frm_Ekran_Gl Public zrodlo As String = "" Private Sub PictureBox4_Click(sender As System.Object, e As System.EventArgs) Handles PictureBox4.Click frm_Nowy_Opiekun.Show() zrodlo = "Nowy_Opiekun" Me.Hide() End Sub Private Sub PictureBox5_Click(sender As System.Object, e As System.EventArgs) Handles PictureBox5.Click 41 frm_Wyszukiwanie_Opiekuna.Show() zrodlo = "Nowy_Pupil" Me.Hide() End Sub Private Sub PictureBox3_Click(sender As System.Object, e As System.EventArgs) Handles PictureBox3.Click frm_Wyszukiwanie_Opiekuna.Show() zrodlo = "Przegladanie_Klienta" Me.Hide() End Sub Private Sub PictureBox6_Click(sender As System.Object, e As System.EventArgs) Handles PictureBox6.Click frm_Wyszukiwanie_Opiekuna.Show() zrodlo = "Dodawanie_Kontaktu" Me.Hide() End Sub Private Sub PictureBox2_Click(sender As System.Object, e As System.EventArgs) Handles PictureBox2.Click frm_Wyszukiwanie_Opiekuna.Show() zrodlo = "Dodawanie_Sprzedazy" Me.Hide() End Sub Private Sub frm_Ekran_Gl_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load zrodlo = "" 42 End Sub Private Sub btn_anuluj_Click(sender As System.Object, e As System.EventArgs) Handles btn_anuluj.Click Me.Close() End Sub Private Sub PictureBox1_Click(sender As System.Object, e As System.EventArgs) Handles PictureBox1.Click frm_Dodawanie_Produktu.Show() Me.Hide() End Sub Private Sub PictureBox7_Click(sender As System.Object, e As System.EventArgs) Handles PictureBox7.Click wizytowka.Show() End Sub Private Sub PictureBox8_Click(sender As System.Object, e As System.EventArgs) Handles PictureBox8.Click AboutBox1.Show() End Sub End Class 6.2.2 Frm_Dodawanie_Produktu Imports System.Data.SqlClient Imports System.Data.OleDb Imports System.IO Public Class frm_Dodawanie_Produktu Public Nazwa_Serwera As String = "PROMETEUSZ_01\SQLEXPRESS" 43 Public Nazwa_Bazy_Danych As String = "CRM_2_0_Aport" '************************************************************ 'zmienne Ado.net Dim SQL_connectionstring As New SqlConnection("Data Source=" & Nazwa_Serwera & "; Initial Catalog=" & Nazwa_Bazy_Danych & "; integrated security=true") 'koniec zmiennych ado '*********************************************************** Private Sub btn_zapisz_Click(sender As System.Object, e As System.EventArgs) Handles btn_zapisz.Click Dim checkform As Integer '************************************************************ 'Walidacja If txt_NazwaProduktu.Text = "" Then lbl_Produkt.BackColor = Color.Red checkform = +checkform + 1 Else lbl_Produkt.BackColor = Color.Transparent End If If cmb_Kategoria.Text = "" Then lbl_Kat.BackColor = Color.Red checkform = +checkform + 1 Else lbl_Kat.BackColor = Color.Transparent End If 44 If cmb_Typ.Text = "" Then lbl_Typ.BackColor = Color.Red checkform = +checkform + 1 Else lbl_Typ.BackColor = Color.Transparent End If If txt_CenaNetto.Text = "" Then lbl_CenaNetto.BackColor = Color.Red checkform = +checkform + 1 Else If IsNumeric(txt_CenaNetto.Text) = False Then lbl_CenaNetto.BackColor = Color.Red checkform = +checkform + 1 Else lbl_CenaNetto.BackColor = Color.Transparent End If End If If txt_StawkaVat.Text = "" Then lbl_Stawka.BackColor = Color.Red checkform = +checkform + 1 Else If IsNumeric(txt_StawkaVat.Text) = False Then lbl_Stawka.BackColor = Color.Red checkform = +checkform + 1 45 Else lbl_Typ.BackColor = Color.Transparent End If End If If txt_JednSprzedazy.Text = "" Then lbl_JednSprzed.BackColor = Color.Red checkform = +checkform + 1 Else lbl_JednSprzed.BackColor = Color.Transparent End If Try SQL_connectionstring.Open() Catch ex As Exception MsgBox("Problem z weryfikacją produktu") Exit Sub End Try '**************************************************************** 'Sprawdzam czy nazwa produktu istnieje w bazie Dim Czy_istnieje_Nazwa As Integer Dim SQL_command1 As New SqlCommand("exec dbo.Spr_Nazwa_Produktu @Nazwa_Opisowa='" & txt_NazwaProduktu.Text & "'", SQL_connectionstring) Czy_istnieje_Nazwa = SQL_command1.ExecuteScalar SQL_connectionstring.Close() If Czy_istnieje_Nazwa > 0 Then 46 MsgBox("Taki produkt istniej już w bazie danych. ID Produktu w bazie: " & Czy_istnieje_Nazwa) lbl_Produkt.BackColor = Color.Red checkform = +checkform + 1 Else lbl_Produkt.BackColor = Color.Transparent End If '************************************************************* If checkform > 0 Then Exit Sub Else If txt_CenaNetto.Text = "" Then txt_CenaNetto.Text = 0 End If If txt_StawkaVat.Text = "" Then txt_StawkaVat.Text = 0 End If Try SQL_connectionstring.Open() Catch ex As Exception MsgBox("Problem z dodaniem produktu do bazy danych") Exit Sub End Try 47 Dim SQL_Command As New SqlCommand("exec dbo.Dodawanie_Produktu @Nazwa_Opisowa='" & Trim(txt_NazwaProduktu.Text) & _ "', @Kategoria_Produktu='" & cmb_Kategoria.Text & _ "', @Typ='" & cmb_Typ.Text & _ "', @Aktywny='T', @Cena_Netto='" & Replace(CDbl(txt_CenaNetto.Text), ",", ".") & _ "', @Stawka_Vat='" & Replace(CDbl(txt_StawkaVat.Text), ",", ".") & _ "', @JednSprzedazy='" & Trim(txt_JednSprzedazy.Text) & "'", SQL_connectionstring) SQL_Command.ExecuteNonQuery() MsgBox("Dodano Produkt/Usługę do Bazy Danych") SQL_connectionstring.Close() SQL_connectionstring = Nothing End If Me.Close() End Sub Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click frm_Ekran_Gl.Show() Me.Close() End Sub Private Sub btn_anuluj_Click(sender As System.Object, e As System.EventArgs) frm_Ekran_Gl.Show() 48 Me.Close() End Sub End Class 6.2.3 Frm_Dodawanie_Opiekuna Imports System.Data.SqlClient Imports System.Data.OleDb Imports System.IO Public Class frm_Nowy_Opiekun Public Nazwa_Serwera As String = "PROMETEUSZ_01\SQLEXPRESS" Public Nazwa_Bazy_Danych As String = "CRM_2_0_Aport" Dim sciezka_zdjecie_opiekuna As String '**************************************************************** 'zmienne Ado.net Dim SQL_connectionstring As New SqlConnection("Data Source=" & Nazwa_Serwera & "; Initial Catalog=" & Nazwa_Bazy_Danych & "; integrated security=true") 'koniec zmiennych ado '**************************************************************** Private Sub frm_Nowy_Opiekun_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load dtp_data_ur.Value = DateTime.Today dtp_data_ur.MaxDate = DateTime.Today End Sub Public Function spr_Pesel(ByVal Pesel As String) As Boolean 49 Dim Pesel_sumakontrolna As Integer Pesel = Trim(Pesel) Pesel_sumakontrolna = 0 Pesel_sumakontrolna = Pesel.Substring(0, 1) * 1 + Pesel.Substring(1, 1) * 3 _ + Pesel.Substring(2, 1) * 7 + Pesel.Substring(3, 1) * 9 _ + Pesel.Substring(4, 1) * 1 + Pesel.Substring(5, 1) * 3 _ + Pesel.Substring(6, 1) * 7 + Pesel.Substring(7, 1) * 9 _ + Pesel.Substring(8, 1) * 1 + Pesel.Substring(9, 1) * 3 If Pesel.Substring(10, 1) = 10 - (Pesel_sumakontrolna Mod 10) Then Return True ElseIf Pesel.Substring(10, 1) = (Pesel_sumakontrolna Mod 10) Then Return True Else Return False End If End Function Private Sub btn_zapisz_Click(sender As System.Object, e As System.EventArgs) Handles btn_zapisz.Click '**************************************************************** 'deklarujemy zmienne Dim checkpesel As Boolean Dim checkform As Integer '**************************************************************** 50 'Walidacja If txt_imie.Text = "" Then lbl_imie.BackColor = Color.Red checkform = +checkform + 1 Else lbl_imie.BackColor = Color.Transparent End If If txt_nazwisko.Text = "" Then lbl_nazwisko.BackColor = Color.Red checkform = +checkform + 1 Else lbl_nazwisko.BackColor = Color.Transparent End If If cmb_plec.Text = "" Then lbl_plec.BackColor = Color.Red checkform = +checkform + 1 Else lbl_plec.BackColor = Color.Transparent End If If dtp_data_ur.Value = Today Then lbl_dataur.BackColor = Color.Red checkform = +checkform + 1 Else lbl_dataur.BackColor = Color.Transparent 51 End If If txt_pesel.Text <> "" Then If Len(txt_pesel.Text) = 11 Then If checkpesel = spr_Pesel(txt_pesel.Text) Then lbl_pesel.BackColor = Color.Red checkform = +checkform + 1 Else lbl_pesel.BackColor = Color.Transparent End If End If Else lbl_pesel.BackColor = Color.Red checkform = +checkform + 1 End If If txt_seriainrDO.Text = "" Then lbl_seriainumerdo.BackColor = Color.Red checkform = +checkform + 1 Else lbl_seriainumerdo.BackColor = Color.Transparent End If If cmb_organwyd.Text = "" Then lbl_organwyd.BackColor = Color.Red checkform = +checkform + 1 Else 52 lbl_organwyd.BackColor = Color.Transparent End If If txt_PNA.Text = "Format XXXXX" Then lbl_pna.BackColor = Color.Red checkform = +checkform + 1 Else lbl_pna.BackColor = Color.Transparent If Len(txt_PNA.Text) <> 5 Then lbl_pna.BackColor = Color.Red checkform = +checkform + 1 Else lbl_pna.BackColor = Color.Transparent Try IsError(CLng(txt_PNA.Text)) Catch ex As Exception lbl_pna.BackColor = Color.Red checkform = +checkform + 1 End Try End If End If If cmb_wojewodztwo.Text = "" Then lbl_woj.BackColor = Color.Red checkform = +checkform + 1 Else 53 lbl_woj.BackColor = Color.Transparent End If If txt_gmina.Text = "" Then lbl_gmina.BackColor = Color.Red checkform = +checkform + 1 Else lbl_gmina.BackColor = Color.Transparent End If If txt_miejscowosc.Text = "" Then lbl_miejscowosc.BackColor = Color.Red checkform = +checkform + 1 Else lbl_miejscowosc.BackColor = Color.Transparent End If If txt_ulica.Text = "" Then lbl_ulica.BackColor = Color.Red checkform = +checkform + 1 Else lbl_ulica.BackColor = Color.Transparent End If If txt_nrdomu.Text = "" Then lbl_numerdomu.BackColor = Color.Red checkform = +checkform + 1 Else 54 lbl_numerdomu.BackColor = Color.Transparent End If If txt_nrmieszkania.Text = "" Then lbl_nrmieszk.BackColor = Color.Red checkform = +checkform + 1 Else lbl_nrmieszk.BackColor = Color.Transparent End If If txt_email.Text = "" Then lbl_email.BackColor = Color.Red checkform = +checkform + 1 Else If InStr(txt_email.Text, "@") = 0 Then lbl_email.BackColor = Color.Red checkform = +checkform + 1 Else If Len(txt_email.Text) < 6 Then lbl_email.BackColor = Color.Red checkform = +checkform + 1 Else lbl_email.BackColor = Color.Transparent End If End If End If 55 If txt_Tkom.Text = "" Then lbl_telkom.BackColor = Color.Red checkform = +checkform + 1 Else If Len(txt_Tkom.Text) < 9 Then lbl_telkom.BackColor = Color.Red checkform = +checkform + 1 Else lbl_telkom.BackColor = Color.Transparent End If Try IsError(CLng(txt_Tkom.Text)) Catch ex As Exception lbl_telkom.BackColor = Color.Red checkform = +checkform + 1 End Try End If If cmb_ZrodInf.Text = "" Then lbl_zrodloinf.BackColor = Color.Red checkform = +checkform + 1 Else lbl_zrodloinf.BackColor = Color.Transparent End If If txt_kodkampanii.Text = "" Then 56 txt_kodkampanii.Text = "bd" End If If rtb_Uwagi.Text = "" Then rtb_Uwagi.Text = "Brak Uwag" End If 'sprawdzam czy wszystkie wymagane pola są uzupełnione zanim prześle je do bazy If checkform > 0 Then MsgBox("Proszę wypełnić wszystkie wymagane pola", MsgBoxStyle.Critical, "Formularz niekompletny") Exit Sub Else '************************************************************** 'Zaczynamy proces ładowania danych do bazy Try SQL_connectionstring.Open() Catch ex As Exception MsgBox("Problem z połączeniem z bazą danych") Exit Sub End Try '**************************************************************** 'Sprawdzam czy przypadkiem w bazie nie istnieje już ten sam numer pesel Dim Czy_Istnieje_Pesel As DataSet 57 Dim SQL_Command1 As New SqlCommand("exec dbo.Spr_Pesel @Pesel='" & txt_pesel.Text & "'", SQL_connectionstring) Czy_Istnieje_Pesel = SQL_Command1.ExecuteScalar MsgBox("Wprowadzony numer pesel istnieje w naszej bazie danych. Czy dodać nowego opiekuna z tym samym numerem PESEL?", MsgBoxStyle.OkCancel, "Czy chcesz dodać Klienta ?") SQL_connectionstring.Close() 'Koniec sprawdzania '*************************************************************** If MsgBoxResult.Ok = vbOK Then SQL_connectionstring.Open() Dim SQL_Command As New SqlCommand("exec dbo.Dodawanie_Opiekuna @Imie='" & Trim(txt_imie.Text) & _ "', @Nazwisko='" & Trim(txt_nazwisko.Text) & _ "', @Plec='" & cmb_plec.Text & _ "', @Data_Urodzenia_Opiekuna='" & dtp_data_ur.Value & _ "', @Kod_pocztowy='" & txt_PNA.Text & _ "', @Wojewodztwo='" & cmb_wojewodztwo.Text & _ "', @Gmina='" & Trim(txt_gmina.Text) & _ "', @Miejscowosc='" & Trim(txt_miejscowosc.Text) & _ "', @Nazwa_Ulicy='" & Trim(txt_ulica.Text) & _ "', @NrMieszkania='" & Trim(txt_nrmieszkania.Text) & _ "', @NrDomu='" & Trim(txt_nrdomu.Text) & _ "', @Email='" & Trim(txt_email.Text) & _ "', @Telefon_Stac='" & Trim(txt_Tstac.Text) & _ 58 "', @Telefon_Mob='" & txt_Tkom.Text & _ "', @SeriaiNrDowodu='" & Trim(txt_seriainrDO.Text) & _ "', @Pesel='" & txt_pesel.Text & _ "', @OrganWydajacy='" & cmb_organwyd.Text & _ "', @ZrodloPozyskaniaKlienta='" & cmb_ZrodInf.Text & _ "', @KodKampanii='" & Trim(txt_kodkampanii.Text) & _ "', @Uwagi='" & Trim(rtb_Uwagi.Text) & _ "', @Aktywny='Tak', @Sciezka_Zdjecia='" & sciezka_zdjecie_opiekuna & _ "', @NazwaFirmy='" & Trim(frm_Info_Firma.txt_Nazwa_Firmy.Text) & _ "', @Nip='" & frm_Info_Firma.txt_NIP.Text & _ "', @F_www='" & Trim(frm_Info_Firma.txt_F_www.Text) & _ "', @F_kodpocztowy='" & frm_Info_Firma.txt_F_PNA.Text & _ "', @F_woj='" & frm_Info_Firma.cmb_F_wojewodztwo.Text & _ "', @F_Gmina='" & Trim(frm_Info_Firma.txt_F_gmina.Text) & _ "', @F_Miejscowosc='" & Trim(frm_Info_Firma.txt_F_miejscowosc.Text) & _ "', @F_ulica='" & Trim(frm_Info_Firma.txt_F_ulica.Text) & _ "', @F_NrDomu='" & Trim(frm_Info_Firma.txt_F_nrdomu.Text) & _ "', @F_NrLokalu='" & Trim(frm_Info_Firma.txt_F_nrmieszkania.Text) & _ "', @F_Wlasciciel='" & Trim(frm_Info_Firma.txt_Wlasciciel.Text) & _ "', @F_Prezes='" & Trim(frm_Info_Firma.txt_Prezes.Text) & _ 59 "', @F_dzialalnoscfirmy='" & Trim(frm_Info_Firma.txt_Dzialalnosc_Firmy.Text) & _ "', @F_branza='" & Trim(frm_Info_Firma.cmb_F_branza.Text) & _ "', @GG='" & Trim(txt_GG.Text) & _ "', @Skype='" & Trim(txt_skype.Text) & "'", SQL_connectionstring) SQL_Command.ExecuteNonQuery() MsgBox("Opiekuna Dodano do Bazy Danych") SQL_connectionstring.Close() SQL_connectionstring = Nothing End If End If 'Opiekuna dodano, połączenie z bazą zamknięte i wyczyszczone '************************************************************ Me.Close() End Sub Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click frm_Info_Firma.Show() End Sub Public Sub Pb_zdjecie_Klienta_Click(sender As System.Object, e As System.EventArgs) Handles Pb_zdjecie_Klienta.Click Dim nazwazdjecia As String '**************************************************************** 'Wywołanie okna dialogowego do wskazania pliku 60 Ofd_Zdjecie_Opiekuna.Title = "Proszę wskazać zdjęcie w formacie jpg" Ofd_Zdjecie_Opiekuna.FileName = "Proszę wskazać zdjęcie w formacie jpg" If Ofd_Zdjecie_Opiekuna.ShowDialog = Windows.Forms.DialogResult.Cancel Then Exit Sub Else nazwazdjecia = Dir(Ofd_Zdjecie_Opiekuna.FileName) ' próba zapisania przekopiowania zdjęcia ze ścieżki wskazanej przez użytkownika do folderu programowego \zdjecia_opiekunów Try FileCopy(Ofd_Zdjecie_Opiekuna.FileName, CurDir() & "\Zdjecia_Opiekunow\" & nazwazdjecia) Catch ex As Exception MkDir(CurDir() & "\Zdjecia_Opiekunow\") ' jeżeli pierwszy raz dodajemy zdjecie trzeba utworzyć folder w zdjecia opiekunow w lokalizacji progamu End Try FileCopy(Ofd_Zdjecie_Opiekuna.FileName, CurDir() & "\Zdjecia_Opiekunow\" & nazwazdjecia) ' przenosimy zdjecie do lokalizacji programu 'przypisanie do picture boxa wskazanego przez użytkownika zdjęcia w formacie jpg Pb_zdjecie_Klienta.ImageLocation = CurDir() & "\Zdjecia_Opiekunow\" & nazwazdjecia 61 sciezka_zdjecie_opiekuna = Pb_zdjecie_Klienta.ImageLocation ' do zmennej przekazujemy ścieżkę z lokalizacji naszego programu End If End Sub Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click frm_Ekran_Gl.Show() Me.Close() End Sub Private Sub btn_anuluj_Click(sender As System.Object, e As System.EventArgs) frm_Ekran_Gl.Show() Me.Close() End Sub End Class 62