Autor Wątek: Automatyczne powiadomienie o zaległych płatnościach  (Przeczytany 6481 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

Offline szymciak

  • Nowy użytkownik
  • *
  • Wiadomości: 16
  • Reputacja +0/-0
  • Wersja programu: Subiekt
Automatyczne powiadomienie o zaległych płatnościach
« dnia: Styczeń 21, 2016, 23:47:05 »
Szanowni użytkownicy SubiektGT
Napisałem skrypt do automatycznego powiadamiania o zaległych należnościach klientów.
Powiadomienia są wysyłane mailem zgodnie z harmonogramem uruchomienia procedury.
Lista jest generowana  po przekroczeniu ustalonego terminu płatności na fakturze.

Każdy mail jest wysyłany oddzielnie więc klient dostaje informację tylko o swoich zaległościach.
wszystkie pola jakie trzeba zmienić są opisane
do zmiany:
- Nazwa bazy danych subiekta
- Adres mailowy do powiadomień gdy nie jest wpisany w kartotece klientów
- Adres mailowy do przy odpowiedzi na maila
- Temat maila

Całe rozwiązanie można bez problemu uruchomić na SQL Standard, SQL Enterprise jak również na wersji darmowej Express
(ja używam rozwiązania na SQL 2014,  powinno działać również na niższych wersjach silnika bazy danych)

Jeśli kogoś zainteresuje temat i nie będzie potrafił skonfigurować DBMail'a zrobię instrukcję.


CREATE PROCEDURE powiadomienie_do_klientow
AS
BEGIN

DECLARE @mail VARCHAR(500) --  lista adresow
DECLARE @name VARCHAR(500) --  ID firmy
DECLARE @tableHTML nvarchar(max)

DECLARE db_cursor CURSOR FOR 
  SELECT DISTINCT
(case when (kh_email) = '' then  'ADRES_MAIL_GDY_JEST_BRAK_ADRESU' else kh_email end ) as email
,kh_Id
 FROM  BAZA_SUBIEKTA.dbo.nz__Finanse  AS RoKh
LEFT JOIN BAZA_SUBIEKTA.dbo.adr__Ewid AS Adresy ON RoKh.nzf_IdAdresu=Adresy.adr_Id
LEFT JOIN BAZA_SUBIEKTA.dbo.kh__Kontrahent as KhEw ON KhEw.kh_Id=Adresy.adr_IdObiektu
-- BAZA_SUBIEKTA - nazwa bazy danych subiekta
-- ADRES_MAIL_GDY_JEST_BRAK_ADRESU - zabezpieczenie dla firmy która nie ma wpisanego adresy mailowego
 WHERE 

   nzf_Typ=39 AND
   BAZA_SUBIEKTA.dbo.fnDniSpoznienia(nzf_TerminPlatnosci, GETDATE())>0 AND
   nzf_WartoscWaluta > 0 AND
   nzf_IdObiektu IS NOT NULL 

OPEN db_cursor   
FETCH NEXT FROM db_cursor INTO @mail,@name
WHILE @@FETCH_STATUS = 0   
BEGIN   
     
SET  @tableHTML =

N'<style type="text/css">
#box-table
{
font-family: "Lucida Sans Unicode", "Lucida Grande", Sans-Serif;
font-size: 12px;
text-align: center;
border-collapse: collapse;
border-top: 7px solid #9baff1;
border-bottom: 7px solid #9baff1;
}
#box-table th
{
font-size: 13px;
font-weight: normal;
background: #b9c9fe;
border-right: 2px solid #9baff1;
border-left: 2px solid #9baff1;
border-bottom: 2px solid #9baff1;
color: #039;
}
#box-table td
{
border-right: 1px solid #aabcfe;
border-left: 1px solid #aabcfe;
border-bottom: 1px solid #aabcfe;
color: #669;
}
tr:nth-child(odd) { background-color:#eee; }
tr:nth-child(even) { background-color:#fff; }
</style>'+
N'<H3><font color="Black">Witamy. </H3>' +
 N'<H3><font color="Black">Poniżej przedstawiamy zestawienie zaległych płatności za faktury.</H3>' +
 
N'<table id="box-table" >' +
N'
<th>Data wystawienia</th>
<th>Data płatności</th>
<th>Numer dokumentu</th>
<th>Nazwa firmy</th>
<th>Dni zaleglosci</th>
<th>Należność</th>

</tr>' +

CAST ( (
SELECT
td = CONVERT(VARCHAR(19),RoKh.nzf_data, 104),'',
td = CONVERT(VARCHAR(19),nzf_terminPlatnosci, 104),'',
td = nzf_numerpelny,'',
td = Adresy.adr_Nazwa ,'',
td = BAZA_SUBIEKTA.dbo.fnDniSpoznienia( nzf_TerminPlatnosci,GETDATE()),'',
td = SUM( CASE WHEN nzf_typ=39 THEN 1.00*nzf_Wartosc END )

FROM
BAZA_SUBIEKTA.dbo.nz__Finanse  AS RoKh
LEFT JOIN BAZA_SUBIEKTA.dbo.adr__Ewid AS Adresy ON RoKh.nzf_IdAdresu=Adresy.adr_Id
LEFT JOIN BAZA_SUBIEKTA.dbo.kh__Kontrahent  as KhEw ON KhEw.kh_Id=Adresy.adr_IdObiektu
WHERE
  nzf_Typ=39 AND
  BAZA_SUBIEKTA.dbo.fnDniSpoznienia(nzf_TerminPlatnosci,GETDATE())>0 AND
  nzf_WartoscWaluta > 0 AND
  nzf_IdObiektu IS NOT NULL
 GROUP BY
Adr_Nazwa,
KhEw.kh_symbol,
khew.kh_email,
    RoKh.nzf_data,
Nzf_terminPlatnosci,
Nzf_numerpelny   

FOR XML PATH('tr'), TYPE
) AS NVARCHAR(MAX) ) +
  N'</table>'+
  N'<H3><font color="Black"> Powiadomienie zostało wygenerowane automatycznie.</H3>' +
  N'<H3><font color="Black"> Prosimy nie odpowiadać na tego maila.</H3>' +
  N'<H3><font color="Red">W przypadku dokonania płatności w przeciągu ostatnich 3 dni prosimy zignorować wiadomość.</H3>'

exec msdb.dbo.sp_send_dbmail
@profile_name = 'powiadomienia',
@recipients = @mail,
@reply_to = 'ADRES_ODPOWIEDZI_KLIENTA',
@subject = 'TEMAT_MAILA',
@body = @tableHTML,
@body_format = 'html'

FETCH NEXT FROM db_cursor INTO  @mail, @name
END   
CLOSE db_cursor   
DEALLOCATE db_cursor
END



Forum Użytkownikow Subiekt GT

Automatyczne powiadomienie o zaległych płatnościach
« dnia: Styczeń 21, 2016, 23:47:05 »