#!/usr/bin/perl
use strict;
use warnings;
use FindBin qw( $Bin );
use lib "/opt/pos/lib";
use POSIX qw( strftime );
use Data::Dumper;
use File::Path qw( make_path remove_tree );
use File::Copy qw( copy move );
use DBI;
use App::POS::DB::Postgres;
use App::POS::Config;

my $DATABASE = 'pos';
my$dsn='DBI:Pg:dbname='.$DATABASE.';host=127.0.0.1';
my$user='root';
my$passwd='';
my$db=App::POS::DB::Postgres->new(dbh=>DBI->connect($dsn,$user,$passwd,{}));

my $dup_recs = $db->select(qq{
  SELECT fo_doc_number, COUNT(*)
  FROM sales_headers
  GROUP BY fo_doc_number HAVING COUNT(*) > 1;
});

for (@$dup_recs) {
  my $ids = $db->select("SELECT id FROM sales_headers WHERE fo_doc_number = ? ORDER BY id", $_->{fo_doc_number});

  my $id_to_remove = $ids->[0]->{id};

  print STDERR "###> $id_to_remove\n";

  $db->do("DELETE FROM sales_hashes_products WHERE hash_id IN (SELECT id FROM sales_hashes WHERE header = ?)", $id_to_remove);
  $db->do("DELETE FROM sales_hashes WHERE header = ?", $id_to_remove);
  $db->do("DELETE FROM sales_headers_aux WHERE header = ?", $id_to_remove);
  $db->do("DELETE FROM sales_payments WHERE header = ?", $id_to_remove);
  $db->do("DELETE FROM sales_payments_aux WHERE payment IN (SELECT id FROM sales_payments WHERE header = ?)", $id_to_remove);
  $db->do("DELETE FROM sales_details WHERE header = ?", $id_to_remove);
  $db->do("DELETE FROM sales_details_aux WHERE header = ?", $id_to_remove);
  $db->do("DELETE FROM sales_headers WHERE id = ?", $id_to_remove);
}

