#include "problemlist.h"
#include "ui_problemlist.h"
#include <QDebug>
#include <QSqlQuery>
#include <QSqlError>
#include <QMessageBox>

#pragma execution_character_set("utf-8")

ProblemList::ProblemList(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::ProblemList)
{
    ui->setupUi(this);
    initUi();
}

ProblemList::~ProblemList()
{
    delete ui;
}

void ProblemList::initUi()
{
    ui->tableWidget->setItem(0,0,new QTableWidgetItem("问题清单"));
    ui->tableWidget->setSpan(0,0,3,2);
    ui->tableWidget->item(0,0)->setTextAlignment(Qt::AlignCenter);

    ui->tableWidget->setItem(0,2,new QTableWidgetItem("整改检查结果及对账销号清单"));
    ui->tableWidget->setSpan(0,2,1,12);
    ui->tableWidget->item(0,2)->setTextAlignment(Qt::AlignCenter);

    ui->tableWidget->setItem(1,2,new QTableWidgetItem("整改检查结果"));
    ui->tableWidget->setSpan(1,2,2,2);
    ui->tableWidget->item(1,2)->setTextAlignment(Qt::AlignCenter);

    ui->tableWidget->setItem(1,4,new QTableWidgetItem("整改类型"));
    ui->tableWidget->setSpan(1,4,1,8);
    ui->tableWidget->item(1,4)->setTextAlignment(Qt::AlignCenter);

    ui->tableWidget->setItem(2,4,new QTableWidgetItem("已整改"));
    ui->tableWidget->setSpan(2,4,1,3);
    ui->tableWidget->item(2,4)->setTextAlignment(Qt::AlignCenter);

    ui->tableWidget->setItem(2,7,new QTableWidgetItem("正在整改"));
    ui->tableWidget->setSpan(2,7,1,2);
    ui->tableWidget->item(2,7)->setTextAlignment(Qt::AlignCenter);

    ui->tableWidget->setItem(2,9,new QTableWidgetItem("尚未整改"));
    ui->tableWidget->setSpan(2,9,1,3);
    ui->tableWidget->item(2,9)->setTextAlignment(Qt::AlignCenter);

    ui->tableWidget->setItem(1,12,new QTableWidgetItem("是否销号"));
    ui->tableWidget->setSpan(1,12,3,1);
    ui->tableWidget->item(1,12)->setTextAlignment(Qt::AlignCenter);

    ui->tableWidget->setItem(1,13,new QTableWidgetItem("销号时间"));
    ui->tableWidget->setSpan(1,13,3,1);
    ui->tableWidget->item(1,13)->setTextAlignment(Qt::AlignCenter);


    // 下级列标题 12个
    ui->tableWidget->setItem(3,0,new QTableWidgetItem("序号"));
    ui->tableWidget->setItem(3,1,new QTableWidgetItem("摘要"));
    ui->tableWidget->setItem(3,2,new QTableWidgetItem("检查时间"));
    ui->tableWidget->setItem(3,3,new QTableWidgetItem("检查方式"));
    ui->tableWidget->setItem(3,4,new QTableWidgetItem("纠正问题"));
    ui->tableWidget->setItem(3,5,new QTableWidgetItem("完善制度"));
    ui->tableWidget->setItem(3,6,new QTableWidgetItem("完成时间"));
    ui->tableWidget->setItem(3,7,new QTableWidgetItem("主要原因"));
    ui->tableWidget->setItem(3,8,new QTableWidgetItem("完成时限"));
    ui->tableWidget->setItem(3,9,new QTableWidgetItem("主要原因"));
    ui->tableWidget->setItem(3,10,new QTableWidgetItem("责任部门或责任人"));
    ui->tableWidget->setItem(3,11,new QTableWidgetItem("完成时限"));

    // 禁止编辑
    for(int i=0;i<4;++i){
        ui->tableWidget->setItemDelegateForRow(i,new TableItemDelegate());
    }


    // 右键菜单
    m_menu = new QMenu(this);
    m_menu->addAction("删除当前行");
    ui->tableWidget->setContextMenuPolicy(Qt::CustomContextMenu);
    connect(ui->tableWidget,SIGNAL(customContextMenuRequested(QPoint)),this,SLOT(showMenuSlot(QPoint)));
    connect(m_menu->actions().at(0),SIGNAL(triggered(bool)),this,SLOT(deleteAction()));


    // 加载公司名
    readCompanyFromSQL();
}

void ProblemList::readCompanyFromSQL()
{
    ui->comboBox_company->clear();

    QString sql = "select DISTINCT name from all_company_info";
    QSqlQuery query;
    if(query.exec(sql)){
        qDebug()<<QString("select DISTINCT all_company_info ok");

        while(query.next()){ // 添加公司名
            QString name = query.value(0).toString();
            ui->comboBox_company->addItem(name);
        }

    }else{
        qDebug()<<QString("select all_company_info fail...")<<query.lastError().text();

    }
}

void ProblemList::showMenuSlot(QPoint){
    m_menu->exec(QCursor::pos());
}

void ProblemList::deleteAction(){

    int row = ui->tableWidget->currentRow();
    if(row>=4){
        qDebug()<<"ok";
        ui->tableWidget->removeRow(row);
    }else{
        qDebug()<<"fail";
    }
}
void ProblemList::on_pushButton_addRow_clicked()
{
    ui->tableWidget->insertRow(ui->tableWidget->rowCount());
}

void ProblemList::on_pushButton_save_clicked()
{
    QString sql = QString("insert into problem_list_info (name,序号,摘要,检查时间,检查方式,纠正问题,完善制度\
,完成时间,主要原因,完成时限,主要原因1,责任部门或责任人,完成时限1,是否销号,销号时间) values ");
    QString name = ui->comboBox_company->currentText();

    for(int i=4;i<ui->tableWidget->rowCount();++i){
        QStringList labels;

        for(int j=0;j<ui->tableWidget->columnCount();++j){
            QTableWidgetItem *item = ui->tableWidget->item(i,j);;
            qDebug() <<i<<j <<item;
            if(item){
                qDebug()<<"OK";
                labels<<item->data(Qt::EditRole).toString();
            }else{
                labels<<" ";
            }
        }
        qDebug()<<labels;
        if(labels.at(0)==" ")continue;
        if(name.size()==0){
            QMessageBox::information(this,"单位信息为空 ","请输入单位名称");
            continue;
        }
        sql += QString("('%1',").arg(name);
        for(int k=0;k<labels.size()-1;++k){
            sql += QString("'%1',").arg(labels[k]);
        }
        sql += QString("'%1'),").arg(labels.back());
    }
    sql = sql.left(sql.size()-1); // 去掉最后一个逗号
    qDebug()<<"sql="<<sql;
    QSqlQuery query;
    if(query.exec(sql))
    {
      qDebug()<<QString("insert  problem_list_info ok...");
      QMessageBox::information(this,"OK","添加成功");
    }else{
      qDebug()<<QString("insert problem_list_info fail...")<<query.lastError().text();
      QMessageBox::information(this,"添加失败","可能添加的数据不全导致的,得确认每行的首项有数据");
    }
}

void ProblemList::on_comboBox_company_currentIndexChanged(const QString &arg1)
{
    // 要清除上一家公司的数据
    ui->tableWidget->setRowCount(4);
    ui->tableWidget->setRowCount(7);
    // 加载表格信息
    qDebug()<<"current :"<<arg1;

    QString sql = QString("select * from problem_list_info where name='%1'").arg(arg1);
    QSqlQuery query;
    if(query.exec(sql)){
        qDebug()<<QString("select problem_list_info ok");
        int row=0;
        while(query.next()){ // 添加行数据
            for(int i=0;i<14;++i){
                ui->tableWidget->setItem(row+4,i,new QTableWidgetItem(query.value(2+i).toString()));
            }
            row++;
            ui->tableWidget->setRowCount(ui->tableWidget->rowCount()+1); // 增加一个新的行
        }
        qDebug()<<"row:"<<row;

    }else{
        qDebug()<<QString("select problem_list_info fail...")<<query.lastError().text();

    }
}