/**
* Crea una cuenta provisionando los siguientes datos minimos
* Es necesario que haya un usuario previo creado
* Parametros externos
@param sGuUser Usuario Profesional o Usuario se promocion� desde cuenta gratuita
@param sTpAccount Tipo de la cuenta P=Profesional C=corporativa
@param iMaxUsers Numero m�ximo de usuarios de la cuenta
@param sSnPassport N� de documento legal del contratante
@param sTpPassport Tipo de documento legal {DNI,NIF,CIF,...}
@param sTpBilling Tipo de opci�n de cobro { T=Tarjeta, B=Banco, ... }
* Parametros calculados
//param sNewIdAccount id de la cuenta
//param iDomain Id del dominio a que pertenece el usuario
//param sGuWorkarea guid de la workarea del usuario
* Parametros respuesta
//param sCodError codigo de error (0->ok, 1->ko)
//param sIdObjetoOK id_cuenta del nuevo dominio si sCodError = 0 sino ""
//param sMessage Mensaje de exito si sCodError = 0 o de error si sCodError = 1
**/
import java.io.IOException;
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.util.Properties;
import com.knowgate.dataobjs.DB;
import com.knowgate.dataobjs.DBAudit;
import com.knowgate.dataobjs.DBBind;
import com.knowgate.dataobjs.DBSubset;
import com.knowgate.datacopy.DataStruct;
import com.knowgate.acl.*;
import com.knowgate.misc.Environment;
import com.knowgate.misc.Gadgets;
import com.knowgate.dfs.FileSystem;
import com.knowgate.billing.*;
//Recogida de par�metros externos
String XinsGuUser = sGuUser;
String XinsTpAccount = sTpAccount;
String XiniMaxUsers = iMaxUsers;
String XinsSnPassport = sSnPassport;
String XinsTpPassport = sTpPassport;
String XinsTpBilling = sTpBilling;
ReturnValue = new Properties();
//Valores por defecto si se recibe null
if (0 == XinsTpAccount.length())
XinsTpAccount = "P";
if (0 == XiniMaxUsers.length())
XiniMaxUsers = "1";
if (0 ==XinsSnPassport.length())
XinsSnPassport = "dni";
if (0 == XinsTpPassport.length())
XinsTpPassport = "D";
if (0 == XinsTpBilling.length())
XinsTpBilling = "T";
//***********************************
//** Par�metros calculados ** //
String XcsNewIdAccount = Gadgets.generateUUID().substring(22,32);
//infraestructura necesarias para operaciones con DataStruct
Object[] oPKOr = {null};
Object[] oPKTr = {null};
//Obtener variables de la aplicaci�n
String sStorage = Environment.getProfileVar("hipergate", "storage");
//infraestructura necesarias para operaciones con DataStruct
Properties oParams = new Properties();
DataStruct oDS = new DataStruct();
try {
DefaultConnection.setReadOnly(true);
DefaultConnection.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
// C�digo de acceso a datos
oDS.setOriginConnection(DefaultConnection);
oDS.setTargetConnection(AlternativeConnection);
AlternativeConnection.setAutoCommit (false);
//Calculo de los par�metros XciDomain y XcsGuWorkarea a partir de XinsGuUser
DBSubset oUsers;
int iUsers;
oUsers = new DBSubset(DB.k_users,
DB.id_domain + "," + DB.gu_workarea,
DB.gu_user + "='" + XinsGuUser + "' " , 4);
iUsers = oUsers.load(AlternativeConnection);
String XciDomain = oUsers.getString(0,0);
String XcsGuWorkarea = oUsers.getString(1,0);
//ReturnValue = "Account ('" + XcsNewIdAccount + "','" + XinsTpAccount + "','" + XiniMaxUsers + "','" + XinsSnPassport + "','" + XciDomain + "','" + XcsGuWorkarea + "') a�adido con exito.";
ReturnValue.put("sCodError", "0");
ReturnValue.put("sMessage", "Account ('" + XcsNewIdAccount + "','" + XinsTpAccount + "','" + XiniMaxUsers + "','" + XinsSnPassport + "','" + XciDomain + "','" + XcsGuWorkarea + "') a�adido con exito.");
ReturnValue.put("sIdObjetoOK", XcsNewIdAccount);
//Cargar los par�metros para luego pasarlos al script
oParams.put("sGuUser", XinsGuUser);
oParams.put("sTpAccount", XinsTpAccount);
oParams.put("iMaxUsers", XiniMaxUsers);
oParams.put("sSnPassport", XinsSnPassport);
oParams.put("sTpPassport", XinsTpPassport);
oParams.put("sTpBilling", XinsTpBilling);
oParams.put("iDomain", XciDomain);
oParams.put("sGuWorkarea", XcsGuWorkarea);
oParams.put("sNewIdAccount", XcsNewIdAccount);
// Inserta la nueva cuenta
oDS.parse(sStorage + "/scripts/account_create.xml", oParams);
oDS.insert(oPKOr, oPKTr, 1);
//oDS.clear();
// *****************************************************
// TO DO : C�digo para activar el usuario
// *****************************************************
// TO DO : C�digo para actualizar el id_account del usuario
DBAudit.log(AlternativeConnection, Account.ClassId, "Acc", "unknown", "0", null, 0, 0, null, null);
}
catch (SQLException e) {
//ReturnValue = "ERROR: " + e.getMessage();
ReturnValue.put("sCodError", "1");
ReturnValue.put("sMessage", "ERROR: " + e.getMessage());
ReturnValue.put("sIdObjetoOK", "");
}