Exemplo n.º 1
0
        //提交,只有草稿状态才可以提交
        void SubmitData()
        {
            dgvBillReceivable.EndEdit();
            List <SysSQLString> listSql = new List <SysSQLString>();
            string submit   = ((int)DataSources.EnumAuditStatus.SUBMIT).ToString();   //提交
            string draft    = ((int)DataSources.EnumAuditStatus.DRAFT).ToString();    //草稿
            string notAudit = ((int)DataSources.EnumAuditStatus.NOTAUDIT).ToString(); //审核失败
            string message  = string.Empty;                                           //错误消息

            foreach (DataGridViewRow dgvr in dgvBillReceivable.Rows)
            {
                object isCheck = dgvr.Cells["colCheck"].Value;
                string status  = CommonCtrl.IsNullToString(dgvr.Cells[colOrderStatus.Name].Tag);
                if (isCheck != null && (bool)isCheck && (status == draft || status == notAudit))
                {
                    string order_id     = dgvr.Cells["colPayableSingleID"].Value.ToString();
                    int    strOrderType = Convert.ToInt32(dgvr.Cells[colOrderType.Name].Tag);
                    //应收应付验证单据本次结算金额和明细金额是否一样
                    //if ((orderType == DataSources.EnumOrderType.RECEIVABLE && (DataSources.EnumReceivableType)strOrderType == DataSources.EnumReceivableType.RECEIVABLE) ||
                    //    (orderType == DataSources.EnumOrderType.PAYMENT && (DataSources.EnumPaymentType)strOrderType == DataSources.EnumPaymentType.PAYMENT))
                    //{
                    //if (!DBHelper.IsExist("验证单据和明细金额是否一样", "v_bill_money", string.Format("order_id='{0}'", order_id)))
                    //{
                    //    dgvBillReceivable.CurrentCell = dgvr.Cells[colOrderNum.Name];
                    //    message = "收/付款金额与结算单据实际金额不一致!";
                    //    break;
                    //}
                    //}
                    if (!Financial.CheckTotal(strOrderType, order_id))
                    {
                        dgvBillReceivable.CurrentCell = dgvr.Cells[colOrderNum.Name];
                        message = "收/付款金额与结算单据实际金额不一致!";
                        break;
                    }

                    //应收应付,重新计算已结算/待结算金额(应对同一张结算单,保存多次,再默认页面提交时)
                    if (strOrderType == 1)
                    {
                        if (Financial.CheckDocumentMoney(orderType, order_id))
                        {
                            dgvBillReceivable.CurrentCell = dgvr.Cells[colOrderNum.Name];
                            message = "单据本次结算金额大于待结算金额!";
                            break;
                        }
                        Financial.DocumentMoney(orderType, order_id, listSql);
                    }
                    SysSQLString sql = new SysSQLString();
                    sql.cmdType = CommandType.Text;
                    sql.Param   = new Dictionary <string, string>();
                    sql.Param.Add("submit", submit);
                    sql.Param.Add("draft", draft);
                    sql.Param.Add("notAudit", notAudit);
                    if (orderType == DataSources.EnumOrderType.RECEIVABLE)
                    {
                        sql.Param.Add("order_num", CommonUtility.GetNewNo(DataSources.EnumProjectType.RECEIVABLE));
                    }
                    else
                    {
                        sql.Param.Add("order_num", CommonUtility.GetNewNo(DataSources.EnumProjectType.PAYMENT));
                    }
                    sql.Param.Add("payable_single_id", order_id);
                    sql.sqlString = "update tb_bill_receivable set order_status=@submit,order_num=@order_num where payable_single_id=@payable_single_id and (order_status=@draft or order_status=@notAudit)";
                    listSql.Add(sql);
                    SetDocumentImportStatus("is_lock", DataSources.EnumImportStaus.LOCK, listSql, order_id, dgvr.Cells[colOrderType.Name].Tag.ToString());
                    //如果是应收付,则计算已结算金额
                    if (strOrderType == 1)
                    {
                        Financial.DocumentSettlementByBill(orderType, order_id, listSql);
                    }
                    else if (strOrderType == 0)//预收付,则计算预收付金额
                    {
                        Financial.DocumentAdvanceByBill(orderType, order_id, listSql);
                    }
                }
            }
            if (message.Length > 0)
            {
                MessageBoxEx.ShowError(message);
                return;
            }
            if (listSql.Count == 0)
            {
                MessageBoxEx.Show("请选择要提交的数据!");
                return;
            }
            if (!MessageBoxEx.ShowQuestion("是否要提交选择的数据!"))
            {
                return;
            }
            if (DBHelper.BatchExeSQLStringMultiByTrans("提交应收应付", listSql))
            {
                MessageBoxEx.Show("提交成功!");
                BindData();
            }
            else
            {
                MessageBoxEx.ShowWarning("提交失败!");
            }
        }