/*$Id: zvb_ukrprom.c,v 5.26 2013/09/26 09:43:46 sasa Exp $*/
/*08.05.2023	01.07.2005	Белых А.И.	zvb_ukrprom.c
Выгрузка сумм для зачисления на карт-счета для Укрпромбанка
*/

#include        <errno.h>
#include    "buhg.h"
#ifdef	HAVE_UNISTD_H
#include <unistd.h>
#endif

void		ukrprom_h(char *imaf,long kolz);



void zvb_ukrprom(short prn,short knah,short mv,
short gv,
struct dirnupoi *poisk,
SQLCURSOR *cur,
const char *kodor,
const char *ima_mah,
const char *ima_sd,
const char *parol,
const char *nom_fil)
{
char strsql[512];
char imafdbf[64];
char imaftmp[64];
char imafr[64];
FILE  *fftmp;
FILE  *ffr;
int   kolstr=0;
class iceb_tu_str rukov("");
class iceb_tu_str glavbuh("");
class iceb_tu_str bros("");

clear();
GDITE();

//printw("%s\n",strsql);
//OSTANOV();

SQLCURSOR cur1;
SQLCURSOR curr;
SQL_str row,row1;


iceb_t_poldan("Табельный номер руководителя",&bros,"zarnast.alx");
if(bros.ravno()[0] != '\0')
 {
  sprintf(strsql,"select fio from Kartb where tabn=%s",bros.ravno());
  if(sql_readkey(&bd,strsql,&row1,&curr) == 1)
    rukov.new_plus(row1[0]);
 } 

iceb_t_poldan("Табельный номер бухгалтера",&bros,"zarnast.alx");

if(bros.ravno()[0] != '\0')
 {
  sprintf(strsql,"select fio,inn,telef from Kartb where tabn=%s",bros.ravno());
  if(sql_readkey(&bd,strsql,&row1,&curr) == 1)
    glavbuh.new_plus(row1[0]);
 }


time_t vrem;
struct tm *bf;
time(&vrem);
bf=localtime(&vrem);

sprintf(imaftmp,"ukrprom%d.tmp",getpid());
if((fftmp = fopen(imaftmp,"w")) == NULL)
 {
  error_op_nfil(imaftmp,errno,"");
  return;
 }
sprintf(imafr,"ukrprom%d.lst",getpid());
if((ffr = fopen(imafr,"w")) == NULL)
 {
  error_op_nfil(imafr,errno,"");
  return;
 }

fprintf(ffr,"%s\n\n",iceb_t_get_pnk("00",0));

fprintf(ffr,"\
          Відомість для зарахування на карт-рахунки N_____\n\
                від %d.%d.%dр.\n\n",bf->tm_mday,bf->tm_mon+1,bf->tm_year+1900);

fprintf(ffr,"\
-----------------------------------------------------------------------\n");
fprintf(ffr,"\
 Н/п|Таб.номер| Карт-счёт |  Сумма    | Прізвище,і'мя, по батькові\n");
fprintf(ffr,"\
-----------------------------------------------------------------------\n");




class iceb_tu_str fio("");

int kolstr1=0;
int nomer=0;

class iceb_tu_str kartshet("");
double suma;
double sumai=0.;
class iceb_tu_str inn("");
cur->poz_cursor(0);

while(cur->read_cursor(&row) != 0)
 {
  strzag(LINES-1,0,kolstr,++kolstr1);
  if(poidirnu(row,poisk,&fio) != 0)
     continue;

  
  sprintf(strsql,"select fio,inn,bankshet from Kartb where tabn=%s",row[1]);
  if(sql_readkey(&bd,strsql,&row1,&cur1) == 1)
   {
    inn.new_plus(row1[1]);
    kartshet.new_plus(row1[2]);

   }
  else
   {
    kartshet.new_plus("");
    inn.new_plus("");
   }

  if(kartshet.ravno()[0] == '\0')
   {
    VVOD SOOB(1);
    SOOB.VVOD_spisok_add_MD(gettext("Не введён счёт !"));
    sprintf(strsql,"%s:%s %s",gettext("Табельный номер"),row[1],fio.ravno());
    SOOB.VVOD_spisok_add_MD(strsql);
    soobshw(&SOOB,stdscr,-1,-1,0,1);
    continue;
   }

  suma=atof(row[4]);
  if(suma == 0.)
   continue;
  if(prn == 2)
    suma*=(-1);   
  

  fprintf(fftmp," %-10.10s%-20.20s%10.2f",inn.ravno(),kartshet.ravno(),suma);


  fprintf(ffr,"%4d %-9s %-14s %10.2f %s\n",
  ++nomer,row[1],kartshet.ravno(),suma,fio.ravno());
  sumai+=suma;
    
 }
fputc(26, fftmp);
fprintf(ffr,"\
-----------------------------------------------------------------------\n");
fprintf(ffr,"%*s:%10.2f\n",iceb_tu_kolbait(29,"Разом"),"Разом",sumai);


fprintf(ffr,"\n\
Керівник           _____________________ %s\n\n\
Головний бухгалтер _____________________ %s\n",rukov.ravno(),glavbuh.ravno());
iceb_t_podpis(ffr); 
fclose(fftmp);
fclose(ffr);

short dt,mt,gt;
iceb_tu_poltekdat(&dt,&mt,&gt);

sprintf(imafdbf,"%02d%02d%s%d.dbf",mt,dt,kodor,atoi(nom_fil));

ukrprom_h(imafdbf,nomer);

/*Сливаем два файла*/
iceb_t_cat(imafdbf,imaftmp);
unlink(imaftmp);
if(ima_mah[0] != '\0')
 {
  //Переписываем файл в нужный каталог
  sprintf(strsql,"bankcp %s %s %s %s %s",
  ima_mah,imafdbf,imafdbf,ima_sd,parol);

  int koh=system(strsql);

  VVOD SOOB(1);
  if(koh != 0)
   {
    sprintf(strsql,gettext("Передача файла не произошла ! Код ошибки %d"),koh);
    SOOB.VVOD_spisok_add_MD(strsql);
    sprintf(strsql,"bankcp %s %s %s %s %s",
    ima_mah,imafdbf,imafdbf,ima_sd,parol);
    SOOB.VVOD_spisok_add_MD(strsql);
   }
  if(koh == 0)
   {
    SOOB.VVOD_spisok_add_MD(gettext("Передача файла произошла успешно"));
    SOOB.VVOD_spisok_add_MD(imafdbf);
   }     

  soobshw(&SOOB,stdscr,-1,-1,0,1);
 }
//printw("Имя файла - %s\n",imafdbf);
//OSTANOV();
class spis_oth oth;

oth.spis_imaf.plus(imafr);
oth.spis_naim.plus(gettext("Распечатка документов для перечисления на карт-счета"));
iceb_t_ustpeh(imafr,3);

oth.spis_imaf.plus(imafdbf);
oth.spis_naim.plus(gettext("Документ в электронном формате"));

iceb_t_rabfil(&oth,"");

}

/******************************/
/*Создаем заголовок файла dbf*/
/******************************/
void ukrprom_f(DBASE_FIELD *f,const char *fn,char  ft,int l1,int l2,
int *header_len,int *rec_len)
{

strncpy(f->name, fn,sizeof(f->name)-1);
f->type = ft;
f->length = l1;
f->dec_point = l2;
*header_len=*header_len+sizeof(DBASE_FIELD);
*rec_len=*rec_len+l1;
}

/***********************************************/
void		ukrprom_h(char *imaf,long kolz)
{
time_t		tmm;
struct  tm      *bf;
FILE		*ff;
#define		kolpol 3 //Количество колонок (полей) в dbf файле
DBASE_FIELD f[kolpol];
DBASE_HEAD  h;
int fd;
int i;
int header_len, rec_len;

if((ff = fopen(imaf,"w")) == NULL)
   {
    error_op_nfil(imaf,errno,"");
    return;
   }

memset(&h,'\0',sizeof(h));
memset(&f, '\0', sizeof(f));

h.version = 3;

time(&tmm);
bf=localtime(&tmm);

h.l_update[0] = bf->tm_year+1900-2000;       /* yymmdd for last update*/
h.l_update[1] = bf->tm_mon+1;       /* yymmdd for last update*/
h.l_update[2] = bf->tm_mday;       /* yymmdd for last update*/

h.count = kolz;              /* number of records in file*/

header_len = sizeof(h);
rec_len = 0;
int shetshik=0;
ukrprom_f(&f[shetshik++],"IDCODE", 'C', 10, 0,&header_len,&rec_len);
ukrprom_f(&f[shetshik++],"CARDACC", 'C', 20, 0,&header_len,&rec_len);
ukrprom_f(&f[shetshik++],"AMT", 'N', 10, 2,&header_len,&rec_len);


h.header = header_len + 1;/* length of the header
                           * includes the \r at end
                           */
h.lrecl= rec_len + 1;     /* length of a record
                           * includes the delete
                           * byte
                          */
/*
 printw("h.header=%d h.lrecl=%d\n",h.header,h.lrecl);
*/


fd = fileno(ff);

if(write(fd, &h, sizeof(h)) < 0)
 {
  printw("\n%s-%s\n",__FUNCTION__,strerror(errno));
  OSTANOV();
 }

for(i=0; i < kolpol; i++) 
 {
  if(write(fd, &f[i], sizeof(DBASE_FIELD)) < 0)
   {
    printw("\n%s-%s\n",__FUNCTION__,strerror(errno));
    OSTANOV();
   }
 }
fputc('\r', ff);

fclose(ff);

}
