# Adresat powiadomienia zależy od kodu pocztowego: wygrywa najwęższy zakres

> W opisywanym wdrożeniu koordynator regionu wynika z kodu pocztowego klienta, a przy nakładaniu się zakresów wygrywa zakres o najmniejszej rozpiętości.

Adres strony: https://magazyn.softwarestudio.com.pl/adresat-powiadomienia-wg-kodu-pocztowego-najwezszy-zakres/

---

W opisywanym wdrożeniu adresat powiadomienia według regionu wynika z kodu pocztowego klienta: program porównuje ten kod ze słownikiem zakresów i wskazuje koordynatora regionu. Administrator słownika utrzymuje w nim zakresy kodów razem z adresem koordynatora. Gdy kod pasuje do kilku zakresów naraz, wygrywa zakres o najmniejszej rozpiętości. Kod klienta i adresy ze słownika są przed użyciem sprowadzane do jednego formatu.
Z kilku pasujących zakresów wygrywa ten, który obejmuje najmniej kodów, a remis rozstrzyga początek zakresu. Kod klienta jest przed porównaniem sprowadzany do formatu z myślnikiem po drugim znaku. W opisywanym wdrożeniu podobna reguła stoi osobno w kolumnie listy spraw i w dwóch rodzajach wiadomości, a jej zapisy nie są identyczne.

## Słownik zakresów kodów pocztowych wskazuje adres koordynatora regionu

Słownik zakresów jest w opisywanym wdrożeniu wpisem w ogólnym słowniku konfiguracji, który ma własny typ. Jeden wiersz opisuje zakres kodów od początku do końca oraz koordynatora regionu, czyli jego adres i nazwę osoby. Do wiersza należą jeszcze opis obszaru i oddział.

Administrator edytuje wiersze na liście „Lista adresów-mail dla kodów pocztowych”. Lista pokazuje dziewięć kolumn, wśród nich pole wyboru „Aktywne”. Początek i koniec zakresu wpisuje się w kolumnach „Kody od:” oraz „Kody do:”. Dwie dalsze kolumny lista ukrywa, a jedna z nich, „Automat”, nie bierze udziału w wyborze koordynatora.

## Zakresy nakładają się, więc reguła musi wskazać jeden wynik

Według konfiguracji opisywanego wdrożenia część zakresów nakłada się, a zakres mniejszego obszaru leży w całości wewnątrz zakresu większego. Dla kodu z takiego wnętrza pasują więc dwa wiersze naraz, a adres może wskazać tylko jeden z nich.

> Z kilku pasujących zakresów wygrywa ten, który obejmuje najmniej kodów.

Zapytanie bierze z pasujących zakresów pierwszy wiersz po sortowaniu rosnąco według rozpiętości. Rozpiętość to koniec zakresu minus jego początek, liczone po usunięciu myślnika z obu kodów. Gdy dwa zakresy mają taką samą rozpiętość, remis rozstrzyga początek zakresu. W wyborze biorą udział tylko wiersze aktywne z niepustym adresem, a porównanie kodu z zakresem jest porównaniem tekstów w formacie z myślnikiem po drugim znaku.

W przykładzie z następnej sekcji kod 12-345 pasuje do zakresu od 12-000 do 12-999 i do zakresu od 12-300 do 12-399. Wygrywa drugi, bo obejmuje mniej kodów. Kod 12-512 pasuje tylko do szerszego zakresu, więc dostaje jego koordynatora. Kod 45-100 nie pasuje do żadnego zakresu, więc koordynatora nie ma.

Osobny tekst techniczny pokazuje [tę samą regułę w kodzie](https://sql.server.net.pl/sql-server/przedzial-kodow-najwezszy-zakres-i-konto-kanoniczne/) T-SQL. Wybór najbliższego zakresu cennika to już [inny wybór zakresu](https://sql.server.net.pl/sql-server/zakresy-cennika-bez-nakladania-i-wybor-najblizszego-zakresu-w-t-sql/), opisany na innej stronie.

## Kod klienta i adresy ze słownika są normalizowane przed użyciem

Kod klienta pochodzi z kartoteki klienta zapisanego w sprawie. Program usuwa z niego spacje i myślnik. Tylko kod, który po tym ma pięć znaków, jest składany do postaci z myślnikiem po drugim znaku, a to, czy znaki są cyframi, nie jest sprawdzane. Kod innej długości daje brak koordynatora, bez komunikatu.

Tabela zestawia pięć przykładowych kodów i wynik wyboru (dane przykładowe).

| Kod klienta | Zakresy, które pasują | Wybrany zakres | Powód |
| --- | --- | --- | --- |
| 12-345 | 12-000 do 12-999; 12-300 do 12-399 | 12-300 do 12-399 | najmniejsza rozpiętość |
| 12-512 | 12-000 do 12-999 | 12-000 do 12-999 | jedyny pasujący |
| 45-100 | brak | brak koordynatora | żaden zakres nie obejmuje kodu |
| „12 345” ze spacją | po normalizacji 12-345, jak w pierwszym wierszu | 12-300 do 12-399 | spacja i myślnik są usuwane, kod wraca do formatu z myślnikiem |
| „12-34” | kod z czterema cyframi | brak koordynatora w wiadomościach | kod nie jest sprowadzany do formatu |

Adresy w polu adresu mają różne separatory. Według konfiguracji opisywanego wdrożenia stosuje się tam średnik albo dwukropek. Zapytanie zamienia dwukropek i przecinek na średnik oraz usuwa spację przed średnikiem. Kopia wiadomości łączy potem adresy z różnych źródeł bez powtórzeń, bez względu na wielkość liter.

## Podobna reguła stoi osobno w kolumnie listy spraw i w dwóch rodzajach wiadomości

W opisywanym wdrożeniu podobna reguła jest zapisana osobno w co najmniej trzech miejscach. Jedno z nich to zapytanie kopii wiadomości ręcznych, drugie to zapytanie powiadomienia automatycznego, a oba pracują na formacie z myślnikiem po drugim znaku. Trzecie miejsce to kolumna „Koordynator” zestawienia spraw. Zmiana w jednym miejscu nie zmienia pozostałych.

- Kolumna „Koordynator” na liście spraw. Pokazuje nazwę koordynatora, a nie adres. Porównuje same cyfry bez kontroli długości kodu i bierze kod tylko z aktywnej kartoteki klienta.
- Zapytania wiadomości. Kopia wiadomości ręcznych i powiadomienie automatyczne porównują kod w formacie z myślnikiem po drugim znaku.

Skutek różnicy jest widoczny na kodzie czterocyfrowym: może on dać koordynatora w kolumnie listy i nie dać go w wiadomości.

Przykład (dane wymyślone): Sprawa dotyczy klienta, którego kod w kartotece zapisano jako „12 345”. Dalszy ciąg przykładu pokazuje lista numerowana.

1. Program usuwa spację i wstawia myślnik, więc kod ma postać 12-345.
2. W słowniku pasują dwa zakresy: od 12-000 do 12-999 oraz od 12-300 do 12-399.
3. Wygrywa drugi, bo obejmuje mniej kodów, więc adres koordynatora pochodzi z jego wiersza.
4. Ten adres trafia do kopii wiadomości ręcznych i do powiadomienia automatycznego w statusie kończącym przygotowanie oferty.
5. Lista spraw pokazuje w osobnej kolumnie nazwę tego koordynatora.

Gdyby kod klienta miał cztery cyfry, wiadomości nie dostałyby koordynatora, a kolumna na liście spraw oceniałaby taki kod inaczej. Koordynator jest adresatem jednego powiadomienia automatycznego, a w wiadomościach ręcznych trafia do kopii.

## Powiadomienie automatyczne wymaga aktywnego szablonu i niepustego adresata

Przy zmianie statusu na status kończący przygotowanie oferty koordynator wskazany opisaną regułą jest dopisywany na początek listy stałych adresatów z pola szablonu. Dopisanie następuje tylko wtedy, gdy koordynatora nie ma jeszcze na tej liście, a porównanie nie zależy od wielkości liter. Wiadomość nie ma kopii.

- Szablon aktywny. Powiadomienie automatyczne powstaje tylko wtedy, gdy szablon jest aktywny, a odznaczenie pola „Aktywne” wyłącza je.
- Adresat niepusty. Wiadomość bez żadnego adresata nie jest kolejkowana.

Program zapisuje powiadomienie w kolejce wiadomości, więc przed jego powstaniem sprawdzane są dwie rzeczy: aktywny szablon i co najmniej jeden adresat.

Status kończący przygotowanie oferty dotyczy sprawy, a [oferta wśród załączników sprawy](https://www.programmagazyn.pl/oferta-jako-zalacznik-ze-znacznikiem-w-tabeli-plikow/) ma osobny opis. Założenie samej sprawy przy zamknięciu zlecenia przyjęcia opisuje tekst o [sprawie zakładanej przy zamknięciu zlecenia](https://www.softwarestudio.com.pl/magazyn-wms-net/sprawa-uszkodzen-zakladana-przy-zamknieciu-zlecenia-przyjecia/).

## Kod do porównania pochodzi z kartoteki klienta

Reguła czyta kod klienta zapisany w kartotece klienta, który występuje w sprawie. Kolumna „Koordynator” na liście spraw bierze kod tylko z aktywnej kartoteki klienta.

- Co czyta reguła. Kod klienta z kartoteki klienta zapisanego w sprawie.
- Co wymaga decyzji. Wybór źródła kodu, o którym mowa w czwartym pytaniu do analizy.

Czy reguła powinna korzystać z kodu klienta, czy z kodu miejsca, którego sprawa dotyczy, to pytanie do analizy po stronie Twojej organizacji. Opisujemy wyłącznie wariant z kodem klienta zapisanym w kartotece. Adresat ustalany inaczej niż z kartoteki klienta to [inne źródło adresata](https://www.softwarestudio.com.pl/awizacje-vss-net/opiekun-z-erp-steruje-zakresem-managera-produktu/), opisane na osobnej stronie.

## Pytania do analizy

Przed wdrożeniem podobnego rozwiązania zadajemy cztery pytania. To pytania do czytelnika, a nie fakty o opisywanym wdrożeniu.

1. Czy w Twojej organizacji adresat powiadomienia zależy od regionu klienta i kto utrzymuje listę adresów?
2. Co ma się stać, gdy żaden zakres nie obejmuje kodu klienta: brak powiadomienia czy adres zastępczy?
3. Czy zakresy w słowniku mogą się nakładać i kto sprawdza, który z nich ma wygrać?
4. Z którego kodu ma korzystać reguła: z kodu klienta rozliczanego czy z kodu miejsca, którego sprawa dotyczy?

## Pytania i odpowiedzi o adresacie powiadomienia i zakresach kodów

## Słownik pojęć o adresacie powiadomienia według kodu pocztowego

Terminy używane przy opisie reguły, która z kodu pocztowego klienta wskazuje koordynatora regionu.
